ZooKeeper 学习
集群安装
单机模式安装
客户端脚本
Java客户端 API 使用
典型使用场景
阅读 做的笔记
集群安装
1、修改 zoo.cfg
修改%ZK_HOME%/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.5/zkData
clientPort=2181
server.1=s1:2888:3888
server.2=s2:2888:3888
server.3=s3:2888:3888
2、在 dataDir 中创建 myid
...
点我阅读更多...
Java 序列化与反序列化
Java对象的序列化是什么?
Java 怎么实现的序列化?
实现java.io.Serializable接口
通过ObjectOutputStream和ObjectInputStream进行对象的序列化和反序列化
如果需要父类对象也要序列化,父类对象也要实现Serializable接口
transient可以阻止对象序列化,反序列化后变量会被设置为初始值
serialVersionUID的作用是什么
参考
附
序列化是对象持久化的一种手段,在使用 Java序列化对象是,会将对象保存为一组字节,需要时,再将字节组组装成对象
Java对象的序列...
点我阅读更多...
zookeeper实现分布式锁
为什么要使用分布式锁?
排他锁
什么是排他锁(Exclusive Locks,简称 X 锁)?
定义排他锁
获取排他锁
释放排他锁
整体流程
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果在不同主机间共享了一个或一组资源,访问这些资源的时候,为了保证一致性,就需要使用分布式锁。
为什么要使用分布式锁?
一般情况下,在实际的开发中会使用数据库固有的排他性来实现不同程度的互斥,但是目前大部分的业务的瓶颈却是在数据库上,如果再加上行锁,表锁,数据库的性能变得更低。
排他锁
什么是排他锁(Exclusive Locks,简称 X 锁)?
如果事务 T 对对...
点我阅读更多...
Java 中的 单例
单例的好处
单例的实现方式
方式一:
缺点:
方式二:
优点
缺点
方法三:
参考
单例的好处
对于频繁使用的对象,节省 new 操作花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销。
由于 new 操作的次数减少,因而对系统内存的使用频率降低,这将减轻 GC 压力,缩短 GC 停顿时间。
单例的实现方式
方式一:
public class Elvis {
private static final Elvis ...
点我阅读更多...
centos7 安装和配置 rabbitmq
安装 erlang
安装 rabbitmq server
启动
安装 web 管理页面
用户管理
用户角色
在 **centos 7 上安装和配置 rabbitmq。官方文档有更加详细的配置
安装 erlang
rabbitmq 需要有 erlang 的环境,如果使用 yum 安装,执行下面的命令
su -c 'rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm'
su -c 'yum install foo’
yum install erlang
执行完成后可以使用 erlang 进行检查是否安装成功。
安装 ...
点我阅读更多...
GeoHash实现周边推荐
GeoHash基础
GeoHash转换过程
转换
合并
误差
Java实现代码
参考内容
旅游,外卖等需要定位的项目中一般会有周边推荐的需求,如推荐出周边五公里的景点。目前实现的算法也有很多,这里简单的说下GeoHash的实现原理以及Java的实现代码。
GeoHash基础
GeoHash使用一个字符串来表示经度和纬度。这样在做周边搜索的时候可以在一列上加索引。
GeoHash表示的不是一个点,而是一个矩形区域。
精度范围为(-180,180),纬度范围为(-90,90)
GeoHash转换过程
转换
GeoHash就是将经纬度信息,转换为可以排序、比较的字符串编码。
首先将纬度范围(-...
点我阅读更多...
springboot redis实现session共享
工具
模拟分布式
创建一个springboot项目
配置redis和访问的端口
配置redis缓存session
编写一个测试的控制类
测试
目前缺点
参考资料
当创建分布式服务时会出现session共享的问题,即第一次访问的时候负载均衡会将请求分配到server1上,但是当第二次访问的时候,如果请求没有分配到server1上,那么用户的会话状态将丢失。下面给出了一种使用springboot整合redis的共享session的例子。
工具
nginx-1.7.10
redis-2.8
模拟分布式
使用nginx模拟一个简单的分布式的环境,在nginx.conf中添加
upstream tomcat {
...
点我阅读更多...