美文网首页
Redis 怎么实现保存Django 查询集

Redis 怎么实现保存Django 查询集

作者: 可锐职场 | 来源:发表于2018-04-09 10:52 被阅读53次

    我们在用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)

    #对取出数据进行判断

    ifproduct_detail:

        #如取出了数据,对数据进行序列化读出为对象

        product_detail =pickle.loads(product_detail)

    #如没有数据    

    elifproduct_detail isNone:

         #从数据库中查询数据

        product_detail =SaleProducts.objects.filter(id=product_id)

        #对数据进行序列化,并保存到缓存中

        setcache(product_key,60*10,pickle.dumps(product_detail))

    ......

    缓存相关函数

    #设置key,value

    defsetcache(key,time,value):

        master.setex(key,time,value)

    #读取key\value

    defgetcache(key):

        returnmaster.get(key)

    对相关技术有兴趣的,请访问网易云课程:django和redis实现高并发秒杀系统架构分析设计与开发

    相关文章

      网友评论

          本文标题:Redis 怎么实现保存Django 查询集

          本文链接:https://www.haomeiwen.com/subject/qewbhftx.html