一、redis获取首页购物车商品
利用redis的hash类型保存首页购物车的商品,一个用户对应一个key名cart_(user.id),首页购物车的数量是在用户登陆的情况下才会展示,下面都只是获取redis保存的key值,并还没有设置添加key值的内容:
#获取用户购物车中商品的数目 user = request.user cart_count = 0 if user.is_authenticated:#用户已经登陆 #获取购物车数量使用hash #连接setting配置的redis conn = get_redis_connection('default') cart_key = 'cart_%d'%user.id #获取物品种类的数量 cart_count = conn.hlen(cart_key)
- hash _hlen _获取数量
def hlen(self, name): "Return the number of elements in hash ``name``" return self.execute_command('HLEN', name)
二、用户商品历史浏览记录的添加
利用redis的list类型存储商品浏览的记录,一个用户对应一个key名history_(user.id),下面都只是获取redis保存的key值,并还没有设置添加key值的内容,先删除掉列表里面已存在相同的商品-->把最新浏览的记录添加到列表的左侧,选择保存多少条最新的浏览记录:
#获取用户购物车中商品的数目 user = request.user cart_count = 0 if user.is_authenticated:#用户已经登陆 #获取购物车数量使用hash #连接setting配置的redis conn = get_redis_connection('default') cart_key = 'cart_%d'%user.id #获取物品种类的数量 cart_count = conn.hlen(cart_key) #获取用户历史浏览记录,使用list conn = get_redis_connection('default') #浏览历史记录每个用户浏览商品的key history_key = 'history_%d'%user.id #删除列表中的已存在浏览的goods_id conn.lrem(history_key,0,goods_id) #把新浏览的goods_id插入到列表的左侧 conn.lpush(history_key,goods_id) #只保存用户最新浏览的5条记录 conn.ltrim(history_key,0,4)
- list _ lrem (移除,有就移除,没有也就不做任何操作):
def lrem(self, name, count, value): """ #name=key, #count=0删除列表中所有的相同value,count>0删除列表中相同的value从做左到右,count<0删除列表中相同的value从右到左 Remove the first ``count`` occurrences of elements equal to ``value`` from the list stored at ``name``. The count argument influences the operation in the following ways: count > 0: Remove elements equal to value moving from head to tail. count < 0: Remove elements equal to value moving from tail to head. count = 0: Remove all elements equal to value. """ return self.execute_command('LREM', name, count, value)
- list _ lpush (插入)
#从左往右插入 def lpush(self, name, *values): "Push ``values`` onto the head of the list ``name``" return self.execute_command('LPUSH', name, *values)
- list _ ltrim (相当于切割)
def ltrim(self, name, start, end): #name -->key #start -->开始的位置 #end -->结束的位置 """ Trim the list ``name``, removing all values not within the slice between ``start`` and ``end`` ``start`` and ``end`` can be negative numbers just like Python slicing notation """ return self.execute_command('LTRIM', name, start, end)
来源:https://www.cnblogs.com/venvive/p/12174294.html