缓存击穿是指一个存在的key,在缓存过期的一刹那,同时有大量的请求,这些请求都会击穿到 DB ,造成瞬时DB请求量过大的问题。
解决缓存击穿的常见策略有:
设置热点数据永不过期:对于一些热点数据,可以设置为永不过期,或者是手动进行更新。
互斥锁:在第一个查询请求查询数据库并把数据缓存的过程中,其他的查询请求等待,直到缓存中有数据后再从缓存中获取。
数据预热:在系统上线前,就将可能成为热点的数据加载到缓存中。
使用分布式缓存:比如使用 Memcached 集群,利用其分布式的特性,使得整个缓存服务的压力能够分散到多个缓存节点上,降低单个缓存节点的压力。
使用缓存模板:比如Spring Cache中的
@CachePut
和@CacheEvict
,可以在更新数据时同时更新缓存,避免数据和缓存的不一致性。使用缓存框架或中间件提供的原子操作:比如 Redis 的事务或 Lua 脚本,可以保证操作的原子性,避免并发操作导致的问题。
暂无回复。