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)
构造字典的查询操作
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}, # ... # } '''
删除构造的字典 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)