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

杭州家具网站建设方案郑州app开发价格

杭州家具网站建设方案,郑州app开发价格,kuake自助建站系统官网,阆中 网站建设背景 操作涉及一批数据,如订单,可能存在多个场景下操作,先使用读锁,从redis缓存中获取操作中数据 比如 关闭账单, 发起调账, 线下结算, 合并支付 先判断当前操作的数据,是否在…

背景

操作涉及一批数据,如订单,可能存在多个场景下操作,先使用读锁,从redis缓存中获取操作中数据

比如

关闭账单,
发起调账,
线下结算,
合并支付

先判断当前操作的数据,是否在其他地方操作中(在redis set结构中),

存在:提示稍后再操作,业务流程终止。

不存在:把当前操作数据放入redis 缓存中(同时这个动作加写锁),在加写锁的过程中,是不允许其他读锁读取数据的

然后,进行业务逻辑处理

什么把缓存中数据删除呢?


操作完成,删除缓存中数据(同时加写锁)

    /*** 删除操作完成的账单号缓存** @param billNoList*/public void removeInOperationBillNoCache(List<String> billNoList) {log.info("removeInOperationBillNoCache--->billNoList:{}", JSON.toJSONString(billNoList));RReadWriteLock readWriteLock = redissonClient.getReadWriteLock(Constant.LEASE_BILL_IN_OPERATION_KEY);RLock writeLock = readWriteLock.writeLock();writeLock.lock();try {billNoList.forEach(billNo -> redisService.srem(Constant.LEASE_BILL_IN_OPERATION_CACHE, billNo));} finally {writeLock.unlock();}}

 判断及读写锁逻辑

    /*** 缓存操作中的账单号** @param billNoList*/@SuppressWarnings("unchecked")public void inOperationBillNoCache(List<String> billNoList) {log.info("inOperationBillNoCache--->billNoList:{}", JSON.toJSONString(billNoList));RReadWriteLock readWriteLock = redissonClient.getReadWriteLock(Constant.LEASE_BILL_IN_OPERATION_KEY);RLock rLock = readWriteLock.readLock();rLock.lock();try {if (redisService.hasKey(Constant.LEASE_BILL_IN_OPERATION_CACHE)) {Set<String> inOperationBillNoSet = redisService.smembers(Constant.LEASE_BILL_IN_OPERATION_CACHE);log.info("inOperationBillNoCache--->inOperationBillNoSet:{}", JSON.toJSONString(inOperationBillNoSet));if (CollectionUtils.isNotEmpty(inOperationBillNoSet)) {List<String> multipleOperationBillNoList = (List<String>) CollectionUtils.intersection(inOperationBillNoSet, billNoList);throw new LeaseServiceException(ErrConstant.INVALID_DATAFILED, String.format("账单[%s]存在多人操作,请刷新后重试", String.join(",", multipleOperationBillNoList)));}}} finally {rLock.unlock();}RLock writeLock = readWriteLock.writeLock();writeLock.lock();try {billNoList.forEach(billNo -> redisService.sadd(Constant.LEASE_BILL_IN_OPERATION_CACHE, billNo));} finally {writeLock.unlock();}}

调用场景 

关于缓存数据redis结构选取

set,数据不重复,可以计算交集,判断是否在当前元素中 

源码

 

http://www.dtcms.com/a/585737.html

相关文章:

  • gdb调试命令和GDB 到 LLDB 命令映射
  • 【CUDA笔记】02 CUDA GPU 架构与一般的程序优化思路(上)
  • 198种组合算法+优化XGBoost+SHAP分析+新数据预测!机器学习可解释分析,强烈安利,粉丝必备!
  • 东莞做网站要多少钱安顺建设局网站官网
  • 在线做h5 的网站网站服务器怎么查询
  • Vue 项目实战《尚医通》,展示已有医院的数据并分页展示,笔记11
  • Modbus RTU 转 Modbus TCP:借助数据采集提升三菱PLC冷库温度反馈实时性案例
  • DeepSeek-OCR实战(01):基础运行环境搭建-Ubuntu
  • SQLite 索引:优化数据库查询的关键
  • 可拖拽网站三星官网商城
  • MySQL 8.x 的 my.ini配置设置
  • 周志华《机器学习导论》第 15 章 规则学习(符号主义学习)
  • 使用pycharm自带debug模式运行flask时报错
  • 福州做网站需要多少钱懒设计app
  • Dify 安全架构设计
  • 网站推广国外网站建设素材库
  • Rust 练习册 :Pythagorean Triplet与数学算法
  • 构建一个短链接生成器服务(FastAPI + SQLite)
  • 基于SpringBoot智慧社区系统/乡村振兴系统/大数据与人工智能平台
  • 做网站的公司跑了wordpress 首页显示产品
  • BLDCPMSM电机控制器硬件设计工程(八)72V 10kW电机控制器原理图工程及库文件
  • 西宁的网站建设公司怎样建立网站的快捷方式
  • MATLAB基于IOWGA算子的最优组合预测模型及应用
  • HarmonyOS Web组件深度解析:构建高性能JavaScript交互的实践与创新
  • 华为OD机试双机位A卷 - 竖直四子棋 (JAVA Python C++ JS GO)
  • Qt C++:跨平台开发利器
  • 愿景 做中国最受欢迎的互联网网站阿里云建站论坛网站
  • HotpotQA:推动多跳推理问答发展的标杆数据集
  • 【开题答辩全过程】以 二手家电回收平台的设计与实现为例,包含答辩的问题和答案
  • 图论基础概念