在开发过程中,有时候可能为了优化性能,需要进行一些一级缓存的处理,实际就是缓存到内存中。对于缓存到内存中,可以自己实现一个全局变量来实现,也可以使用一些三方的开源库实现,这里主要讲述使用cacheout来实现缓存。
cacheout地址: https://github.com/dgilland/cacheout
文档地址:https://cacheout.readthedocs.io
特性:
①后端使用字典进行缓存
②使用缓存管理轻松访问多个缓存对象
③当使用模块级缓存对象,重构运行时的缓存设置
④最大缓存大小限制
⑤默认的缓存时间设置以及缓存项自定义存活时间
⑥批量的设置、获取、删除操作
⑦线程安全
缓存机制:
①FIFO(先进先出)
②LIFO(后进先出)
③LRU (最近最少使用机制)
④MRU (最近最多使用机制)
⑤LFU (最小频率使用机制)
⑥RR (随机替换机制)
首先安装:
pip install cacheout
简单使用:
from cacheout import Cache
cache = Cache()
默认的缓存(maxsize)大小为256,默认存活时间(ttl)是关闭的,属性设置如下:
cache = Cache(maxsize=256, ttl=0, timer=time.time, default=None)
设置缓存:
key = 1
value = 'test'
cache.set(key, value)
获取缓存:
key = 1
value = cache.get(key)
获取不存在的缓存,返回None:
cache.set(1, 'test')
print(cache.get(2))
设置存活时间:
cache.set(1, 'test', ttl=3)
print(cache.get(1))
time.sleep(3)
print(cache.get(1))
删除缓存中的一个键值对:
cache.set(1, 'test')
cache.delete(1)
清除全部缓存:
cache.clear()
批量处理:
# 批量设置
cache.set_many({1: 'test1',2: 'test2',3: 'test3'})
# 批量获取
cache.get_many([1, 2, 3])
# 批量删除
cache.delete_many([1, 2, 3])
迭代缓存数据:
cache.set_many({1: 'test1', 2: 'test2', 3: 'test3'})
for key, value in cache.items():
print(str(key) + ':' + value)
for key in cache.keys():
print(key)
for value in cache.values():
print(value)
cacheout能够对cache进行统一管理:
# 对cache进行统一管理
class CacheManagerConfig:
cacheman = CacheManager({
'cache1': {"maxsize": 5120, 'ttl': 0},
'cache2': {"maxsize": 5120, 'ttl': 0}
})
# cache工具类
class CacheUtils:
@staticmethod
def set_cache(cache, key, value):
cache.set(key, value)
@staticmethod
def get_cache(cache, key):
value = cache.get(key)
return value
@staticmethod
def delete_cache(cache, key):
cache.delete(key)
@staticmethod
def clear_cache(cache):
cache.clear()
@staticmethod
def has_key(cache, key):
return cache.has(key)
# cache测试
class CacheJob:
def cache_test():
cache = CacheManagerConfig.cacheman['cache1']
key = 1
value = 'test'
CacheUtils.set_cache(cache, key, value)