Redis 分布式缓存

这篇具有很好参考价值的文章主要介绍了Redis 分布式缓存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分布式缓存

单点 Redis 的问题及解决

  • 数据丢失:实现Redis数据持久化
  • 并发能力:搭建主从集群,实现读写分离
  • 存储能力:搭建分片集群,利用插槽机制实现动态扩容
  • 故障恢复能力:利用哨兵机制,实现健康检测和自动恢复

RDB

RDB全称Redis Database Backup file (Redis数据备份文件),也被叫做Redis数据快照,简单来说就是把内存中的所有数据都记录到磁盘上,当Redis实时故障重启后,从磁盘读取快照文件,恢复数据

save #由Redis主进程来执行RDB,会阻塞所有命令

bgsave #开启子进程执行RDB,避免主进程收到影响,推荐

RDB默认是开启的,内部有触发机制,可以在redis.conf文件中找到,RDB文件也支持压缩;Redis关闭时,也会触发一次RDB

RDB方式bgsave的基本流程

  • fork主进程得到一个子进程,共享内存空间
  • 子进程读取内存数据并写入新的RDB文件
  • 用新的RDB文件替换旧的RDB文件

RDB会在什么时候执行?save 60 1000的含义?

  • 默认时停止服务的时候
  • 代表60s内至少执行1000次修改才会触发RDB

RDB的缺点

  • RDB执行间隔时间长,两次RDB之间的写入数据由丢失的风险
  • fork子进程、压缩、写RDB文件比较耗时

AOF

AOF全称Append Only Field(追加文件)。Redis处理的每一个写命令都会记录在AOF文件。可以看做时命令日志文件。

AOF默认是关闭的,AOF的命令记录频率也可以通过修改redis.conf文件修改

# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always

# 写命令执行完先放到AOF缓冲区,然后表示每隔1s将缓冲区数据写入到AOF文件,是默认方案
appendfsync everysec

# 写入命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写到磁盘
appendfsync no
  • 因为AOF记录的是每次写的命令。AOF文件会比RDB文件大,而且AOF中会记录对同一个key的多次写操作,但是只有最后一次的才有意义,通过执行bgreWriteaop命令,可以让AOF文件执行重写功能,用最少得命令达到相同的效果

  • Redis也会在触发阈值时自动去重写AOF文件,阈值也可以在redis.conf中配置

    # AOF文件比上次文件增长超过多少百分比触发重写
    auto-aof-reWrite-percentage 100
    
    # AOF文件体积最小多大以上才触发重写
    auto-aof-rewrite-min-size 64mb
    
  • AOF和RDB同时开启,会以AOF优先;在实际的开发中往往结合两者使用

Redis主从

单点的Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离;

Redis 分布式缓存

主从数据同步原理

第一次是全量同步

Redis 分布式缓存

全量同步的流程

  1. slave节点请求增量同步
  2. master节点判断replid,发现不一致,拒绝增量同步
  3. master将完整的内存数据生成RDB文件,发送RDB到slave
  4. slave清空本地数据,加载master的RDB文件
  5. master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave

如果slave重启后,执行增量同步

哨兵(Sentinel)

Redis提供哨兵(Sentinel)机制来实现主从集群的自动恢复

  • 监控:哨兵会不断监控master和slave的健康状况
  • 故障自动恢复:当master故障时,Sentinel哨兵会将其中一个slave提升为master,当老master恢复后,还是以新的master为主
  • 通知:哨兵充当Redis客户端发现来源,当集群发生故障转移时,会将最新的消息推送给Redis的客户端

哨兵基于心跳监测机制,每个1s向集群的每一个实例发送ping命令:

  • 主观下线:如果某个哨兵节点发现某实例为在规定时间内响应,则认为该实例主观下线
  • 客观下线:若超过指定数量(quorum)的哨兵都认为该实例主观下线,则该实例客观下线,类似投票机制

选举新的master

  • 首先会判断slave节点与master节点断开时间的长短,如果超过指定值,则会排除在外
  • 然后根据slave节点的slave-priority,越小优先级越高
  • slave一样,则判断slave节点的offset值。越大说明数据越新,优先级越高
  • 最后判断slave节点的运行id大小,越小优先级越高

故障转移

  • Sentinel哨兵给备选的slave发送命令,让该节点称为新的master
  • 哨兵给所有的其它slave发送命令,让这些节点成为新master的slave节点,开始从master同步数据
  • 最后,哨兵将故障节点,也就是老的master标记为slave从节点

Redis分片集群

Redis 分布式缓存

主从和哨兵解决了高可用、高并发读的问题,但依然有两个问题没有解决:

  • 海量数据存储问题
  • 高并发写的问题

使用分片集群可以解决以上问题文章来源地址https://www.toymoban.com/news/detail-499831.html

  • 集群中有多个master,每个master保存不同的数据
  • 每个master都可以有多个slave节点
  • master之间通过ping监测彼此健康状态
  • 客户端请求可以访问集群中的任一个节点,最终都会被转发到正确的节点上

散列插槽

  1. Redis会把每个master节点映射到0~16383共16384个插槽(Hash slot)上
  2. 数据key不是与节点绑定,而是与插槽绑定,Redis会根据key的有效部分计算插槽值,分为两种情况:
    • key中包含"{}“,且”{}“中至少包含一个字符,”{}"中的部分是有效部分,这就实现了控制不同的key在同一插槽上
    • 可以中不包含"{}",整个可以都是有效部分
    • 计算方式是利用CRC16算法得到一个Hash值,然后对16384取余,得到的就是slot值

到了这里,关于Redis 分布式缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis分布式缓存方案

    数据丢失:数据持久化 并发能力弱:搭建主从集群,实现读写分离 故障恢复问题:哨兵实现健康检测,自动恢复 存储能力:搭建分片集群,利用插槽机制实现动态扩容 RDB持久化 数据库备份文件,也叫快照,把内存数据存到磁盘。使用save进行主动RDB,会阻塞所有命令。建议

    2023年04月25日
    浏览(43)
  • 缓存的变更(JVM本地缓存->Redis分布式缓存)

    在一次需求修改中,下游的服务附加提出了,针对某个业务数据缓存的生效时间的要求 原JVM设计方案: 采用jvm本地缓存机制,定时任务30秒刷新一次 现在redis方案: 因为很多地方使用了这个业务数据缓存,使用方面不能改动过多 因为是分布式部署,如果只使用jvm缓存,无法

    2024年02月11日
    浏览(48)
  • 23-MyBatis缓存、本地缓存、分布式Redis缓存、前端缓存

             MyBatis一级缓存、          MyBatis二级缓存、          本地缓存:单节点          分布式Redis缓存:多节点          前端sessionStorage缓存:会话缓存          前端localStorage缓存:前端本地缓存 MyBatis一级缓存默认是开启的。 在Spring Boot中需要添加

    2024年02月13日
    浏览(36)
  • SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】

    上一篇实现了单体应用下如何上锁,这一篇主要说明如何在分布式场景下上锁 上一篇地址:加锁 需要注意的点是: 在上锁和释放锁的过程中要保证 原子性操作 核心是上锁和解锁的过程 关于解锁使用脚本参考:SET key value [EX seconds] [PX milliseconds] [NX|XX] 3.1 一个服务按照多个端口同时

    2023年04月10日
    浏览(52)
  • Redis分布式缓存部署方案详解

    高可用性 :分布式部署可以避免单点故障,提高系统的可用性。 高性能 :分布式部署可以通过增加节点数量来提高系统的吞吐量和响应速度。 易于扩展 :分布式部署可以方便地扩展系统的容量和性能,只需添加新节点即可。 Redis的分布式部署有多种方式,例如主从复制、

    2024年02月07日
    浏览(54)
  • Redis学习(三)分布式缓存、多级缓存、Redis实战经验、Redis底层原理

    单节点Redis存在着: 数据丢失问题:单节点宕机,数据就丢失了。 并发能力和存储能力问题:单节点能够满足的并发量、能够存储的数据量有限。 故障恢复问题:如果Redis宕机,服务不可用,需要一种自动的故障恢复手段。 RDB持久化 RDB(Redis database backup file,Redis数据库备份

    2024年02月16日
    浏览(41)
  • Redis缓存设计与性能优化【缓存和数据库不一致问题,解决方案:1.加过期时间这样可以一段时间后自动刷新 2.分布式的读写锁】

    在大并发下,同时操作数据库与缓存会存在数据不一致性问题 1、双写不一致情况 2、读写并发不一致 解决方案: 1、对于并发几率很小的数据(如个人维度的订单数据、用户数据等),这种几乎不用考虑这个问题,很少会发生缓存不一致, 可以给缓存数据加上过期时间,每隔一

    2024年04月13日
    浏览(54)
  • 初识 Redis - 分布式,内存数据存储,缓存

    目录 1. 什么是 Redis 1.1 Redis 内存数据存储 1.2 Redis 用作数据库 1.3 Redis 用作缓存 (cache) 1.4 用作消息中间件 The open source , in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. 开源的 内存数据存储 ,被数百万开发人员用作 数据库、缓存、流引擎

    2024年02月15日
    浏览(53)
  • SpringBoot使用Redis实现分布式缓存

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:SpringBoot 框架从入门到精通 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:SpringBoot使用

    2023年04月09日
    浏览(43)
  • Redis学习(三)持久化机制、分布式缓存、多级缓存、Redis实战经验

    单节点Redis存在着: 数据丢失问题:单节点宕机,数据就丢失了。 并发能力和存储能力问题:单节点能够满足的并发量、能够存储的数据量有限。 故障恢复问题:如果Redis宕机,服务不可用,需要一种自动的故障恢复手段。 RDB持久化 RDB(Redis database backup file,Redis数据库备份

    2024年02月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包