php操作redis(list)队列操作

使用文档:https://www.daixiaorui.com/manual/redis-set.html

set只能写入字符串,不能写入数组,如果要写入数组需要转为JSON格式

案例:

1.写入

    //写入队列
    public function writeRedis($id){
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $seckillKey = 'Enterprise';
        //1.加入队列FD
        $arList = $redis->lpush($seckillKey, $id);
        
        echo "加入队列FD=".$id;
        
    }

2.读取,出列

<?php
        $seckillKey = 'Enterprise';
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        //读出缓存
        $arList = $redis->lrange($seckillKey, 0 ,5);;
        echo"压入队列:<br/>";var_export($arList);
        echo "<br/>";
        // 获取列表长度
        $llen = $redis->llen($seckillKey);
        echo "总长度------".$llen."------------------<br/>";
        
        //出列(出列后就会自动去掉在缓存的位置即值)
        while (true){
            $flag = $redis->exists($seckillKey);
            if($flag){
                $uid = $redis->rpop($seckillKey);
                echo $uid ."抢购成功!,进行订单处理操作<br/>";
            } else {
                echo "出列完毕!";
                exit;
            }
        }

list适用场景

消息队列
list类型的lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能,故而可以用Redis的list类型实现简单的点对点的消息队列。
最新列表
list类型的lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表,如朋友圈的点赞列表、评论列表。

#消息队列demo  简单模拟抢购商品
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('123456');

$redis->flushAll(); //清空所有数据
//入列
$key = 'product1';#商品1
for ($i = 0; $i < 100; $i++) {
    $uid = rand(1000, 9999);
    $number = 10; //次数,假设这件商品只能10个人抢购
    if ($number > $redis->lLen($key)) {
        $redis->rpush($key, $uid); //不够10个就入列
    } else {
        continue;
    }
}
//出列
while (true){
    $flag = $redis->exists($key);
    if($flag){
        $uid = $redis->rpop($key);
        echo $uid ."抢购成功!,进行订单处理操作<br/>";
    } else {
        echo "出列完毕!";
        exit;
    }
}


对list数据的操作

#创建
	#从列表左边放入一个或者多个元素,不存在创建
	$redis->lpush('list','值1','value2','value3');
	#当列表存在时,从左边放入一个元素,不存在时报错
	$redis->lpushx('list','值2');
	#从列表右边放入一个或者多个元素,不存在创建
	$redis->rpush('list','值1');
	#当列表存在时,从右边放入一个元素,不存在时报错
	$redis->rpushx('list','值2');
#获取
    #根据索引获取列表中的元素,列表索引最后一个可以使用-1
    $redis->lrange('list',0,-1);
	$redis->lgetrange('list',0,-1)
    #根据列表索引获取值
    $redis->lindex('list',0);
    $redis->lget('list',0);
#修改
	#根据索引设置列表中元素的值,当list不存在时报错
	$redis->lset('list',0,'新值');
#删除
	#从列表左边删除一个元素
	$redis->lpop('list');
	#从列表右边删除一个元素
	$redis->rpop('list');

    /*
    * 从list列表里移除前 2(count)次出现的值为 value 的元素
    *	#count > 0: 从头往尾移除值为 value 的元素
    *	#count < 0: 从尾往头移除值为 value 的元素
    *	#count = 0: 移除所有值为 value 的元素
    */
    $redis->lremove('list','value',2);

    #删除list列表右边的最后一个元素将其追加到list1列表,list1不存在会创建
    $redis->rpoplpush('list','list1');
    #根据索引start和stop保留列表元素,其他元素全删除
    $redis->ltrim('list',1,2);
    #获取列表长度
    $redis->llen('list');

————————————————
版权声明:本文为CSDN博主「诗酒趁年华mm」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010404725/article/details/99956911

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值