34 | 第23~33讲课后思考题答案及常见问题答疑
蒋德钧
该思维导图由 AI 生成,仅供参考
你好,我是蒋德钧。
今天,又到了我们的答疑时间,我们一起来学习下第 23~33 讲的课后思考题。同时,我还会给你讲解两道典型问题。
课后思考题答案
第 23 讲
问题:Redis 的只读缓存和使用直写策略的读写缓存,都会把数据同步写到后端数据库中,你觉得它们有什么区别吗?
答案:主要的区别在于,当有缓存数据被修改时,在只读缓存中,业务应用会直接修改数据库,并把缓存中的数据标记为无效;而在读写缓存中,业务应用需要同时修改缓存和数据库。
我把这两类缓存的优劣势汇总在一张表中,如下所示:
第 24 讲
问题:Redis 缓存在处理脏数据时,不仅会修改数据,还会把它写回数据库。我们在前面学过 Redis 的只读缓存模式和两种读写缓存模式(带同步直写的读写模式,带异步写回的读写模式)),请你思考下,Redis 缓存对应哪一种或哪几种模式?
答案:如果我们在使用 Redis 缓存时,需要把脏数据写回数据库,这就意味着,Redis 中缓存的数据可以直接被修改,这就对应了读写缓存模式。更进一步分析的话,脏数据是在被替换出缓存时写回后端数据库的,这就对应了带有异步写回策略的读写缓存模式。
第 25 讲
问题:在只读缓存中对数据进行删改时,需要在缓存中删除相应的缓存值。如果在这个过程中,我们不是删除缓存值,而是直接更新缓存的值,你觉得,和删除缓存值相比,直接更新缓存值有什么好处和不足吗?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文总结了Redis课后思考题的答案及常见问题的解答。文章首先介绍了Redis的只读缓存和使用直写策略的读写缓存的区别,以及在处理脏数据时Redis缓存对应的模式。接着讨论了在只读缓存中对数据进行删改时直接更新缓存值的好处和不足,以及如何应对缓存穿透问题。此外,还探讨了使用LFU策略后是否会发生缓存污染以及使用机械硬盘作为实例容量扩展的优劣势。另外,还讨论了在执行Lua脚本和加锁操作时需要注意的问题,以及当Redis采用RDB机制时事务的原子性保证情况。整体来看,本文涵盖了Redis缓存相关的技术问题,为读者提供了丰富的知识内容。文章内容涉及了Redis主从集群中的数据一致性问题、主从切换导致的数据丢失风险以及Redis缓存的工作原理和使用模式。读者可以通过本文快速了解Redis缓存相关的技术要点,为实际应用提供参考和指导。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Redis 核心技术与实战》,新⼈⾸单¥68
《Redis 核心技术与实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(13)
- 最新
- 精选
- yyl引文:服务熔断、服务降级和请求限流的方法,本质上是为了解决 Redis 实例没有起到缓存层作用的问题,缓存雪崩和缓存击穿都属于这类问题。 哦,明白了,这三种存在的目的虽然不是为了解决缓存失效。但是在该应用场景,其本质就是为了解决缓存失效引发的问题
作者回复: 没错,这是为了保护后端数据库做的应对措施,它们对缓存失效本身并不能改变失效的结果。
2020-11-245 - 第一装甲集群司令克莱斯特书读百遍,多学几次,多思考,每次都有新收获!
作者回复: 温故而知新 :)
2020-12-27 - Geek_bbd494第29讲的答案不对吧,应该是需要写在lua中保证原子性,因为虽然那两个操作都是读不修改数据,但是是否要执行lua中的incr要依据读到的值是否小于20确定的,如果当前值是19,后面并发来了两个线程一前一后读到值是19,那么这两个线程就一前一后执行lua中的incr操作,值变成21了2020-11-301024
- dao缓存雪崩 cache avalanche 缓存击穿 hotspot invalid 缓存穿透 cache penetration2021-04-1111
- 每天晒白牙知识点还没掌握,要再重新学习一遍了2020-11-068
- 树心第24讲答案写错了吧,是同步直写。2021-12-221
- 悟空聊架构按照惯例,我给你提一个小问题。这节课,我提到了 Redis 只读缓存和使用直写策略的读写缓存,这两种缓存都会把数据同步写到后端数据库中,你觉得,它们有什么区别吗? 答: - 区别 1、 一个是删除,一个是更新: 只读缓存会删除 Redis 中的数据和更新数据库中的数据。 而直写策略是更新 Redis 和更新数据库中的数据。 - 区别 2、一致性保证问题 只读缓存中,可以快速将 Redis key 失效,缓存和数据库一致性很容易被保证。 而只写策略中,需要保证数据库和缓存的一致性。 - 区别 3、性能问题 只读缓存中,数据再次被读取时,因为 Redis 中缺失 key,所以需要先从数据库中读到后,放到缓存中,影响性能。 而只写策略中,数据直接从 Redis 中读取,性能较好。2021-06-0111
- escray对答案的时候总是忐忑。 第24课的课后题我完全想错了,使用 Redis 缓存,将脏数据写回数据库,因为是“脏数据”,所以缓存中的数据被修改了,对应了读写缓存模式。而脏数据是在被替换出缓存的时候写回数据库的,这就对应了异步写回策略的读写缓存模式。 如果把这道题当做面试题,估计很多候选人爬不出这个坑。 第25课,直接在缓存中更新,好处是下次访问时可以直接从缓存读;缺点是数据更新时的一致性问题。 第27课,@yeek:“极端情况下,LFU 策略使用的计数器可能会在短时间内达到一个很大值,而计数器的衰减配置项设置的很大,导致计数器值衰减的很慢,这种情况下,数据就有可能在缓存中长期驻留。”——不明觉厉 第31课,老师分三种情况分析了采用 RDB 机制时,Redis 实例发生故障的情况下,能否保证事务完整性,而我自己的答案只考虑了其中一种情况。 第33课,老师和课代表都认为在原主库回复之后 12s-15s 接收到的请求是无法同步到新主库的,我错了。 关于 Redis 属于旁路缓存,本篇讲的很清楚,就是需要在业务代码中显式的增加缓存操作逻辑。记住这一条,不光是 Redis,所有的旁路缓存问题应该都可以面试了。 另外提到了,在使用 Redis 是一般不使用 异步写回策略的读写缓存模式,因为 Redis 没法实现在脏数据被淘汰时,自行写回数据库。2021-04-021
- X既然redis有sub/pub机制,redis为什么不能有个内置的topic,在缓存淘汰的时候pub个消息通知客户端去执行落库的逻辑?2021-11-02
- 玄墨第29讲lua脚本的例子,incr不是本身就可以保证原子性了吗?如果读操作没有必要放在lua脚本,是不是就意味着,其实这个实例都不需要使用到lua脚本?2021-07-19
收起评论