多机数据库的实现----------03集群

通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。

Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿。

由于内存大小的限制,使用一台 Redis 实例显然无法满足需求,这时就需要使用 多台 Redis (集群)作为缓存数据库。才能在用户请求时快速的进行响应。

 

Redis集群是Redis提供的分布式数据库的方案,集群通过分片(sharding)来进行数据共享,并提供复制的故障转移功能

一个Redis集群通常由多个节点(note)组成,在开始的时候,每个节点都是独立的,通过命令CLUSTER MEET<ip><port>连接起来

例如:现在有三个独立的节点127.0.0.1:7000和127.0.0.1:7001和127.0.0.1:7002

多机数据库的实现----------03集群

 

多机数据库的实现----------03集群

给节点分配槽

多机数据库的实现----------03集群

例如:

127.0.0.1:7000>SET date "2013-12-31"

OK

因为键date所在的槽2022是节点7000负责的

127.0.0.1:7000>SET msg "hpaay new year!"

->Redirected to slot[6257] located at 127.0.0.1:7001

OK

127.0.0.1:7001>GET msg

"heppy new year!"

这是由于将msg所在的槽是节点7001复制的,当节点7000返回错误后,会指引客户端转向节点7001.

当客户端转向节点7001后,客户端会重新发送SET命令

可以使用CLUSTER KEYSLOT <key>判断一个键是属于哪个槽

节点和单机数据库的一个区别就是节点只能使用0号数据库

该图展示了节点7000的数据库状态:

多机数据库的实现----------03集群

多机数据库的实现----------03集群

 

复制与故障转移

Redis集群中的节点分为主节点和从节点

多机数据库的实现----------03集群