Redis 核心技术与实战
蒋德钧
中科院计算所副研究员
79224 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 53 讲
开篇词 (1讲)
实践篇 (28讲)
Redis 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

34 | 第23~33讲课后思考题答案及常见问题答疑

你好,我是蒋德钧。
今天,又到了我们的答疑时间,我们一起来学习下第 23~33 讲的课后思考题。同时,我还会给你讲解两道典型问题。

课后思考题答案

第 23 讲

问题:Redis 的只读缓存和使用直写策略的读写缓存,都会把数据同步写到后端数据库中,你觉得它们有什么区别吗?
答案:主要的区别在于,当有缓存数据被修改时,在只读缓存中,业务应用会直接修改数据库,并把缓存中的数据标记为无效;而在读写缓存中,业务应用需要同时修改缓存和数据库。
我把这两类缓存的优劣势汇总在一张表中,如下所示:

第 24 讲

问题:Redis 缓存在处理脏数据时,不仅会修改数据,还会把它写回数据库。我们在前面学过 Redis 的只读缓存模式和两种读写缓存模式(带同步直写的读写模式,带异步写回的读写模式)),请你思考下,Redis 缓存对应哪一种或哪几种模式?
答案:如果我们在使用 Redis 缓存时,需要把脏数据写回数据库,这就意味着,Redis 中缓存的数据可以直接被修改,这就对应了读写缓存模式。更进一步分析的话,脏数据是在被替换出缓存时写回后端数据库的,这就对应了带有异步写回策略的读写缓存模式。

第 25 讲

问题:在只读缓存中对数据进行删改时,需要在缓存中删除相应的缓存值。如果在这个过程中,我们不是删除缓存值,而是直接更新缓存的值,你觉得,和删除缓存值相比,直接更新缓存值有什么好处和不足吗?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Redis 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • yyl
    引文:服务熔断、服务降级和请求限流的方法,本质上是为了解决 Redis 实例没有起到缓存层作用的问题,缓存雪崩和缓存击穿都属于这类问题。 哦,明白了,这三种存在的目的虽然不是为了解决缓存失效。但是在该应用场景,其本质就是为了解决缓存失效引发的问题

    作者回复: 没错,这是为了保护后端数据库做的应对措施,它们对缓存失效本身并不能改变失效的结果。

    3
  • 第一装甲集群司令克莱斯特
    书读百遍,多学几次,多思考,每次都有新收获!

    作者回复: 温故而知新 :)

  • Geek_bbd494
    第29讲的答案不对吧,应该是需要写在lua中保证原子性,因为虽然那两个操作都是读不修改数据,但是是否要执行lua中的incr要依据读到的值是否小于20确定的,如果当前值是19,后面并发来了两个线程一前一后读到值是19,那么这两个线程就一前一后执行lua中的incr操作,值变成21了
    10
    24
  • dao
    缓存雪崩 cache avalanche 缓存击穿 hotspot invalid 缓存穿透 cache penetration
    11
  • 每天晒白牙
    知识点还没掌握,要再重新学习一遍了
    8
  • 树心
    第24讲答案写错了吧,是同步直写。
    1
  • 悟空聊架构
    按照惯例,我给你提一个小问题。这节课,我提到了 Redis 只读缓存和使用直写策略的读写缓存,这两种缓存都会把数据同步写到后端数据库中,你觉得,它们有什么区别吗? 答: - 区别 1、 一个是删除,一个是更新: 只读缓存会删除 Redis 中的数据和更新数据库中的数据。 而直写策略是更新 Redis 和更新数据库中的数据。 - 区别 2、一致性保证问题 只读缓存中,可以快速将 Redis key 失效,缓存和数据库一致性很容易被保证。 而只写策略中,需要保证数据库和缓存的一致性。 - 区别 3、性能问题 只读缓存中,数据再次被读取时,因为 Redis 中缺失 key,所以需要先从数据库中读到后,放到缓存中,影响性能。 而只写策略中,数据直接从 Redis 中读取,性能较好。
    1
    1
  • escray
    对答案的时候总是忐忑。 第24课的课后题我完全想错了,使用 Redis 缓存,将脏数据写回数据库,因为是“脏数据”,所以缓存中的数据被修改了,对应了读写缓存模式。而脏数据是在被替换出缓存的时候写回数据库的,这就对应了异步写回策略的读写缓存模式。 如果把这道题当做面试题,估计很多候选人爬不出这个坑。 第25课,直接在缓存中更新,好处是下次访问时可以直接从缓存读;缺点是数据更新时的一致性问题。 第27课,@yeek:“极端情况下,LFU 策略使用的计数器可能会在短时间内达到一个很大值,而计数器的衰减配置项设置的很大,导致计数器值衰减的很慢,这种情况下,数据就有可能在缓存中长期驻留。”——不明觉厉 第31课,老师分三种情况分析了采用 RDB 机制时,Redis 实例发生故障的情况下,能否保证事务完整性,而我自己的答案只考虑了其中一种情况。 第33课,老师和课代表都认为在原主库回复之后 12s-15s 接收到的请求是无法同步到新主库的,我错了。 关于 Redis 属于旁路缓存,本篇讲的很清楚,就是需要在业务代码中显式的增加缓存操作逻辑。记住这一条,不光是 Redis,所有的旁路缓存问题应该都可以面试了。 另外提到了,在使用 Redis 是一般不使用 异步写回策略的读写缓存模式,因为 Redis 没法实现在脏数据被淘汰时,自行写回数据库。
    1
  • X
    既然redis有sub/pub机制,redis为什么不能有个内置的topic,在缓存淘汰的时候pub个消息通知客户端去执行落库的逻辑?
  • 玄墨
    第29讲lua脚本的例子,incr不是本身就可以保证原子性了吗?如果读操作没有必要放在lua脚本,是不是就意味着,其实这个实例都不需要使用到lua脚本?
收起评论
大纲
固定大纲
课后思考题答案
第 23 讲
第 24 讲
第 25 讲
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部