需求
应用中需要通过HTTP调用远程的数据,但是这个获取过程需要执行较长时间,而且这个数据本身的变化也不频繁,这种情况最适合用一个cache来优化。
前两年在做短链接实现的时候,曾经用最好的语言PHP做过一个Redis cache实现《一个简单的Redis应用(修订版)》,但那个毕竟是一个特定的实现,而且我现在需要的是python版。
这次的目标是需要实现一个比较通用的cache,支持各种数据类型,有超时更新机制,超时更新需要有锁(防止前文那个例子里发生过的问题)。
代码(py3)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import hashlib
import pickle
from functools import wraps
from redis import Redis
import logging
__author__ = 'raptor'
logger = logging.getLogger(__name__)
class RedisCache(object):
MAX_EXPIRES = 86400
SERIALIZER = pickle
LOCKER = set()
def __init__(self, name, host='localhost', port=6379, db=0, max_expires=MAX_EXPIRES):
self.db = Redis(host=host, port=port, db=db)
self.name = name
self.max_expires = max_expires
def _getkey(self, *keys):
return ":".join([self.name] + list(keys))
def