redis的缓存、雪崩、淘汰策略
解释:
- 缓存穿透:查询不存在的数据,缓存不命中,请求直接打到数据库,可能导致数据库压力剧增。
- 缓存雪崩:缓存失效时间集中,导致大量请求打到数据库。
- 淘汰策略:当内存不足时,根据一定策略移除缓存数据。
解决方案:
- 缓存穿透:使用布隆过滤器,维护一个全局集合,存储所有可能的查询key。访问前先经过布隆过滤器,如果不存在则直接拒绝请求。
缓存雪崩:
- 设置缓存数据的过期时间随机化,避免大量数据同时失效。
- 实现热点数据永不过期或使用二级缓存。
淘汰策略:
- 使用LRU(最近最少使用)、LFU(最常使用)、FIFO(先进先出)等策略。
- 当内存不足时,通过设置内存淘汰机制来保证业务的正常运行。
示例代码(假设使用Redis作为缓存):
# 缓存key的存在性检查
def is_key_exist(key):
# 假设有一个布隆过滤器实例
return bloom_filter.is_exist(key)
# 设置缓存,并设置随机过期时间
def set_cache(key, value, ttl):
random_ttl = random.randint(ttl//2, ttl)
redis.setex(key, random_ttl, value)
# 淘汰策略
redis.config_set("maxmemory-policy", "allkeys-lru") # 设置LRU淘汰策略
注意:具体实施时需要根据业务场景和需求进行调整。
评论已关闭