Bootstrap

redis 分区 、集群概念

分区

是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。分区可以让Redis管理更大的内存,Redis将可以使用所有机器的内存。如果没有分区,你最多只能使用一台机器的内存。分区使Redis的计算能力通过简单地增加计算机得到成倍提升,Redis的网络带宽也会随着计算机和网卡的增加而成倍增长。

分区实现原理:

https://www.cnblogs.com/hjwublog/p/5681700.html     点击打开链接

Redis分区实现方案?

  • 客户端分区就是在客户端就已经决定数据会被存储到哪个redis节点或者从哪个redis节点读取。大多数客户端已经实现了客户端分区。

  • 代理分区 意味着客户端将请求发送给代理,然后代理决定去哪个节点写数据或者读数据。代理根据分区规则决定请求哪些Redis实例,然后根据Redis的响应结果返回给客户端。redis和memcached的一种代理实现就是Twemproxy

  • 查询路由(Query routing) 的意思是客户端随机地请求任意一个redis实例,然后由Redis将请求转发给正确的Redis节点。Redis Cluster实现了一种混合形式的查询路由,但并不是直接将请求从一个redis节点转发到另一个redis节点,而是在客户端的帮助下直接redirected到正确的redis节点。

 

 

集群

redis集群就是分区的一种的实现,用的是官方集群,https://blog.csdn.net/u014203449/article/details/81043137#t16点击打开链接Redis Cluster实现了一种混合形式的查询路由

重要命令:redis-trib.rb是官方提供的集群工具,在源码的src目录下。改每个节点的配置文件 

cluster-enabled yes以此配置文件启动
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

只不过练习通常把节点都放在了一台机器上。

如果分区扩张了(集群节点增加了),就得做数据迁移,槽分配,麻烦,所以不如一开始就做分区:

分布式Redis是前期做还是后期规模上来了再做好?为什么?

既然Redis是如此的轻量(单实例只使用1M内存),为防止以后的扩容,最好的办法就是一开始就启动较多实例。即便你只有一台服务器,你也可以一开始就让Redis以分布式的方式运行,使用分区,在同一台服务器上启动多个实例。

一开始就多设置几个Redis实例,例如32或者64个实例,对大多数用户来说这操作起来可能比较麻烦,但是从长久来看做这点牺牲是值得的。

这样的话,当你的数据不断增长,需要更多的Redis服务器时,你需要做的就是仅仅将Redis实例从一台服务迁移到另外一台服务器而已(而不用考虑重新分区的问题)。一旦你添加了另一台服务器,你需要将你一半的Redis实例从第一台机器迁移到第二台机器。

 

重新分区:

http://doc.redisfans.com/topic/cluster-tutorial.html#id4点击打开链接

重要命令:

$ ./redis-trib.rb reshard 127.0.0.1:7000  后面会有提示移动多少槽,往哪移,移谁的
;