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

河北固安县网站建设深圳住房建筑网站

河北固安县网站建设,深圳住房建筑网站,wordpress数据函数,做的王者荣耀钓鱼网站集群环境下的秒杀问题 前序 【Redis场景1】用户登录注册 【Redis场景2】缓存更新策略(双写一致) 【Redis场景3】缓存穿透、击穿问题 【Redis场景拓展】秒杀问题-全局唯一ID生成策略 【Redis场景4】单机环境下秒杀问题 在单机环境下的并发问题#xff0c;我们可以使用相关…集群环境下的秒杀问题 前序 【Redis场景1】用户登录注册 【Redis场景2】缓存更新策略(双写一致) 【Redis场景3】缓存穿透、击穿问题 【Redis场景拓展】秒杀问题-全局唯一ID生成策略 【Redis场景4】单机环境下秒杀问题 在单机环境下的并发问题我们可以使用相关锁来解决但是在集群环境中笔者测试通过Nginx做的反向代理和负载均衡请求的时候锁会出现失效的问题。 原因我们部署多个服务(存在多个tomcat服务器)每个tomcat都有一个属于自己的jvm.每个锁在同容器中有效但是跨容器后就无法实现互斥效果。 引出分布式锁 分布式就是指数据和程序可以不位于一个服务器上而是分散到多个服务器以网络上分散分布的地理信息数据及受其影响的数据库操作为研究对象的一种理论计算模型。分布式锁提供了多个服务器节点访问共享资源互斥的一种手段。 一个最基本的分布式锁需要满足 互斥 任意一个时刻锁只能被一个线程持有高可用 锁服务是高可用的。并且即使客户端的释放锁的代码逻辑出现问题锁最终一定还是会被释放不会影响其他线程对共享资源的访问。可重入一个节点获取了锁之后还可以再次获取锁 分布式锁的实现 基于redis中的SETNX 实现分布式锁基于Zookeeper的节点唯一性和有序性实现互斥的分布式锁基于MySQL本身的互斥锁机制 基于Redis的分布式锁 基本实现 GitHub完整代码https://github.com/xbhog/hm-dianping/tree/20230211-xbhog-redisCloud 锁接口实现20230211-xbhog-redisCloud /*** author xbhog* describe:* date 2023/2/16*/ public interface ILock {boolean tryLock(Long timeOutSec);void unLock(); }加锁解锁实现类 Override public boolean tryLock(Long timeOutSec) {String threadId ID_PREFIX Thread.currentThread().getId();Boolean isLock stringRedisTemplate.opsForValue().setIfAbsent(KEY_PREFIX keyName, threadId , timeOutSec, TimeUnit.SECONDS);//防止拆箱引发空值异常return Boolean.TRUE.equals(isLock); } Override public void unlock() {//通过del删除锁stringRedisTemplate.delete(KEY_PREFIX name); }锁误删问题 现在有两个锁线程1获取锁时由于业务的阻塞超时释放了这是线程2开始操作获取锁在线程2执行业务期间线程1业务在一段时间内不阻塞且业务完成这是开始执行释放锁的操作但是这是锁是线程2由此造成锁的误删问题 正确流程 解决的方式 修改之前的分布式锁实现满足在获取锁时存入线程标示可以用UUID表示 在释放锁时先获取锁中的线程标示判断是否与当前线程标示一致 如果一致则释放锁如果不一致则不释放锁 核心逻辑在存入锁时放入自己线程的标识在删除锁时判断当前这把锁的标识是不是自己存入的如果是则进行删除如果不是则不进行删除。 处理流程 代码实现 private static final String ID_PREFIX UUID.randomUUID().toString(true) -; Override public boolean tryLock(Long timeOutSec) {String threadId ID_PREFIX Thread.currentThread().getId();Boolean isLock stringRedisTemplate.opsForValue().setIfAbsent(KEY_PREFIX keyName, threadId , timeOutSec, TimeUnit.SECONDS);//防止拆箱引发空值异常return Boolean.TRUE.equals(isLock); } Override public void unLock() {String threadId ID_PREFIX Thread.currentThread().getId();//获取当前分布式锁中的valueString id stringRedisTemplate.opsForValue().get(KEY_PREFIX keyName);//锁相同则删除if(threadId.equals(id)){stringRedisTemplate.delete(KEY_PREFIX keyName);}}
http://www.hkea.cn/news/14315934/

相关文章:

  • 怀化网站建设网站小程序源码网网盘
  • 挖掘爱站网网站开发难不难
  • 石景山网站建设推广做网站公司的使命
  • phpcms双语网站怎么做wordpress安装包
  • 品牌网站建设968html网页设计作业代码
  • 皮具网站建设服装网站网站页面优化方法有哪些内容
  • 零基础学pytho 网站开发煤炭网站建设企业
  • 网站源码修复盘锦做网站公司
  • wordpress全站同一个标题关键信息基础设施安全保护条例
  • 贵阳市住房和城乡建设厅网站做网站网关备案
  • 企业网站收录中国城乡和住房建设部网站
  • c sql网站开发wordpress自定义菜单的输出
  • 摄影师都在哪些网站发布作品做平面免费接单网站
  • 做产地证的网站学校网站如何建设
  • 西安门户网站开发免费企业网站源码下载
  • 哈尔滨网站设计公司电话东平做网站
  • 北京网站关键词优化推荐一个公司可以做几个百度推广
  • 重庆建站公司哪个好一个营销型网站模板
  • 怎么做网站更新和维护微网站的图标怎么做
  • 企业为什么做网站素材wordpress查看未验证邮箱
  • 温州建设局老网站WordPress文章添加iframe
  • 网站怎么做可以再上面输入文字装饰网站建设优惠套餐
  • 难道做网站的工资都不高吗网站建设费属于无形资产吗
  • 网站开发kpi网站开发时间进度
  • 不会编程如何做自己的网站重庆有什么好玩的吗
  • 旅游加盟网站建设招商项目
  • 中山市 做网站个人备案网站可以做商城展示
  • 单页网站模板修改wordpress 修改语言
  • 夏津建设局网站网站建设是永久使用吗
  • 上海网站制作设计公司主播做的头像在哪个网站上做的