redis应用场景--缓存过期时间
缓存可以有效的提高关键数据的获取速度,使得不必要每次查询数据库,避免了数据库被击穿。
主动更新:
需要知道这份数据的实效时间点,然后在那个时间点到来时重新更新数据,可能是查询数据库,也可能是访问第三接口,在获得数据之后,更新redis缓存。
被动更新:
程序每次都去redis获取数据,但对这份数据设置了一个实效时间,X时间失效后,无从从redis获取到数据的情况下,通过查询数据库或者访问第三方接口重新获得数据,并更新redis缓存,最后,设置数据过期时间为X
相比较而言,被动更新是更为稳妥可靠简单的方法,主动更新要求你知道每一条数据的具体过期时间,在即将过期之间去更新缓存,这样做无疑增加了服务的复杂程度,你可能需要一个单独的进程来完成这个过程。而被动更新只需要在代码里对reids缓存失效做一下更新处理就可以,大部分时间里它都是有效的,直到数据过期,你的更新缓存的代码才会被执行。
设置redis的key的过期时间有两种方式,一种方式是制定多少秒以后过期,另一种方式是在指定时间过期。下面我将分别采用golang和python分别实现这两种方式
Python:
from redis.client import Redis import time conn = Redis(host="0.0.0.0",port=6379,db=0,password="") conn.set("key1","value1") conn.expire("key1",5) print(conn.get("key1")) time.sleep(3) print(conn.get("key1").decode(encoding="utf-8")) time.sleep(3) if conn.get("key1") != None: print(conn.get("key1").decode(encoding="utf-8")) else: print("key1 已过期")
输出结果:
b'value1'
value1
key1 已过期
第二种方式:
conn.set("test_key","test_value") conn.expireat("test_key",datetime.now()+timedelta(seconds=5)) time.sleep(4) print("数据有效:",conn.get("test_key").decode(encoding="utf-8")) time.sleep(2) if conn.get("test_key") != None: print(conn.get("test_key").decode(encoding="utf-8")) else: print("数据过期") 输出结果: 数据有效: test_value 数据过期
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix