请问redis实现消息队列有几种方法?
网友回复
第一种通过lpop与lpush list队列
消息发送端
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); //$password = '123456'; //$redis->auth($password); $arr = array('h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'); foreach ($a...
点击查看剩余70%
还有一种sub pub消息
消息生产端
<?php $channelName = "testPubSub"; $channelName2 = "testPubSub2"; //向指定频道发送消息 try { $redis = new Redis(); $redis->connect('127.0.0.1', 6379); for ($i = 0; $i < 5; $i++) { $data = array('key' => 'key'.$i, 'data' => 'testdata'); $ret = $redis->publish($cha...
点击查看剩余70%
stream流式消息队列处理方式
<?php //连接reids $redis = new Redis(); $redis->connect('127.0.0.1', 6379); //创建一个消息队列 // 星号表示自动生成id,后面参数key,value $redis->rawCommand('xadd', 'mq2', '*', 'ms1g', '1'); //在消息队列上创建一个组为mqGroup3 $redis->rawCommand('xgroup', 'create', 'mq2', 'mqGroup3', '0'); //读取组为mqGroup3的stream消息,每次读取一个,消费者为consumerA $_data = $redis->rawCommand('xreadgroup', 'group', 'mqGroup3', 'consumerA', 'count', '1', 'streams', 'mq2', '>'); //处理完后确认消息已处理,最后一个参数是消息id $redis->rawCommand('xack', 'group', 'mqGroup3', '12132131234-00'); echo var_export($_data, true)."\n";Stream为redis 5.0后新增的数据结构。支持多播的可持久化消息队列,实现借鉴了Kafka设计。

点击查看剩余70%
还可以用sort set
<?php $key = "test"; $redis = new Redis(); //建立一个长链接 $redis->connect('127.0.0.1', 6379); $redis->zAdd( $key, time(), "msgvalue" ); ...
点击查看剩余70%