Redis缓存读写策略

Redis基础与使用SpringBoot整合Redis
Redis进阶学习之数据持久化
Redis进阶学习之主从复制、读写分离
Redis进阶学习之哨兵模式和分片集群
Redis主从复制集群搭建
Redis哨兵集群搭建
Redis分片集群搭建
Redis使用RedisTemplate配置和访问集群
Redis缓存策略
Redis缓存异常场景分类

Redis缓存读写策略

Redis和数据库如何保证数据的一致,redis有三种缓存策略

1. Cache-Aside(旁路缓存模式)
2. Read/Write Through Pattern(读写穿透)
3. Write-Behind(异步缓存写入)

1. Cache-Aside(旁路缓存模式)
1.1 写操作

先更新数据库的记录,再删除缓存中的旧数据

在这里插入图片描述
如果先删再写,会导致数据库和缓存数据不一致(redis的写入速度要快于数据库)

1.2 读

从缓存中读取数据,读取不到再从数据库读取,再将数据库读取的数据同步到缓存中。
在这里插入图片描述
缺点

  1. 首次请求数据一定不在缓存中,则每次第一次请求都会请求数据库。
    解决办法:可以将热点数据可以提前放入cache 中。
  2. 写操作比较频繁的话导致缓存中的数据会被频繁被删除,这样会影响缓存命中率 。
    解决办法:
    数据库和缓存数据强一致场景 :更新DB的时候同样更新cache,不过我们需要加一个锁/分布式锁来保证更新cache的时候不存在线程安全问题。
    可以短暂地允许数据库和缓存数据不一致的场景 :更新DB的时候同样更新cache,但是给缓存加一个比较短的过期时间,这样的话就可以保证即使数据不一致的话影响也比较小。
2. Read/Write Through Pattern(读写穿透)
2.1. 写

以缓存为主体,查询缓存数据,如果查询不到缓存数据则直接更新数据库数据;如果查询到缓存数据,则更新缓存数据,之后再通过缓存的数据更新数据库。
在这里插入图片描述

2.2. 读

读取缓存,如果缓存没有则将数据库的数据同步到缓存中,再重新读取缓存。
在这里插入图片描述
缺点:首次请求数据一定不再 cache 的问题,对于热点数据可以提前放入缓存中

3. Write Behind Pattern(异步缓存写入)

异步缓存写入和 读写穿透很相似,两者都是由 缓存服务来负责缓存 和 数据库的读写。
不同点

  1. 读写穿透是同步更新 缓存和数据库
  2. 异步缓存写入则是只更新缓存,不直接更新数据库,而是改为异步批量的方式来更新数据库。

异步缓存写入对数据一致性带来了更大的挑战,比如缓存数据可能还没异步更新数据库的话,缓存服务可能就就挂掉了。这种策略在我们平时开发过程中也非常非常少见,但是不代表它的应用场景少,比如消息队列中消息的异步写入磁盘、MySQL 的 InnoDB Buffer Pool 机制都用到了这种策略。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值