redis双写一致性,数据持久化及过期淘汰策略

一、redis双写一致性

缓存要和数据库保持一致

1.强一致性场景

一般解决方案

  • 读操作:缓存命中直接返回;缓存未命中查询数据库,写入缓存,设定超时时间。
  • 写操作:延时双删,但还是存在一定风险。
    在这里插入图片描述
    • 先删除缓存还是先修改数据库???
      ------两种操作都会出现不一致问题。
    • 为什么删除两次???
      ------降低数据不一致的概率。
    • 为什么延时???
      ------给数据库主从同步的时间。

绝对强一致解决方案

  • 利用读写锁来保证强一致,但性能很差,reedisson已经提供了实现方法,可直接使用。
    读时不让写,写时排他。
    在这里插入图片描述

    • 共享锁:读锁readLock,加锁之后其他线程可以共享读操作。
    • 排他锁: 独占锁wruteLock,加锁之后阻塞其他线程读写操作。

2.允许延时场景

解决方案

  • 异步通知,延时时间靠mq规则维护。
    在这里插入图片描述

二、Redis持久化

RDB和AOF

1、RDB(Redis Database Backup File)Redis数据备份文件

使用方式
  • save:由主进程执行rdb,会阻塞其他命令。
  • bgsave:由子进程执行命令,避免主进程受影响,建议使用
  • redis.conf文件,自动触发。
    在这里插入图片描述
执行原理

bgsave开始时会fork主进程得到一个子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入rdb。
在这里插入图片描述

2、AOF(Append Only File)追加文件

Redis每次执行的写命令都会记录在aof中,可以看做是日志文件。aof默认是关闭的,需要手动开启。
在这里插入图片描述
在这里插入图片描述

3、AOF和RDB对比

在这里插入图片描述

三、Redis数据过期策略

redis设置数据过期时间后,就需要把key从内存中清理掉,可以按照不同的规则进行删除,这种规则叫做数据过期策略。

1.惰性删除

设置该key过期时间后暂时不管,当需要该key时,检查是否过期,如果过期则删除

  • 优点:对cpu友好,需要时候才做检查,对于很多没有用到的key不需要耗费资源去检查过期时间。
  • 缺点:对内存消耗略大,过期但未使用的key会一直残留在内存中不会被清理。

2.定期删除

每隔一段时间就对一些key进行检查,删除里面过期的key(每次筛选一定量的key),可以具体分为两种模式

  • slow模式:定时任务,执行评率默认为10hz,每次不超过25ms,通过修改配置文件的hz选项调整次数。
  • fast模式:执行频率不固定,但是两次间隔不低于2ms,每次好事不超过1ms。

3.redis使用的过期策略

redis使用的过期策略是两种配合使用。

四、Redis的数据淘汰策略

当redis内存不够的时候继续往redis中添加数据,redis会按照一定规则对数据进行删除,此为redis的淘汰策略。默认为不淘汰数据,内存不足无法新增数据。
在这里插入图片描述

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值