统一封装(推荐写法)
统一封装(推荐写法)
NULL = '__NULL__'
def cache_get(key, loader, ttl=300, null_ttl=60):
v = redis.get(key)
if v == NULL:
return None
if v is not None:
return v
val = loader() # 回源
if val is None:
redis.set(key, NULL, ex=null_ttl)
else:
redis.set(key, val, ex=ttl)
return val| 标记值 | 选业务不可能产生的字符串 |
|---|---|
| TTL | 空值比正常值短(60-120 秒) |
| 失效 | 数据创建后要显式删除该标记键 |
写路径注意:新建数据后若只写库不回填缓存,要确保删除旧的空值标记,否则新数据读不到。