缓存击穿场景应对策略:热点数据预热与分布式锁应用
缓存击穿是高并发场景下的常见问题,当某个热点数据在缓存中过期时,大量请求同时访问该数据,导致数据库压力骤增。本文分享两种有效的应对策略。
热点数据预热方案
通过定时任务提前将热点数据加载到缓存中,避免缓存失效时的瞬时高峰。
import threading
import time
from datetime import datetime
class HotDataPreheater:
def __init__(self):
self.cache = {}
self.lock = threading.Lock()
def preheat_hot_data(self, key, value, ttl=3600):
with self.lock:
self.cache[key] = {
'value': value,
'expire_time': datetime.now().timestamp() + ttl
}
def get_with_preheat(self, key):
# 检查缓存是否过期
if key in self.cache:
item = self.cache[key]
if datetime.now().timestamp() < item['expire_time']:
return item['value']
# 缓存未命中或已过期,触发预热
self.preheat_hot_data(key, self.fetch_from_db(key))
return self.cache[key]['value']
讨论