-
每个用户的购物车都是一个散列,这个散列存储了商品ID与商品订购数量之间的映射
- 对商品数量的验证由web应用程序负责,我们要做的就是在商品订购的数量出现变化时,对购物车进行更新
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
function add_to_cart($redis,$session,$item,$count)
{
if ($count<=0)
{
$redis->hDel('cart:'.$session,$item); //从购物车中移除指定的商品
}else{
$redis->hSet('cart:'.$session,$item,$count); //将指定的商品添加到购物车
}
}
//守护进程方式运行
//定时任务(cron)运行
/**
* 定期清理旧的会话数据
* @param $redis
*/
function clean_full_sessions($redis)
{
$quit = false;
$limit = 1000000;
while (!$quit)
{
$size = $redis->zCard('recent:'); //找出当前已有令牌的数量
if ($size < $limit) // 令牌未超过限制,休眠并在之后重新检查
{
sleep(1);
continue;
}else{
$quit = true;
}
}
$end_index = min($size-$limit,100);
$sessions = $redis->zRange('recent:',0,$end_index-1); //获取需要移除令牌的id
foreach ($sessions as $sess)
{
$session_key [] = 'viewed:'.$sess; //删除会话
$session_key [] = 'cart:'.$sess; //删除旧的会话对应用户的购物车
}
$redis->delete($session_key);
$redis->del('login:',$sessions);
$redis->zrem('recent:',$sessions); //移除最旧的令牌
}