redis发布订阅模式的应用

这篇具有很好参考价值的文章主要介绍了redis发布订阅模式的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

小体量系统,某些特定场景需要做异步处理。如操作日志记录、发送消息、数据excel导入等。并发量不大,主要作用是异步批处理数据,提高响应速度,改善用户体验,不至于页面卡半天。用消息队列的话显得很笨重,牛刀杀鸡,不利于项目的快速布署和影响项目稳定。在这种懒思想的加持下,打起了已有的redis的主意。现成的。小范围使用。很合喂口。使用示例:
配置频道:

    @Bean
    @DependsOn("zyRedisUtils")
    public RedisMessageListenerContainer redisMessageListenerContainer(List<LocalMessageListener> listeners,
                                                                       RedisConnectionFactory connectionFactory
    ) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        if (null != listeners && listeners.size() > 0) {
            container.setConnectionFactory(connectionFactory);
            for (LocalMessageListener listener : listeners) {
                container.addMessageListener(listener, new ChannelTopic(listener.getChannelKey()));
            }
        }
        return container;
    }

LocalMessageListener :

public interface LocalMessageListener extends MessageListener {

    String channelKey();

    default String getChannelKey() {
        return ZYRedisUtils.wrapperKey(channelKey());
    }
}

记录操作日志示例:

// RequestLogHandler封装自日志切面。
public class RequestLogRecordProcessor implements RequestLogHandler, LocalMessageListener {

    public final static String LOGGING_CHANNEL = "system_visit_logging";

    @Autowired
    private RequestLogMapper requestLogMapper;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private LoggingDynamicTableSupport loggingDynamicTableSupport;

    // 请求日志
    @Override
    public void handleRequestLog(ProceedingJoinPoint jp, HttpServletRequest request, RequestLog requestLog) {
        // 发布消息
        stringRedisTemplate.convertAndSend(this.getChannelKey(), JSONObject.toJSONString(requestLog));
    }

    @Override
    public String channelKey() {
    	// 定义频道
        return LOGGING_CHANNEL;
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        byte[] messageBody = message.getBody();
        Object msg = stringRedisTemplate.getValueSerializer().deserialize(messageBody);
        if (ZYStrUtils.isNull(msg)) {
            return;
        }
        String logJson = String.valueOf(msg);
		// 反系列化对象
        RequestLog requestLog = JSONObject.parseObject(logJson, RequestLog.class);
        // 创建动态表
        String tableSuffix = loggingDynamicTableSupport.try2CreateRequestLogTable();
        // 表前缀
        requestLog .setTableSuffix(tableSuffix);
		// 保存日志
        requestLogMapper.insert(requestLog );
    }
}

延时队列的实现:
消息提醒需要用到延时队列,实现方法:
配置一个key失效的监听听器,发送延时队列时,先写一个带延时长时的前缀key,待其失效后,将key所对应的消息放入队列中。实现一个简单的延时效果。

   @Bean
    @ConditionalOnBean(RedisMessageListenerContainer.class)
    public KeyExpirationEventMessageListener localKeyExpirationEventMessageListener(RedisMessageListenerContainer container) {
        return new KeyExpirationListener(container);
    }

实际中,运转还算良好。单体系统,简单快乐就好。随便玩玩。文章来源地址https://www.toymoban.com/news/detail-510483.html

到了这里,关于redis发布订阅模式的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++发布订阅者模式:实现简单消息传递系统

      概述: 这个C++示例演示了发布者-订阅者模式的基本实现。通过 `Event` 类,发布者 `Publisher` 发送数据,而订阅者 `Subscriber` 订阅并处理数据。通过简单的回调机制,实现了组件间松散耦合的消息传递。 好的,我将为你提供一个简单的C++实例,演示如何使用发布者-订阅者模式

    2024年03月17日
    浏览(55)
  • redis 发布和订阅

    目录 一、简介  二、常用命令 三、示例 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 ,以及订阅这个频道的三个客户端 —— client1 、client2 和 client3 之间的关系: 当

    2024年02月12日
    浏览(39)
  • Redis发布订阅

    Redis 发布订阅(pub/sub)是一种 消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。 订阅/发布消息图: 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系: 当有新消息通过 PUBLISH

    2024年02月11日
    浏览(40)
  • redis发布订阅模型

    Redis 的发布订阅基于 publish , subscribe , psubscribe 订阅 发布 订阅 发布 订阅的状态的推进 向 new.it 发送消息 1.频道订阅和退订 Redis 订阅关系保存在服务器状态的 pubsub_channels 字典 key 为 channel , value 为链表,链表上有订阅该频道的 Client 如图所示 1.1订阅频道 subscribe Client 订阅 pu

    2024年02月13日
    浏览(36)
  • Redis发布订阅机制学习

    【IT老齐151】Redis发布订阅机制是如何实现的?_哔哩哔哩_bilibili go-redis的发布与订阅 - 知乎 (zhihu.com) 先输入   redis-server.exe   启动redis,否则对应接口不开放 再输入   redis-cli 命令启动客户端服务 当一个客户端c1去向redis订阅一个主题chatroom的时候,Redis内部就会创建一块空

    2024年02月09日
    浏览(41)
  • Redis(03)——发布订阅

    基于频道 publish channel message:将信号发送到指定的频道 pubsub subcommand [argument [argyment]]:查看订阅或发布系统状态 subscribe channel [channel]:订阅一个或多个频道的信息 unsubscribe [channel [channel]]:退订指定的频道,若没有指定频道,则默认退订所有频道 基于模式 psubcribe pattern [pa

    2024年02月20日
    浏览(38)
  • JAVA 实现 Redis 发布订阅

    发布订阅: 消息发布者发布消息 和 消息订阅者接收消息 ,两者之间通过某种媒介联系起来 例如订杂志,当自己订阅了爱格杂志,每个月会发刊一本。到发布的时候派送员将杂志送到自己手上就能看到杂志内容。只有我们订阅了该杂志才会派送给我们 Redis 发布订阅(pub/su

    2024年02月14日
    浏览(39)
  • Redis 消息队列和发布订阅

    采用redis 三种方案: ● 生产者消费者:一个消息只能有一个消费者 ● 发布者订阅者:一个消息可以被多个消费者收到 ● stream模式:实现队列和广播模式 Producer调用redis的lpush往特定key里放消息,Consumer调用brpop去不断监听key。 1、利用redis的链表,存储数据,实现队列模式

    2024年01月18日
    浏览(43)
  • 设计模式 ~ 发布订阅模式

    用于实现对象之间的松耦合通信; 在该模式中,存在一个或多个发布者(Publishers)和一个或多个订阅者(Subscribers); 发布者负责发布消息,而订阅者负责订阅感兴趣的消息并在接收到消息时做出相应的处理。 Subject 和 Observer 直接绑定,中间无媒介; Publisher 和 Observer 相互

    2024年02月16日
    浏览(48)
  • Redis实现消息的发布和订阅

    4.1 发送消息 4.2 接收消息

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包