-
创建create_list.php
# 实例化 redis对象 $redis = new Redis(); # 建立链接 $redis->connect('127.0.0.1',6379); echo " 模拟实现 延时队列 \n "; # 定义时间戳超出当前的时间 $time = time() + 20; # 存储zset有序集合中,存储到这里是方便,如果有个较高的优先级, $redis->zadd('zset',$time,$time+1); # 将这个时间戳的data值保存到hash类型中 $redis->hset('hsetlist',$time,json_encode(['code' => 200,'msg' => '处理第1条']));
-
创建监听延迟队列文件time_list.php,要以cli模式访问
$redis = new Redis(); $redis->connect('127.0.0.1',6379); # 一直循环 while(true) { # 获取当前时间戳 $time = time(); # 睡眠一秒 sleep(1); # 获取这个信息 $sort_data = $redis->zrevrangebyscore('zset',$time,10); # 如果获取到了 if($sort_data) { # 获取hash中的值 $data = $redis->hget('hsetlist',$time); # json解析 $json_data = json_decode($data,true); # 输出 echo $json_data['msg'] . "\n"; # 删除hash存储的这个key $redis->hDel('hsetlist',$time); # 删除有序集合的值 $res = $redis->zrem('zset',$time+1); if($res) { echo "删除成功 \n"; } continue; } }
终端运行这个文件:php time_list.php
浏览器访问create_list.php文件
不知道这样算不算是实现了延迟队列,我感觉如果这样处理的话,可以直接用hash处理,还需要在思考。
使用php结合redis-zset,hash类型完成延迟队列信息。
最新推荐文章于 2024-08-20 02:29:55 发布