phpredis 哈希(Hash)类型和redis秒杀(4)

gongzhiyang 6月前 221

童鞋们,我又来了。在这和大家聊聊Hash和秒杀情景。首先看一下概念。

摘抄

hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
上面的概念也说了适合特别适合用于存储对象。那在Redis中我们就存储对象。在这我们就以简单的秒杀情景来聊聊。说的不对或不准确的请指正。哈哈。
首先描述一下秒杀规则。一个商品,只有一百件。一百件卖完为止。

例子:

/**
我们来看下面的代码。除了基本的命令外。我们用到列表list类型和hash类型。这里用到了队列。来控制商品的数量。用hash类型来存取数据。之后在根据相应的业务逻辑,把hash中数据存入到库中。
**/
$this->user_id = 1;
		$this->goods   = 1;
		$redis = new \Redis();
		$redis->connect('127.0.0.1', 6379);
		$num =100; //商品数
		//$redis->delete('hgoods_store_'.$this->goods,'rank','goods_store');
		$len = $redis->lLen('goods_store');//获取长度
        echo $len;
		if ($len<=$num){
			$count = $redis->incr("rank");
			echo $count;
			//符合
//			for($j=0;$j<$num;$j++) {

                //进行判断是否存入哈希表中
				if (!$redis->hGet('hgoods_store',$this->user_id)) {

					//把相应的信息存入哈希表
					$userinfo = array(
						"user_id" => $this->user_id,
						"create_time" => time()
					);
					//print_r($userinfo);

					$redis->hSet('hgoods_store_'.$this->goods, $count, json_encode($userinfo));
					$redis->lPush('goods_store',1);

				}


			//}

		}			

结果

Array ( [1] => {"user_id":1,"create_time":1545756851} [2] => {"user_id":1,"create_time":1545756870} [3] => {"user_id":1,"create_time":1545756871} [4] => {"user_id":1,"create_time":1545756872} [5] => {"user_id":1,"create_time":1545756873} [6] => {"user_id":1,"create_time":1545756874} [7] => {"user_id":1,"create_time":1545756882} [8] => {"user_id":1,"create_time":1545756883} [9] => {"user_id":1,"create_time":1545756884} [10] => {"user_id":1,"create_time":1545756885} [11] => {"user_id":1,"create_time":1545756886} [12] => {"user_id":1,"create_time":1545756887} [13] => {"user_id":1,"create_time":1545756887} [14] => {"user_id":1,"create_time":1545756888} )

童鞋们,那就聊到这里。晚安。


最新回复 (0)
    • 都市菜鸟网
      2
        立即登录 立即注册 
返回
发新帖