一、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)