DRF 常用的redis操作!

1,只是简单的存储功能!
from django_redis import get_redis_connection
redis_code = get_redis_connection('verify_codes')
# 将数据写入到指定的redis之中(字符串类型)!(键,保存时间,值)
redis_code.setex('img_%s' % image_code_id, contents.IMAGE_CODE_REDIS_EXPIRES, test)
2,多个进行存储是使用 pipeline
from django_redis import get_redis_connection
redis_code = get_redis_connection('verify_codes')
pl = redis_code.pipeline()
# 设置管道,减少一次存储次数!
pl.setex("sms_%s" % mobile, contents.SMS_CODE_REDIS_EXPIRES, sms_code)
# 存储另一个字段,是为了时间校检!
pl.setex("send_flag_%s" % mobile, contents.SEND_SMS_CODE_INTERVAL, 1)
pl.execute()
3,特殊的存储方式(list)!
redis_conn = get_redis_connection("history")
pl = redis_conn.pipeline()
# 移除已经存在的本商品浏览记录 0 表示移除所有的与 sku_id相同的用户。
pl.lrem("history_%s" % user_id, 0, sku_id)
# 添加新的浏览记录
pl.lpush("history_%s" % user_id, sku_id)
# 设置只保存最多5条记录
pl.ltrim("history_%s" % user_id, 0, 4)
pl.execute()
获取list存储的数据
from django_redis import get_redis_connection
redis_conn = get_redis_connection("history")
# redis列表的获取,(键,位置起始值,结束值!)
#只获取前5个值!
history = redis_conn.lrange("history_%s" % user_id, 0, 4)
4,构造字典的形式!指的是字典镶嵌字典,比hash更加强大可以达到更强大的效果!
'''
            可以达到这样的效果!
            {
                1001(sku_id): { "count": 10, "selected": true},
                ...
            }
'''
from django_redis import get_redis_connection
conn = get_redis_connection('cart')
pl = conn.pipeline()
# 先写数量关系  哈希类型(键,{字段,个数})
#表明存储了一个iphone5手机的手机id与购买个数
pl.hincrby('cart_%s' % user.id, sku_id, count)
# 写入是否选中状态 (键,商品id)
if selected:
#一set类型的形式进行存储,只存储商品信息!
    pl.sadd('cart_selected_%s' % user.id, sku_id)
pl.execute()
return Response(ser.data)
View Code
构造字典的查询操作
conn = get_redis_connection('cart')
pl = conn.pipeline()
# 获取到的是字典的形式!
# 返回的是byte字典类型!
count_cart = pl.hgetall('cart_%s' % user.id)
redis_cart_selected = pl.smembers('cart_selected_%s' % user.id)
data = pl.execute()
# data =  [{b'14': b'2', b'16': b'1', b'10': b'1'}, {b'14', b'10', b'16'}]
dir_data = {}
for sku_id, count in data[0].items():
    dir_data[sku_id.decode()] = {
        'count': count.decode(),
        'selected': sku_id.decode() in data[1]
    }

'''
    # 组建在字典的形式传递给前端!
    # {
    #     1001(sku_id): { "count": 10, "selected": true},
    #     ...
    # }
'''
View Code
删除构造的字典 redis数据!
#删除 redis数据!
conn = get_redis_connection('cart')
pl = conn.pipeline()
# 先写数量关系  哈希类型(键,{字段,个数})
pl.hdel('cart_%s' % user.id, sku_id)
pl.srem('cart_selected_%s' % user.id, sku_id)
pl.execute()
return Response(ser.data)

 

posted @ 2018-06-30 15:17  十七楼的羊  阅读(449)  评论(0编辑  收藏  举报