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
原文:http://www.cnblogs.com/kivmi/p/3629716.html