redis三大缓存问题之缓存雪崩(搭建rediscluster高可用集群方案)

本文主要是介绍redis三大缓存问题之缓存雪崩(搭建rediscluster高可用集群方案),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面一篇文章介绍了redis的缓存穿透问题,接下来这篇文章着重介绍redis的缓存雪崩问题以及解决方案,最后通过代码进行测试。

(一)什么是redis缓存雪崩问题?

缓存雪崩是指,由于缓存层承载着大量请求可以有效的保护数据库存储层,但是如果缓存层同时出现大量缓存失效的情况,或者突然有个别机器节点挂掉了,导致大量的请求直接到达存储层,造成存储层也会挂掉的情况。

(二)redis缓存雪崩常用解决方案?

针对上面出现的缓存雪崩场景,通常有不限于以下一些解决方案,这些方案可以依实际场景互相搭配使用:

1)搭建高可用rediscluster集群保证服务高可用;

2)使用隔离组件为后端限流并降级;在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量;

3)数据预热设置均匀的缓存失效时间;通过缓存reload机制,预先去更新缓存,在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

(三)搭建高可用rediscluster集群,rediscluster工作原理?

这一部分重点介绍何如使用linux搭建一个高可用的rediscluster集群。首先先介绍一下rediscluster的工作原理。

什么是rediscluster高可用集群:

redis cluster集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis cluster集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到1000节点。redis cluster集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。

官方规定每个rediscluster集群至少要有3组小集群,每个小集群至少有一主一从节点,总的槽位数为16384个,槽位仅在主节点上,整个集群必须将16384个槽位全部分配。当一个key请求时,先对该key进行crc16算法计算出该key应该落在哪个片区上,然后将该key转到对应片区小集群中执行redis命令。

如何在linux系统上搭建如下高可用集群,并且支持故障切换和集群伸缩的功能,为了简化演示部署图如下所示:

redis cluster集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,由于节点数较多,这里采用在一台linux机器上创建6个redis实例,并将这6个redis实例配置成集群模式,所以这里搭建的是伪集群模式,但是和真正的使用6台机器进行分布式集群的配置方法几乎一样,集群搭建步骤如下:

第一步:在/usr/local下创建文件夹redis-cluster,然后在其下面分别创建6个文件夾如下,如果涉及权限不足可以使用sudo或su root切换为管理员账号操作。

(1)mkdir -p /usr/local/redis-cluster

(2)mkdir -p 8001

         mkdir -p 8002

         mkdir -p 8003

         mkdir -p 8004

         mkdir -p 8005

         mkdir -p 8006

第二步:把redis的配置文件redis.conf分别拷贝到8001文件夹下,修改redis.conf对应配置如下内容:

 cd 8001 /

sudo cp /opt/redis-5.0.8/redis.conf redis.conf

sudo vi redis.conf(点击键盘i进入编辑模式,编辑完成后ESC键再通过shift+:wq!保存退出)

(1)daemonize yes

(2)port 8001(分别对每个机器的端口号进行设置)

(3)bind 127.0.0.1(如果只在本机则可以指定为127.0.0.1  如果需要外网访问则需要指定本机真实ip)

(4)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)

(5)pidfile /var/run/redis_8001.pid(进程信息

这篇关于redis三大缓存问题之缓存雪崩(搭建rediscluster高可用集群方案)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/300103

相关文章

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2