mirror of
https://github.com/doocs/advanced-java.git
synced 2025-03-04 09:20:11 +08:00
docs(from-readers): modify desc about caching penetration
This commit is contained in:
parent
f4b76e5337
commit
5b8a84fa69
@ -44,4 +44,7 @@
|
||||
### 缓存击穿
|
||||
缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。
|
||||
|
||||
解决方式也很简单,可以将热点数据设置为永远不过期;或者基于 redis or zookeeper 实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,进而其它请求才能通过该 key 访问数据。
|
||||
不同场景下的解决方式可如下:
|
||||
- 若缓存的数据是基本不会发生更新的,则可尝试将该热点数据设置为永不过期。
|
||||
- 若缓存的数据更新不频繁,且缓存刷新的整个流程耗时较少的情况下,则可以采用基于 redis、zookeepe r等分布式中间件的分布式互斥锁,或者本地互斥锁以保证仅少量的请求能请求数据库并重新构建缓存,其余线程则在锁释放后能访问到新缓存
|
||||
- 若缓存的数据更新频繁或者缓存刷新的流程耗时较长的情况下,可以利用定时线程在缓存过期前主动的重新构建缓存或者延后缓存的过期时间,以保证所有的请求能一直访问到对应的缓存
|
||||
|
Loading…
Reference in New Issue
Block a user