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

汕头h5建站模板怎么开发一个微信商城

汕头h5建站模板,怎么开发一个微信商城,山东地产网站建设,做一家新闻媒体网站多少钱在项目中#xff0c;缓存是提高应用性能和响应速度的关键手段之一。然而#xff0c;当多个模块在短时间内发布工单并且需要清理同一个接口的缓存时#xff0c;容易引发缓存清理冲突#xff0c;导致缓存失效的问题。为了解决这一难题#xff0c;我们采用Redisson的消息队列…在项目中缓存是提高应用性能和响应速度的关键手段之一。然而当多个模块在短时间内发布工单并且需要清理同一个接口的缓存时容易引发缓存清理冲突导致缓存失效的问题。为了解决这一难题我们采用Redisson的消息队列功能实现了一个简单而高效的消息队列优雅地解决了缓存清理冲突问题。本文将为您详细介绍Redisson实现简单消息队列的方案以及如何在项目中使用它来优化缓存清理。 第一部分缓存清理冲突的挑战 在高并发场景下多个模块可能同时发布工单并且这些工单可能会导致同一个接口的缓存失效。当多个模块同时发起缓存清理请求时可能会造成数据库压力增大及缓存不一致的问题降低应用程序的性能和稳定性。这种情况下我们需要一种优雅的解决方案来协调缓存清理的行为。 第二部分Redisson简介 Redisson是一个功能强大的Java库基于Redis构建它提供了分布式数据结构和服务以及异步处理的解决方案。其中消息队列是Redisson提供的一项强大功能用于在多个模块之间实现高效的消息传递和处理。 第三部分使用Redisson消息队列解决方案 为了解决缓存清理冲突问题我们选择使用Redisson的消息队列功能具体步骤如下 创建Redisson客户端 首先我们需要创建一个Redisson客户端用于连接到Redis服务器。 创建消息队列 接下来我们创建一个Redisson的队列用于存放缓存清理请求消息。 发布缓存清理请求 在每个模块发布工单时我们将对应的缓存清理请求添加到Redisson队列中。 消费缓存清理请求 我们创建一个定时任务周期性的从Redisson队列中获取缓存清理请求消息。 处理缓存清理冲突 合并消息并执行缓存清理操作避免多个模块同时清理同一个接口的缓存。 第三部分代码示例 redisson配置文件 # 项目相关Spring redis配置 spring:redisson:# 地址clusters: 192.168.10.106:6479,192.168.10.106:6579,192.168.10.106:6679# 密码password: 123456# 连接超时时间timeout: 10s客户端连接类 RedissonManager package cn.xj.redis;import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.client.codec.StringCodec; import org.redisson.config.Config; import org.redisson.config.ReadMode; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** description: redisson初始化** author xj* p* create on 2020-04-09 17:21**/ Configuration public class RedissonManager {Value(${spring.redisson.clusters})private String cluster;Value(${spring.redisson.password})private String password;Bean(namecacheCluster)public RedissonClient getRedissonCluster(){String[] nodes cluster.split(,);//redisson版本是3.5集群的ip前面要加上“redis://”不然会报错3.2版本可不加for(int i0;inodes.length;i){nodes[i] redis://nodes[i];}RedissonClient redisson null;Config config new Config();//设置config.setCodec(new StringCodec())//这是用的集群server.useClusterServers()//设置集群状态扫描时间.setScanInterval(2000).addNodeAddress(nodes).setPassword(password).setReadMode(ReadMode.MASTER);;redisson Redisson.create(config);return redisson;}}redis工具类:RedissonCache package cn.xj.redis;import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; import lombok.extern.slf4j.Slf4j; import org.redisson.api.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component;import java.util.Map; import java.util.Set;/*** redisson工具类* company* author* data 2020-04-01*/ Component Slf4j public class RedissonCache {AutowiredQualifier(cacheCluster)private RedissonClient cacheCluster;public boolean cacheAdd(String key, MapString,SetString message){String msgJsonstr JSONObject.toJSONString(message);RQueueString queue cacheCluster.getQueue(key);return queue.add(msgJsonstr);}public MapString, SetString cachePoll(String key){RQueueString queue cacheCluster.getQueue(key);String msgJsonstr queue.poll();return JSON.parseObject(msgJsonstr, new TypeReferenceMapString, SetString() {});}} 功能示例类QueueController package cn.xj.redis;import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set;RestController public class QueueController {private static final String KEY xj_test_queue;Autowiredprivate RedissonCache redissonCache;/*** 添加消息队列* param params*/PostMapping(/redis/queue/add)public void add(RequestBody MapString, SetString params){redissonCache.cacheAdd(KEY,params);}/*** 消费队列中的消息* return*/GetMapping(/redis/queue/poll)public ListMapString, SetString poll(){ListMapString, SetString result new ArrayList();//每次最大消费条数int batchSize 200;//获取消费的所有消息MapString, SetString msgMap redissonCache.cachePoll(KEY);while (batchSize 0 !ObjectUtils.isEmpty(msgMap)) {result.add(msgMap);batchSize--;msgMap redissonCache.cachePoll(KEY);}try {//消息合并、处理逻辑//此处省略代码一万行} catch (Exception e){//消息处理失败的逻辑}return result;} } 我们调用模拟添加接口可以看到。每次有新的消息都是给queque的尾部添加 每次消费的时候是queque的头部开始取数据 第五部分总结和应用场景及注意事项 通过Redisson的消息队列功能我们成功实现了一个简单而高效的缓存清理解决方案。该方案有效解决了多个模块同时发布工单导致缓存清理冲突的问题提高了应用程序的性能和稳定性。 适用场景 多个模块在短时间内发布工单并需要清理同一个接口的缓存。 消息队列可以将不同模块或不同组件之间的通信解耦实现系统的高内聚和低耦合。同时在系统面临突发大量请求时消息队列可以进行削峰填谷保护系统不受过载影响。 注意事项 在使用队列时要考虑队列的容量避免队列过大导致内存压力过大或队列过小导致消息丢失。 在使用消息队列时需要小心处理异常情况。例如如果消息处理失败可以将消息重新排队或将其放入一个死信队列以便稍后进行处理。 总结 Redisson的消息队列是解决缓存清理冲突问题的优雅方案通过其强大的功能我们可以简单地实现消息传递和处理从而优化应用程序的性能。在日常开发中合理应用Redisson的消息队列功能能够帮助我们处理更多类似的并发问题提升应用程序的可靠性和扩展性。 希望本文能够为读者提供有益的参考让您在项目中更加灵活和高效地使用Redisson实现简单消息队列。愿您的应用程序在缓存清理中更上一层楼助您的项目更加稳健发展
http://www.zqtcl.cn/news/901911/

相关文章:

  • 做网站设计的公司柳州芜湖又出现一例
  • 重庆网站网站建设东莞市网站建设公司哪家好
  • php做网站如何架构wordpress 排版
  • wordpress免费网站模板下载地址在北京注册公司需要多少钱
  • 做的网站打不开高端网站名字
  • 个人网站建设报告西安网站开发高端网站开发
  • “网站建设:上海珍岛”网站备案信息查询系统
  • 北京哪个公司做网站专业建站培训
  • 郑州知名网站推广网站管理设置
  • 建设工程网站资质人员查询常州模板网站建设价格
  • 自己建网站做app手机网站列表页源码
  • 企业网站模板seo网站建设关键词优化
  • 平面毕业设计作品网站推广普通话ppt
  • p2p网站开发思路方案免费建简单网站
  • 微信朋友圈的网站连接怎么做互联网工程有限公司
  • 高大上企业网站优秀的门户网站
  • 做seo对网站推广有什么作用自己做电商网站吗
  • 网站从哪些方面来做泉州网页搜索排名提升
  • 网站建设可以给公司带来想做网站开发兼职
  • 天津市免费建站精美大气的餐饮类企业网站
  • 购物网站那个信用好又便宜手机模板的网站
  • 建筑企业资质查询网站怎么查网络服务商
  • 汉川市城乡建设局网站企业销售网站建设
  • 梅州建设网站域名购买流程
  • 单页网站与传统网站的区别wordpress对接微信
  • 做公司网站深圳旅游
  • 最好企业网站网站建设 的销售图片
  • 怎么创建网站 免费滴做网站算运营吗
  • 廊坊网站建设-商昊网络正规网站优化推广
  • 网站建设拍金手指排名贰贰安装wordpress数据库错误