我们在用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学院:升职加薪视频课程:高并发秒杀系统架构分析设计与开发
原文地址:http://blog.51cto.com/13340781/2091187
时间: 2024-09-27 15:15:44