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

时尚网站模板网址大全123官方网站

时尚网站模板,网址大全123官方网站,wordpress 微软雅黑字体,网站怎么做备案变更概述 官方推荐的客户端#xff0c;支持Redis单实例、Redis哨兵、Redis Cluster、Redis master-slave等各种部署架构。 GitHub#xff0c; 功能#xff1a; 分布式锁 分布式锁 使用Redisson提供的分布式锁的一个最常见场景#xff0c;应用部署为多个节点#xff0c;然…概述 官方推荐的客户端支持Redis单实例、Redis哨兵、Redis Cluster、Redis master-slave等各种部署架构。 GitHub 功能 分布式锁 分布式锁 使用Redisson提供的分布式锁的一个最常见场景应用部署为多个节点然后使用Spring提供的原生Scheduled任务调度功能而没有使用xxl-job等轻量级分布式任务调度系统底层基于数据库悲观锁 Scheduled(cron 0 0 8 * * ?) public void execute() {RLock lock redissonClient.getLock(myLock);try {boolean isLock lock.tryLock(1, 5, TimeUnit.MINUTES);if (!isLock) {log.warn(job正在执行);return;}log.info(任务开始执行);} catch (Exception e) {log.error(执行失败, e);lock.unlock();} }通过lock.tryLock()查看源码一步步往里看 T RFutureT tryLockInnerAsync(long leaseTime, TimeUnit unit, long threadId, RedisStrictCommandT command) {this.internalLockLeaseTime unit.toMillis(leaseTime);return this.commandExecutor.evalWriteAsync(this.getName(), LongCodec.INSTANCE, command, if (redis.call(exists, KEYS[1]) 0) then redis.call(hset, KEYS[1], ARGV[2], 1); redis.call(pexpire, KEYS[1], ARGV[1]); return nil; end; if (redis.call(hexists, KEYS[1], ARGV[2]) 1) then redis.call(hincrby, KEYS[1], ARGV[2], 1); redis.call(pexpire, KEYS[1], ARGV[1]); return nil; end; return redis.call(pttl, KEYS[1]);, Collections.singletonList(this.getName()), new Object[]{this.internalLockLeaseTime, this.getLockName(threadId)}); }稍微格式化一下方便阅读 if (redis.call(exists, KEYS[1]) 0) then redis.call(hset, KEYS[1], ARGV[2], 1);redis.call(pexpire, KEYS[1], ARGV[1]);return nil; end; if (redis.call(hexists, KEYS[1], ARGV[2]) 1)then redis.call(hincrby, KEYS[1], ARGV[2], 1);redis.call(pexpire, KEYS[1], ARGV[1]);return nil; end; return redis.call(pttl, KEYS[1]);也就是说需要执行一段Lua脚本 KEYS[1]代表加锁的Key即myLockARGV[1]代表加锁Key的生存时间默认30秒ARGV[2]代表加锁客户端ID格式UUID:n如e197fb92-deeb-4f9d-9d34-51b9b09f0bd7:1其中n表示Redis Cluster集群节点 第一段if判断语句用exists myLock判断一下如果要加锁的Key不存在则通过命令hset myLock e197fb92-deeb-4f9d-9d34-51b9b09f0bd7:1 1加锁即设置一个Hash数据结构。命令执行后会生成类似如下数据结构 myLock: { e197fb92-deeb-4f9d-9d34-51b9b09f0bd7:1: 1 }接着执行pexpiremyLock 30000命令设置myLock这个锁Key的生存时间是30秒加锁完成。 watch dog自动延期机制 客户端1加锁的Key默认过期时间30秒客户端1只要加锁成功就会启动一个watchdog后台线程每隔10秒检查一下如果客户端1还持有锁Key就会不断的延长锁Key的生存时间。 释放锁 执行lock.unlock()即释放分布式锁执行一次lock.unlock()对myLock数据结构中的加锁次数减1。 加锁次数未0说明此客户端已经不再持有锁触发删除所del myLock命令。其他客户端即可尝试加锁。 缺点 上面那种方案最大的问题就是如果你对某个Redis Master实例写入myLock这种锁Key的Value此时会异步复制给对应的Master Slave实例。 但是这个过程中一旦发生Redis Master宕机主备切换Redis Slave变为Redis Master。 会导致客户端2尝试加锁时在新的Redis Master上完成加锁客户端1也以为自己成功加锁。 此时就会导致多个客户端对一个分布式锁完成加锁。这时系统在业务语义上一定会出现问题导致各种脏数据的产生。 所以这个就是Redis Cluster或是redis master-slave架构的主从异步复制导致的Redis分布式锁的最大缺陷在Redis Master实例宕机的时候可能导致多个客户端同时完成加锁。 在基于NIO的Netty框架上充分利用Redis提供的一系列优势 问题 ClassNotFoundException: org.nustaq.serialization.FSTConfiguration Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method redisson threw exception; nested exception is java.lang.NoClassDefFoundError: Lorg/nustaq/serialization/FSTConfiguration; Caused by: java.lang.ClassNotFoundException: org.nustaq.serialization.FSTConfiguration解决方案pom.xml文件里新增 dependencygroupIdde.ruedigermoeller/groupIdartifactIdfst/artifactIdversion2.57/version /dependencyattempt to unlock lock, not locked by current thread by node id java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id: 633dfc8a-b388-4ba1-ad64-75b491d0c5f2 thread-id: 118at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:88)at org.redisson.command.CommandAsyncService.handleReference(CommandAsyncService.java:1067)at org.redisson.command.CommandAsyncService.handleSuccess(CommandAsyncService.java:1059)at org.redisson.command.CommandAsyncService.checkAttemptFuture(CommandAsyncService.java:1041)at org.redisson.command.CommandAsyncService$12.operationComplete(CommandAsyncService.java:805)at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:88)at org.redisson.client.handler.CommandDecoder.completeResponse(CommandDecoder.java:448)at org.redisson.client.handler.CommandDecoder.handleResult(CommandDecoder.java:443)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:354)at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:128)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:108)解决方案 finally {if (lock.isLocked() lock.isHeldByCurrentThread()) {lock.unlock();} }Command (SET), params [] succesfully sent, but channel [] has been closed 详细的报错信息 org.springframework.data.redis.RedisConnectionFailureException: Command (SET), params [] succesfully sent, but channel [] has been closed! at org.redisson.spring.data.connection.RedissonExceptionConverter.convert(RedissonExceptionConverter.java:40)at org.redisson.spring.data.connection.RedissonExceptionConverter.convert(RedissonExceptionConverter.java:35)at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44)at org.redisson.spring.data.connection.RedissonConnection.transform(RedissonConnection.java:237)at org.redisson.spring.data.connection.RedissonConnection.syncFuture(RedissonConnection.java:232)at org.redisson.spring.data.connection.RedissonConnection.sync(RedissonConnection.java:462)at org.redisson.spring.data.connection.RedissonConnection.write(RedissonConnection.java:828)at org.redisson.spring.data.connection.RedissonConnection.set(RedissonConnection.java:596)at org.springframework.data.redis.connection.DefaultStringRedisConnection.set(DefaultStringRedisConnection.java:946)at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224)at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:184)at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:95)at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:236) 参考GitHub-issue Redis connection is closed for some reason. Try to set pingConnectionInterval: 60000. 解决方法在redisson.yml文件里新增配置pingConnectionInterval: 60000 RedisResponseTimeoutException: Redis server response timeout occured after 3 retry attempts. Command: params: 解决方法同上新增配置。 参考
http://www.hkea.cn/news/14572900/

相关文章:

  • wordpress中英文一个新网站怎么做seo
  • 网站留言系统编写代码株洲网站建设报价方案
  • 南昌网站建设_南昌做网站公司开发人员工具
  • 自己可以做门户网站吗机械加工厂
  • 新郑做网站公司校园网二级网站的建设
  • 母婴网站 模板周年庆网站要怎么做
  • 网站建设有什么技术广州南沙网站建设公司
  • 沈阳网站建设技术公司河源网站制作1993seo
  • 区块链app定制开发seo服务公司上海
  • 贵州省文化旅游网站建设的必要性微信生活门户网站源码
  • 阜阳网站制作公司哪里有网站怎样做公众号
  • 莱州免费发布信息的网站平台进入网站后台代码
  • 手机免费建立网站pc端网页设计模板
  • 百度推广电话销售好做吗上海网站排名优化推荐
  • 徐汇科技网站建设物业公司企业文化建设
  • 做电脑系统网站为什麼建网站要先做数据库
  • 昆山专业网站建设公司哪家好app网站开发者
  • 建站程序创建一家公司的步骤
  • 设计公司起名大全seo网页优化公司
  • 秦皇岛抚宁区建设局网站中国公路建设招标网站
  • 达州城乡建设网站网站页面需求
  • 能看所有网站的浏览器wordpress可视化编辑教程
  • 成都市温江区建设局网站哈尔滨网络公司招聘信息
  • 贵阳seo网站管理wordpress 摘要长度
  • 昆明网站搭建彩页设计印刷公司
  • wordpress 微信连接数据库seo还有哪些方面的优化
  • 互联网招聘网站湘潭市建设路学校网站
  • 网站建设公司服务wordpress登录qq微信登录界面
  • 深圳哪里有网站建设做社交网站开发
  • 公司做网站的费用入账如何建立团购网站