redis缓存策略小结
比较常用的缓存策略,同样这也是facebook的缓存策略:
1. 读:应用程序从cache中取数据,取到后返回。
2. 读:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中。
3. 增删改:先把数据存到数据库中,成功后,再让缓存失效。
这里针对第3点,会有一些其他的用法,乍一看都是很正常的,但后来细细一想其实都是有问题的。
比如(1)“先更新redis,然后更新DB”
(2)“先更新DB,然后更新缓存”
(3)“先删除缓存,然后再更新数据库”
让我们来看一看这三个都有什么问题,先假设更新DB和更新redis都是在同一个事务中,其中一个失败了就都不操作,或者假设这两个动作都不会失败。
先看第(1)个和第(2)个,Quora上的这个问答已经说明了原因:https://www.quora.com/Why-does-Facebook-use-delete-to-remove-the-key-value-pair-in-Memcached-instead-of-updating-the-Memcached-during-write-request-to-the-backend。
为了更生动形象说明问题,我画了张图来证明它的不可行性:
从图中可以看出,两个并发写操作,由于某些原因(io阻塞,cpu时间片分配,协程调度,网络原因等等),导致goroutine2的更新DB晚于goroutine1的更新DB,但是redis中此时的数据goroutine1的,而DB中的数据时goroutine2的,这就出现了不一致的问题,DB中是脏数据。
第(2)个是同样的道理,见下图:
下面我们来看第(3),两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,会把老数据读出来后放到缓存中,然后更新操作更新了DB。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。
---------------------
作者:jeffrey11223
来源:CSDN
原文:https://blog.csdn.net/jeffrey11223/article/details/78823047
版权声明:本文为博主原创文章,转载请附上博文链接!
redis缓存策略小结相关推荐
- Redis缓存策略设计及常见问题
Redis缓存设计及常见问题 缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要.下面会介绍缓存使用技巧和设计方案,包含如下内容:缓存的收益和成本分析.缓存更新策略的选 ...
- Redis 缓存穿透、雪崩、缓存数据库不一致、持久化方式、分布式锁、过期策略
1. Redis 缓存穿透 1.1 Redis 缓存穿透概念 访问了不存在的 key,缓存未命中,请求会穿透到 DB,量大时可能会对 DB 造成压力导致服务异常. 由于不恰当的业务功能实现,或者外部恶 ...
- Redis缓存失效策略思考
1 删除过期数据 我们设置Redis元素时可以指定过期时间,那么Redis如何删除这些超时元素?Redis采用了两种策略:定期删除和惰性删除. (1) 定期删除 Redis每隔一段时间就检查哪些KEY ...
- @cacheable 设置过期时间_缓存面试三连击——聊聊Redis过期策略?内存淘汰机制?再手写一个LRU 吧!...
大家好,今天我和大家想聊一聊有关redis的过期策略的话题. 听到这里你也许会觉得:"我去,我只是个日常搬砖的,这种偏底层的知识点,我需要care吗?" 话虽如此·,但是兄die, ...
- redis缓存清除策略 、获取dumb.rdb或者***.aof文件的位置
redis缓存清除策略 获取dumb.rdb或者***.aof文件的位置
- Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内
1.基础说明 当redis设置内存使用限制后,当达到内存限制时,Redis将尝试删除key(控制节点的最大使用内存) redis.conf中配置项maxmemory <bytes>或者控制 ...
- Redis缓存过期和淘汰策略
题记: 文章内容输出来源:拉勾教育Java高薪训练营. 本篇文章是 Redis 学习课程中的一部分笔记. Redis缓存过期和淘汰策略 Redis性能高: 官方数据 读:110000次/s 写:810 ...
- Redis缓存过期策略
转载出处链接 一.背景 线上你写代码的时候,想当然的认为写进 redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责? 常见的有两个问题: 往 redis 写入的数据怎么没了? 可能有同学 ...
- 【Redis学习03】redis缓存及其更新策略
文章目录 1. 什么是缓存 2. 添加redis缓存 2.1 缓存商铺信息 3. 缓存更新策略 3.1 缓存更新策略方法 3.2 主动更新策略 3.3 缓存更新策略总结 4. 对商铺查询的缓存添加超时 ...
最新文章
- kafka-manager 的编译和使用(附安装包)
- sql help cs
- 实验四:汇编代码调用系统调用的工作过程
- 【转蝈蝈俊.net 】SQL Server 2005 配置发送邮件
- Python零碎知识(7):硬性出错
- VC6程序申请管理员权限
- 拉普拉斯矩阵(Laplace Matrix)与瑞利熵(Rayleigh quotient)
- java中对于异常的处理,代码简单描述
- Android开发之RecyclerView之刷新数据notifyDataSetChanged失败的问题
- About the windchill Command -
- android fragment动画,Fragment 的过场动画
- Java反序列s ysoserial Spring
- NOIP2015运输计划
- 图说报告|智能技术群的“核聚变”推动智能+时代到来
- python模拟登录中国海洋大学教务系统(青果)- 爬取学期所有专业课至excel - 并进行课表排课(三)
- 敏捷迭代燃尽图_3个敏捷燃尽报告以及如何使用它们
- 10100cpu支持Linux,i3-10100 cpu能装win7吗?i3-10100 装win7详细教程(完美支持)
- 武汉大学 计算机学院 曹瑀,武大计算机青协
- 同济大学软件学院万院长谈择业(转载)
- scanf(%*s)