Redis 怎么实现保存Django 查询集
我们在用Python Django开发秒杀系统的时候,要将Django 查询到商品详细信息保存到Redis缓存中去,但Redis不能直接保存对象,但有什么方法呢?我们发现可用Python的pickle模块。
pickle模块可以序列化对象并保存到磁盘中,并在需要的时候读取出来,任何对象都可以执行序列化操作。
Pickle模块中最常用的函数为:
1、pickle.dumps(obj[, protocol])
函数的功能:将obj对象序列化为string形式,而不是存入文件中。
参数讲解:
[*] obj:想要序列化的obj对象。
[*] protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
2、pickle.loads(string)
函数的功能:从string中读出序列化前的obj对象。
参数讲解:
[*] string:文件名称。
【代码示例】
.....
#取出商品id
product_id = request.GET.get('product_id')
#构造商品key
product_key = 'product_{}'.format(product_id)
#根据商品key从缓存中取数据
product_detail = getcache(product_key)
#对取出数据进行判断
if product_detail:
#如取出了数据,对数据进行序列化读出为对象
product_detail =pickle.loads(product_detail)
#如没有数据
elif product_detail is None:
#从数据库中查询数据
product_detail = SaleProducts.objects.filter(id=product_id)
#对数据进行序列化,并保存到缓存中
setcache(product_key,60*10,pickle.dumps(product_detail))
......
缓存相关函数
#设置key,value
def setcache(key,time,value):
master.setex(key,time,value)
#读取key\value
def getcache(key):
return master.get(key)
对相关技术有兴趣的,可访问我们的课程51CTO学院:升职加薪视频课程:高并发秒杀系统架构分析设计与开发
页:
[1]