多机数据库的实现----------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
给节点分配槽
例如:
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的数据库状态:
复制与故障转移
Redis集群中的节点分为主节点和从节点