http://m.blog.csdn.net/blog/wenzhibinbin_pt/22808939html
http://www.verydemo.com/demo_c288_i90831.htmlredis
Jedis分片及扩容编程
http://blog.csdn.net/lang_man_xing/article/details/38405269服务器
1. 扩容问题:spa
由于使用了一致性哈稀进行分片,那么不一样的key分布到不一样的Redis-Server上,当咱们须要扩容时,须要增长机器到分片列表中,这时候会使得一样的key算出来落到跟原来不一样的机器上,这样若是要取某一个值,会出现取不到的状况,对于这种状况,Redis的做者提出了一种名为Pre-Sharding的方式:.net
Pre-Sharding方法是将每个台物理机上,运行多个不一样断口的Redis实例,假若有三个物理机,每一个物理机运行三个Redis实际,那么咱们的分片列表中实际有9个Redis实例,当咱们须要扩容时,增长一台物理机,步骤以下:设计
A. 在新的物理机上运行Redis-Server;htm
B. 该Redis-Server从属于(slaveof)分片列表中的某一Redis-Server(假设叫RedisA);blog
C. 等主从复制(Replication)完成后,将客户端分片列表中RedisA的IP和端口改成新物理机上Redis-Server的IP和端口;get
D. 中止RedisA。
这样至关于将某一Redis-Server转移到了一台新机器上。Prd-Sharding其实是一种在线扩容的办法,但仍是很依赖Redis自己的复制功能的,若是主库快照数据文件过大,这个复制的过程也会好久,同时会给主库带来压力。因此作这个拆分的过程最好选择为业务访问低峰时段进行。
再总结一下这里的扩容:其实这里的扩容很简单的思想:就是前期咱们可能只用到两三个服务器,可是可是担忧后期要扩容,因此前期就如今每个机器上面再装两个redis,这样就有9个redis嘛,后面若是确实服务器不够,须要扩容,就从新找一台新机来代替9个中的一个redis,有人说,这样不仍是9个么,是的,可是之前服务器上面有三个redis,压力很大的,这样作,至关于单独分离出来而且将数据一块儿copy给新的服务器。值得注意的是,还须要修改客户端被代替的redis的IP和端口为如今新的服务器,只要顺序不变,不会影响一致性哈希分片(刚才上面刚说了哈)。
2. 单点故障问题:
仍是用到Redis主从复制的功能,两台物理主机上分别都运行有Redis-Server,其中一个Redis-Server是另外一个的从库,采用双机热备技术,客户端经过虚拟IP访问主库的物理IP,当主库宕机时,切换到从库的物理IP。只是过后修复主库时,应该将以前的从库改成主库(使用命令slaveof no one),主库变为其从库(使命令slaveof IP PORT),这样才能保证修复期间新增数据的一致性。