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

镇江seo网站做图网站地图

镇江seo网站,做图网站地图,优的网站建设明细报价表,昆明小程序开发多少钱文章目录 1、lua脚本入门1.1、变量#xff1a;弱类型1.2、流程控制1.3、在lua中执行redis指令1.4、实战#xff1a;先判断是否自己的锁#xff0c;如果是才能删除 2、AlbumInfoApiController --》testLock()3、AlbumInfoServiceImpl --》testLock() 1、lua脚本入门 Lua 教程… 文章目录 1、lua脚本入门1.1、变量弱类型1.2、流程控制1.3、在lua中执行redis指令1.4、实战先判断是否自己的锁如果是才能删除 2、AlbumInfoApiController --》testLock()3、AlbumInfoServiceImpl --》testLock() 1、lua脚本入门 Lua 教程 | 菜鸟教程https://www.runoob.com/lua/lua-tutorial.html\ redis提供了一组命令行直接可以执行lua脚本。 redis中的lua脚本是有原子性因为是通过一个指令执行的 [rootlocalhost ~]# docker exec -it spzx-redis redis-cli 127.0.0.1:6379 auth 123456 OK 127.0.0.1:6379 eval script numkeys key [key ...] arg [arg ...]scriptlua 脚本字符串 numkeys需要传递的key列表的元素数量 key指定具体key列表元素之间用空格区分用KEYS[Iindex从1开始] arg指定具体arg列表元素之间用空格区分用ARGV[index从1开始] 127.0.0.1:6379 eval return hello world! 0 hello world!1.1、变量弱类型 全局变量a 5 局部变量local a 5 redis中的lua脚本只支持局部变量127.0.0.1:6379 eval local a5 return a 0 (integer) 51.2、流程控制 127.0.0.1:6379 eval if 1020 then return 10 else return 20 end 0 (integer) 20要修正你的脚本你应该使用 KEYS 和 ARGV 而不是 keys 和 argv注意大小写。KEYS 数组包含了传递给脚本的键名key names而 ARGV 数组包含了传递给脚本的参数arguments。 127.0.0.1:6379 eval if keys[1]argv[1] then return keys[2] else return argv[2] end 2 10 20 30 40 (error) ERR Error running script (call to f_6913b8a1459b5bd1de1628cd76db221048464f0a): enable_strict_lua:15: user_script:1: Script attempted to access nonexistent global variable keys 127.0.0.1:6379 eval if KEYS[1]ARGV[1] then return KEYS[2] else return ARGV[2] end 2 10 20 30 40 40127.0.0.1:6379 eval return {10,20,30,40} 0 1) (integer) 10 2) (integer) 20 3) (integer) 30 4) (integer) 40127.0.0.1:6379 eval return {KEYS[1],KEYS[3],ARGV[1],ARGV[3]} 4 10 20 30 40 50 60 70 80 90 1) 10 2) 30 3) 50 4) 701.3、在lua中执行redis指令 redis.call(‘指令名称’,…) 127.0.0.1:6379 eval return redis.call(set,lock,333) 0 OK 127.0.0.1:6379 get lock 333127.0.0.1:6379 eval return redis.call(get,lock) 0 333127.0.0.1:6379 eval return redis.call(set,KEYS[1],ARGV[1]) 1 lock 123 OK 127.0.0.1:6379 get lock 1231.4、实战先判断是否自己的锁如果是才能删除 eval if redis.call(get,KEYS[1]) ARGV[1] then return redis.call(del,KEYS[1]) else return 0 endeval if redis.call(get,KEYS[1]) ARGV[1] then return redis.call(del,KEYS[1]) else return 0 end127.0.0.1:6379 eval if redis.call(get,KEYS[1]) ARGV[1] then return redis.call(del,KEYS[1]) else return 0 end 1 lock 4343323 (integer) 0127.0.0.1:6379 eval if redis.call(get,KEYS[1]) ARGV[1] then return redis.call(del,KEYS[1]) else return 0 end 1 lock 123 (integer) 12、AlbumInfoApiController --》testLock() Tag(name 专辑管理) RestController RequestMapping(api/album/albumInfo) SuppressWarnings({unchecked, rawtypes}) public class AlbumInfoApiController {GetMapping(test/lock)public Result testLock() {this.albumInfoService.testLock();return Result.ok(测试分布式锁案例);}}3、AlbumInfoServiceImpl --》testLock() Overridepublic void testLock(){// 加锁set k v nx ex 3String uuid UUID.randomUUID().toString();Boolean lock this.redisTemplate.opsForValue().setIfAbsent(lock, uuid, 3, TimeUnit.SECONDS);if (!lock) {try {// 获取锁失败进行自旋Thread.sleep(50);this.testLock();} catch (InterruptedException e) {throw new RuntimeException(e);}}else {// 获取锁成功执行业务//this.redisTemplate.expire(lock, 3, TimeUnit.SECONDS);Object numObj this.redisTemplate.opsForValue().get(num);if (numObj null) {this.redisTemplate.opsForValue().set(num, 1);return;}Integer num Integer.parseInt(numObj.toString());this.redisTemplate.opsForValue().set(num, num);// 解锁// 先判断是否是自己的锁如果是则删除//if (StringUtils.equals(uuid, this.redisTemplate.opsForValue().get(lock).toString())) {// this.redisTemplate.delete(lock);//}String script if redis.call(get,KEYS[1]) ARGV[1] then return redis.call(del,KEYS[1]) else return 0 end;this.redisTemplate.execute(new DefaultRedisScript(script, Boolean.class), Arrays.asList(lock), uuid);}}压力测试肯定也没有问题。自行测试 启动多个运行实例 redis中的值重新改为0。 [rootlocalhost ~]# ab -n 5000 -c 100 http://192.168.74.1:8500/api/album/albumInfo/test/lock This is ApacheBench, Version 2.3 $Revision: 1430300 $ Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking 192.168.74.1 (be patient) Completed 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requestsServer Software: Server Hostname: 192.168.74.1 Server Port: 8500Document Path: /api/album/albumInfo/test/lock Document Length: 76 bytesConcurrency Level: 100 Time taken for tests: 49.543 seconds Complete requests: 5000 Failed requests: 674(Connect: 0, Receive: 0, Length: 674, Exceptions: 0) Write errors: 0 Total transferred: 2353370 bytes HTML transferred: 383370 bytes Requests per second: 100.92 [#/sec] (mean) Time per request: 990.856 [ms] (mean) Time per request: 9.909 [ms] (mean, across all concurrent requests) Transfer rate: 46.39 [Kbytes/sec] receivedConnection Times (ms)min mean[/-sd] median max Connect: 0 2 2.6 1 81 Processing: 5 948 2587.5 14 33884 Waiting: 5 948 2587.5 14 33883 Total: 6 950 2587.7 16 33887Percentage of the requests served within a certain time (ms)50% 1666% 19775% 62780% 105490% 284695% 501198% 827799% 12678100% 33887 (longest request)
http://www.w-s-a.com/news/543684/

相关文章:

  • 大淘客官网做的网站打不开网站建设完成
  • 婚纱摄影网站模板让别人做网站怎样才安全
  • 技术支持 骏域网站建设专家佛山网站运营管理教材
  • 个体营业执照可以做网站服务吗电商运营学校培训
  • 企业网站免费推广的方法.wordpress 爱情模板下载地址
  • 轻淘客 轻网站怎么做手机开发人员选项怎么打开
  • 天津做网站制作公司html网站 下载
  • 哪个网站的课件做的好crm客户管理系统全称
  • 网站建设工作室创业计划书seo是什么职位的简称
  • o2o平台网站开发什么是白帽seo
  • 免费建个人手机网站WordPress 简历库
  • 建网站 是否 数据库阳瘘的最佳治疗方法是什么
  • 知晓程序网站怎么做网站基础维护
  • 兼职做网站赚钱吗图片设计制作哪个软件好手机
  • 做手机旅游网站智慧校园登录入口
  • 莆田网站建设维护国外极简网站
  • 百度怎样收录网站缪斯设计集团
  • 网站建设在开封找谁做wordpress 数据转换
  • 旅游网站开发的流程江苏付费网络推广培训
  • 网站软文标题2018wordpress主题
  • 德清网站设计wordpress免登录发布接
  • 可以做游戏的网站有哪些客户关系管理系统的主要功能
  • 整人关不掉的网站怎么做广东省网站免备案表
  • 网站设计素材edu域名网站
  • 中山学校的网站建设wordpress文章图片显示不出
  • 兰溪城市建设规划网站网站联盟的基本流程
  • 免费推广网站注册入口小说阅读网站怎么建设
  • 新网站怎么做网络推广怎么做企业网站排名
  • jsp商业网站开发网站链接如何做二维码
  • 江苏高校品牌专业建设网站怎么制作网站搜索窗口