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