Redis 服务器用途非常广泛,例如我们可以基于 Redis 服务器实现缓存系统。缓存系统可以缓解客户端访问压力,当缓存有效时只需直接将缓存结果返回给客户端而不用执行真正的后端逻辑。尝试在 Python 中实现一个简单的缓存系统。
要求条件:
cache.py 文件中实现一个缓存系统类,类名称为 RedisCache ,可以通过 RedisCache.cache
方法装饰一个函数并缓存函数的执行结果
参考代码:
import json from functools import wraps # 该类用于生成针对某个 Redis 服务器的实例 # 实例的 cache 方法的返回值为装饰器 class RedisCache: def __init__(self, redis_client): self._redis = redis_client def cache(self, timeout=0): def decorator(func): @wraps(func) def wrap(*args, **kw): if timeout <= 0: return func(*args, **kw) key = func.__name__ raw = self._redis.get(key) if not raw: value = func(*args, **kw) self._redis.setex(key, timeout, json.dumps(value)) return value return json.loads(raw.decode()) return wrap return decorator
RedisCache 的使用示例如下:
cache = RedisCache(r) @cache.cache(timeout=10) def execute(): pass
初始化 RedisCache 后,可以通过 cache.cache(timeout=10)
方式装饰函数 execute
,意思是说首次执行 execute 函数时其结果会被缓存 10 秒,10 秒内访问都直接返回缓存结果,10 秒后再访问时 execute 函数将重新执行。