redis分区
分区方式
1. 范围分区
即映射一定范围对象到特定实例,如:1-1000在实例a ,1000-2000在b…
2.哈希分区
通过哈希函数把key转换为数字,然后根据分区数取余,其余即为其所在分区。
分区查询方式:
1. Client side partitioning(客户端处理)
客户端通过节点的ip和port直接select此节点数据
2. Proxy assisted partitioning
客户端通过一个代理层来连接客户端与各节点,客户端发送请求给代理,然后代理根据分区配置再发送请求给相应节点获得响应。
3. Query routing(服务端处理)
客户端发送请求给随机节点,然后该节点再确定发送请求给正确的节点,其中请求并不会由随机节点转发给确定节点,而是客户端重定向到确定节点。
可参考:
http://www.redis.cn/topics/partitioning.html
http://www.open-open.com/lib/view/open1427337394074.html
Presharding
为了扩容方便,可采用presharding: 假设有N台主机,每台主机上部署M个实例,整个系统有T = N x M个实例 由于一个Redis实例的资源消耗非常小,所以一开始就可以部署比较多的Redis实例,比如128个实例 在前期业务量比较低的时候,N可以比较少,M比较多,而且主机的配置(CPU+内存)可以较低 在后期业务量较大的时候,N可以较多,M变小(把实例移到新机器上,)使单台机器上实例数减少,减轻了机器压力 总之,通过这种方法,在容量增长过程可以始终保持Redis实例数(T)不变,所以避免了重新Sharding的问题
可参考:
http://blog.csdn.net/lang_man_xing/article/details/38405269
http://lcycenter.iteye.com/blog/1129929