Redis分区理论知识

来源:互联网 发布:js apply方法详解 编辑:程序博客网 时间:2024/06/05 05:43

1、 分区好处
(1)支持多个Redis实例分布在不同机器上,扩展可用内存、CPU及带宽,从而支持更大数据库

2、 分区缺点
(1) 不支持涉及多个key操作
(2) 不支持涉及多个Key的事务
(3) ……

3、 分区原理
(1) 范围分区:key名称必须为统一格式key_name:ID,根据key ID进行选择,比如有四个实例0,1,2,3,ID=0-1000存储到instance 0,ID=1001-2000存储到instance 1,以此类推
(2) Hash分区:根据CRC32(哈希函数)计算key的hash值,然后与instance个数进行模运算,以此来确定目标instance
(3) 一致性哈希(高级Hash分区):由少数Redis Client和Proxies实现

4、 分区实现思路
(1) 客户端分区:客户端直接选择正确Redis节点,很多Redis客户端采用此种方式实现
(2) 代理辅助分区:客户端发送请求给代理,由代理根据事先设定分区策略确定该访问哪一个Redis节点
(3) 查询路由(Query routing):客户端发送查询给一个【随机Redis节点】,由该节点转发到【实际目标Redis节点】

5、 分区具体实践
(1) Redis Cluster(Mix between query routing and Client implementation,推荐)
(2) Twemproxy(proxy implementation)
(3) Clients implementation supporting consistent hashing
—Redis-rb
—Predis

6、 Redis作为Cache和Data Store的限制
(1) Redis作为Cache:使用consistent hash后,系统伸缩性好
(2) Redis作为Data Store:指定Key必须发送到指定Redis节点,因此节点数目是固定的,并且不能随意增减
如何解决?(使用Redis主从复制):因为Redis是轻量级内存数据库(空闲实例仅仅占用1M内存空间),因此可以在数据量较小的情况下就在一个Server上维护多个Redis实例,当数据量较大需要增加Redis实例时,就在新的配置较好的Server上建立一些新的空闲的Redis实例,然后设置为老的Redis实例的Slave Instance,最后酌情停止Client,完成新老Redis实例的切换,虽然还是会暂停客户端,但可以将时间和数据迁移成本降到最低

原创粉丝点击