首页 > 其他 > 详细

redis 在多个实例之间如何拆分数据

时间:2014-03-28 20:58:41      阅读:704      评论:0      收藏:0      [点我收藏+]

  redis instance 与key的映射

  1.range partition 指定redis实例进行映射

   redis instance:R0 R1 R2 R3

   key set : 0-10000  10001-20000  20001-30000 30001-40000

   这样就可以这样映射,R0  0-10000     R1 10001-20000      R2 20001-30000     R3 30001-40000

   但是这种映射关系,必须引入一张映射表,来实现实例跟keys之间映射关系,也就是说,每次数据更新,都必须更新映射表和相应的redis实例

  2. hash partition  使用一致性hash分片

     这种方式,需要引入一种hash算法,比如crc32,md5,可以根据key名,生成一致性hash,然后根据模运算,生成一个有限的序列,比如0-9,从而实现序列跟redis实例之间的映射关系 ,例如,如果有10个redis实例,那么我们可以使用crc32(key) % 10来获取对应的实例

 如何实现分区呢?

  1.client side partition 使用多个redis客户端分区

  2.proxy assisted partition 代理辅助分区,redis 客户端向redis代理发送请求,而不直接跟redis实例进行通信,然后proxy根据配置文件,来查找对应的redis实例

  并且将响应告诉给客户端

  3.query route 查询路由,发送对某个redis实例的查询操作,然后由redis实例进行路由,重定向到相应的redis实例

  分区缺点:

  1.包含映射到不同实例的多个key操作是不支持的

  2.不支持涉及到多个key的事务

  3.数据处理和数据恢复的复杂性增加,生成恢复文件时,必须合并所有主机和实例上的所有的aof或者rdb文件

  4.在客户端分区和代理分区的模式下,不支持扩容,在其它模式下,扩容时透明的

  

  

  

  

redis 在多个实例之间如何拆分数据,布布扣,bubuko.com

redis 在多个实例之间如何拆分数据

原文:http://www.cnblogs.com/kivmi/p/3629716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!