Redis集群解决高并发问题

tech2025-10-24  5

概念

Redis的主从复制解决了数据的可靠性问题,但仍存在如下问题:

容量不够,redis如何进行扩展?并发写操作,redis如何实现分摊?

这就需要redis集群来解决。

什么是集群?

Redis集群实现了对Redis的水平扩容,即启动n个节点,将整个数据库分布存储在这n个节点中,每个节点存储总数的1/n。Redis通过分区来保存多份数据,当部分节点失效时,不影响数据的可用性。

集群安装步骤

注意:至少3个节点,低于3个无法创建集群。

安装Ruby文件,配置Ruby环境变量。安装Ruby-Redis的驱动。下载Redis提供的redis-trib.rb集群ruby脚本。修改redis的配置文件,支持集群方式 cluster-enabled yes    #打开集群方式cluster-config-file node-xxx.conf    #设置节点的配置文件cluster-node-timeout 15000    #设置节点失联时间,毫秒启动redis服务(所有服务器)/redis-trib.rb create --replicas 1    #创建集群,1:为一个主机配置1个从机redis-trib.rb check 127.0.0.1:6380:检查集群是否启动成功cluster nodes:查看集群节点情况分配的原则是:保证每个主库运行在不同的ip地址上;每个从库和主库不在一个ip地址上。

数据块(slots)

一个Redis集群包含16384个插槽,数据库中每个键都属于这16384槽中的一个,集群使用公司CRC16%16384来计算键属于哪一个槽。每个节点负责处理一部分插槽,如一个集群有3个节点,A节点负责处理0-5500号插槽,节点B负责处理5501-11000号插槽,节点C负责处理11001-16383号插槽。redis-cli查询键值时,如客户端对应的服务器中不存在该键,则Redis会报错。而是用redis-cli -c -p port中的-c参数就可以实现自动重定向。不在一个slot中的数据,不能使用mget和mset等多键操作。cluster-require-full-converage:16384个slot都正常时才能对外提供服务。

详细配置链接如下:https://www.cnblogs.com/yy3b2007com/p/11033009.html

最新回复(0)