在之前,我给大家介绍了使用 Python 自带的 LRU 缓存实现带有过期时间的缓存:实现有过期时间的 LRU 缓存。也讲过倒排索引:使用倒排索引极速提高字符串搜索效率。但这些代码对初学者来说比较难,写起来可能会出错。
实际上,这些功能其实都可以使用 Redis 来实现,而且每个功能只需要 1 分钟就能做出来。全文搜索功能在搜索英文的时候,甚至可以智能识别拼写错误的问题。
要实现这些功能,只需要做两件事:
1.安装 Redis
2.Python 安装第三方库:walrus
安装完成以后,我们来看看它有多简单:
带过期时间的缓存装饰器
我们想实现一个装饰器,它装饰一个函数。让我在 1 分钟内多次访问函数的时候,使用缓存的数据;超过 1 分钟以后才重新执行函数的内部代码:
import time
import datetime
from walrus import Database
db = Database()
cache = db.cache()
@cache.cached(timeout=60)
def test():
print('函数真正运行起来')
now = datetime.datetime.now()
return now
now = test()
print('函数返回的数据是:', now)
time.sleep(10) # 等待10秒,此时会使用缓存
print('函数返回的数据是:', test())
time.sleep(5) # 等待5秒,此时依然使用缓存
print('函数返回的数据是:', test())
time.sleep(50) # 让时间超过缓存的时间
print('函数返回的数据是:', test())
运行效果如下图所示: