
回复
本博客由 金陵科技科技学院-开放原子开源社 贾子歆编写
本文原载于我的个人博客zixin.com
最近在学Redis
想象一下,当你的应用程序需要处理大量的请求时,Redis就像是一位快递小哥,把数据飞快地送到用户手中。
用Redis不学其原理,就像四大名著不看红楼梦,说明这个人文学造诣和自我修养不足,他理解不了这种内在的阳春白雪的高雅艺术,他只能看到外表的辞藻堆砌,参不透其中深奥的精神内核,他整个人的层次就卡在这里了,只能度过一个相对失败的人生。
在我们的业务中,经常会出现一些数据被频繁地访问的情况,例如在秒杀活动中。这些被频繁访问的数据被称为热点数据。当缓存中的某个热点数据过期时,如果大量的请求访问该热点数据,由于无法从缓存中读取,这些请求将直接访问数据库。然而,由于高并发的请求量,数据库很容易被冲垮,这就是缓存击穿。
有两种常见的解决方案:
互斥锁(Mutex):引用Redis官方文档:https://redis.io/commands/setnx/的Example(和React一样体验感拉满了)来简单说明一下互斥锁:
可谓一山不容二虎
SETNX 我个人喜欢把它作为互斥锁的抽象概念(抽象的概念在《深入理解计算机系统》中被反复强调!!!)。
好吧,我是在拿它挡刀。不过可以确定的是:mykey在已经有value的情况下,禁止你再把新值放进去了!!!
直接上代码:
压测成功!2k 次请求只查了一次数据库,锁生效了!
查看redis缓存确实存进去了,
由于互斥锁适合处理高并发的场景,逻辑过期适合处理逻辑较为复杂的业务场景,等找到了一个合适的复杂业务再来介绍o(╥﹏╥)o