Redis实现消息队列

4 篇文章 0 订阅

Redis使用List实现消息队列MQ,生产者lpush入队,消费者brpop出队。

brpop比rpop好的地方是队列里没元素了会阻塞等待,避免无效循环调用。

Redis持久化机制避免消息丢失。

不同名字的List,放不同种类的消息,保证同一个list里消息的顺序性和不同种类的消息的解耦合,多List也可以提高消息插入和消费的速度。

可以用来实现MQ,可以作为MQ消息堆积时的临时处理方案,还可以作为MQ挂掉后的降级方案。

import redis.clients.jedis.Jedis;

public class ListMQExample {

    public static void main(String[] args) throws InterruptedException {

        // 消费者
        new Thread(() -> bConsumer()).start();

        // 生产者
        producer();

    }

    /**

     * 生产者

     */

    public static void producer() throws InterruptedException {

        Jedis jedis = new Jedis("127.0.0.1", 6379);

        // 推送消息
        jedis.lpush("mq", "Hello, Java.");
        Thread.sleep(1000);

        jedis.lpush("mq", "message 2.");
        Thread.sleep(2000);

        jedis.lpush("mq", "message 3.");

    }

    /**

     * 消费者(阻塞版)

     */

    public static void bConsumer() {

        Jedis jedis = new Jedis("127.0.0.1", 6379);

        while (true) {

            // 阻塞读
            for (String item : jedis.brpop(0,"mq")) {

                // 读取到相关数据,进行业务处理
                System.out.println(item);

            }

        }

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值