redis实战(7):购物车

网址(Netscape)公司在20世纪90年代中期先在网络中使用了cookie.这些cookie 最终 变成了我们在上一节讨论的登录会话cookie。cookie 最初的意图在于为网络零件商(web retailer) 提供种购物乍,让用户可以收集他们想要购买的商品。在cookie之前.有过儿种不同的购物车 解决方案,但这些方案个都不太好用。

1 添加购物车

使用cookie实现购物车—也就是将购物车都存储到cookie里面的做法非常常见,这 种做法的一大优点是无须对数据库进行写人就可以实现购物车功能,而缺点则是程序需要重新解析和验证(validate)cookie.确保cookie的格式正确,并且包含的商品都是真正可购买的商品。 cookie购物车还有一个缺点:因为浏览器征次发送请求都会连cookie一起发送.所以如果购物车 cookie的体积比较大,那么请求发送和处理的速度可能会有所降低。
因为我们在前而已经使用Redis实现了会话cookie和记录用户最近浏览过的商品这两个特 性,所以我们决定将购物车的信息也存储到Redis里,并且使用与用户会话cookie相同的cookie ID来引用购物车。
购物车的定义非常简单:每个用户的购物车都是一个散列,这个散列存储了商品ID与商品订购数IL之间的映射。对商品数量进行验证的工作由Web应用程序负责,我们要做的则是在商品的购物数量出现变化时.对购物车进行更新:如果用户订购某件商品的数量大于0.那么程序会将这件商品 的ID以及用户订购该商品的数量添加到散列里面.如果用户购买的商品已经存在于散列里而.那么 新的汀购数最会覆盖已有的订购数量;相反地.如果用户订购某件商品的数量不大于0.那么程序将 从散列里面移除该条目。

def add_to_cart(conn,session,item,count){
	if count<0
		conn.hrem("cart:"+session,item)
	else
		conn.hset("cart:"+session,item,count)
}

2 清理会话

接着,我们需要对之前的会话清理函数进行更新,让他在清理旧会话的同时,将旧会话对应的用户购物车也一并删除

def clean_full_session(conn){
	while not QUIT
		size = conn.zcard("recent")
		if size <= LIMIT
			 time.sleep(1)
		 	 continue
		end_index=min(size-LIMIT,100)
		sessions = conn.zrange("recent:",0,end_index-1)
		
		session_keys=[]
		for sess in sessions:
			session_keys.append("viewwd:" + sess)
			session_keys.append("card::" + sess)
		conn.delete(*session_keys)
		conn.hdel("login:",*sessions)
		conn.zrem("recent:",*sessions)
}

我们现在讲会话和购物车都存储在redis,可以减少请求的体积,还使得我们可以根据用户浏览过的商品、用户放入购物车的商品以及最后购买的商品统计计算,为系统提供“查看该商品的用户中,有X%人购买了”“购买该商品的也购买了xxx商品”,最终提升网站的销售业绩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

water___Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值