当前位置: 首页 > news >正文

上海企业网站建站国际外贸平台排名

上海企业网站建站,国际外贸平台排名,成都哪家做网站公司好,南宁网页制作招聘网RedisCaffeine 多级缓存数据一致性解决方案 背景 之前写过一篇文章RedisCaffeine 实现两级缓存实战#xff0c;文章提到了两级缓存RedisCaffeine可以解决缓存雪等问题也可以提高接口的性能#xff0c;但是可能会出现缓存一致性问题。如果数据频繁的变更#xff0c;可能会导…RedisCaffeine 多级缓存数据一致性解决方案 背景 之前写过一篇文章RedisCaffeine 实现两级缓存实战文章提到了两级缓存RedisCaffeine可以解决缓存雪等问题也可以提高接口的性能但是可能会出现缓存一致性问题。如果数据频繁的变更可能会导致Redis和Caffeine数据不一致的问题。 最近正好学习了一个项目项目里也用到的RedisCaffeine实现多级缓存并且在项目中给出了解决多级缓存数据不一致问题的解决方案今天正好给大家分享一下。 问题分析 通过RedisCaffeine似乎可以完成一级、二级缓存中数据的同步如果在单节点项目中是没有问题的但是在分布式场景下是有问题的看下图 说明 部署了2个transport-info微服务节点每个微服务都有自己进程级的一级缓存都共享同一个Redis作为二级缓存假设所有节点的一级和二级缓存都是空的此时用户通过节点1查询运单物流信息在完成后节点1的caffeine和Redis中都会有数据接着系统通过节点2更新了数据此时节点2中的caffeine和Redis都是更新后的数据用户还是进行查询动作依然是通过节点1查询此时查询到的将是旧的数据也就是出现了一级缓存与二级缓存之间的数据不一致的问题 解决方案 如何解决该问题呢可以通过消息的方式解决就是任意一个节点数据更新了数据发个消息出来通知其他节点其他节点接收到消息后将自己caffeine中相应的数据删除即可。 关于消息的实现可以采用RabbitMQ也可以采用Redis的消息订阅发布来实现在这里为了应用技术的多样化所以采用Redis的订阅发布来实现。 方案概述 Redis 发布订阅(pub/sub)是一种消息通信模式发送者(pub)发送消息订阅者(sub)接收消息。 当有新消息通过 publish 命令发送给频道 channel1 时 这个消息就会被发送给订阅它的三个客户端。 Redis的订阅发布功能与传统的消息中间件如RabbitMQ相比相对轻量一些针对数据准确和安全性要求没有那么高的场景可以直接使用。 代码实现 在RedisConfig增加订阅的配置 /*** 配置订阅用于解决Caffeine一致性的问题** param connectionFactory 链接工厂* param listenerAdapter 消息监听器* return 消息监听容器*/Beanpublic RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,MessageListenerAdapter listenerAdapter) {RedisMessageListenerContainer container new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);container.addMessageListener(listenerAdapter, new ChannelTopic(CHANNEL_TOPIC));return container;}编写RedisMessageListener用于监听消息删除caffeine中的数据。 /*** redis消息监听解决Caffeine一致性的问题*/ Slf4j Component public class RedisMessageListener extends MessageListenerAdapter {Resourceprivate CacheString, TransportInfoDTO transportInfoCache;Overridepublic void onMessage(Message message, byte[] pattern) {// 获取到消息中的运单idString transportOrderId Convert.toStr(message);log.info(redis消息监听缓存变更运单id:{}, transportOrderId);// 将本jvm中的缓存删除掉this.transportInfoCache.invalidate(transportOrderId);} }更新数据后向redis发送消息 Resourceprivate StringRedisTemplate stringRedisTemplate;OverrideCachePut(value transport-info, key #p0)public TransportInfoEntity saveOrUpdate(String transportOrderId, TransportInfoDetail infoDetail) {// 省略代码// 清除缓存中的数据// this.transportInfoCache.invalidate(transportOrderId);// Caffeine本地缓存一致性发布订阅消息到redis通知订阅者更新缓存this.stringRedisTemplate.convertAndSend(RedisConfig.CHANNEL_TOPIC, transportOrderId);// 保存/更新到MongoDBreturn this.mongoTemplate.save(transportInfoEntity);}总结 本文主要讲解了在使用Redis和Caffeine多级缓存时使用Redis的发布订阅模式来保证两级缓存的数据一致性。本地缓存是基于服务本地内存的分布式系统中当缓存更新时可能造成多个实例间的本地缓存不一致问题。可以使用RabbitMQ或者Redis的发布订阅来解决本地缓存不一致的问题。
http://www.hkea.cn/news/14319333/

相关文章:

  • 佛山商城网站制作一个空间怎么放多个网站吗
  • 银川免费网站建设贵州省建设厅的网站首页
  • 一流的网站建设哪家好化工网站关键词优化
  • 财政网站平台建设不足麻章手机网站建设公司
  • 建站软件2017建网站没有实体公司能建站吗
  • 三网合一网站怎么做学校建设网站费用申请
  • 益阳北京网站建设wordpress源码整站
  • 烟台网站建设推荐企汇互联见效付款个人网站建设费用
  • 广州番禺网站建设工作室沈阳流产手术哪家比较好
  • 大连哪里有手机自适应网站建设维护软件公司起名大全
  • 网络服务是干什么的优化网络
  • 法国网站域名云南省建设厅专家注册网站
  • dede5.7网站搬家全包装修包括哪些项目
  • vi设计网站排行榜wordpress仿站教程2018
  • 做网站搞流量挂联盟广告变现手机如何做api网站
  • 医药网站建设价格怎么验证网站备案密码是否正确
  • 婚纱摄影网站开题报告新网站建设总结
  • 生意宝做网站行吗网站备案邮寄资料
  • 网站建设文库 新的开始seo优化查询
  • 常州公司做网站长沙建网站的公司多少钱
  • app商城需要手机网站吗优秀设计作品欣赏
  • 瑞金网站建设光龙飓风 网站建设
  • 温岭专业自适应网站建设深圳 建网站
  • 网站建设 投资合作网站建设及优化
  • 网站推广120响应式网站免费模板下载
  • wordpress搭建电影网站门户网站建设管理工作自查报告
  • 网站建设域名怎么用做食品检测的网站
  • 实木餐桌椅移动网站建设电子商务网站基本功能
  • 关于电子商务网站建设的论文花钱做网站不给源代码
  • 网站设计制作报价图片服务器网站配置