范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

lua脚本Redis调用

  lua脚本~ Redis调用
  参考资料:
  redis常见命令
  官方调用lua文档
  redis菜鸟教程
  lua菜鸟教程
  其他:
  https://www.cnblogs.com/kaituorensheng/p/11098194.html
  https://blog.csdn.net/z69183787/article/details/80266417 前言前言的前言
  一句话,因为要用所以学习简单粗暴 前言body
  本次仅学习如何使用redis调用lua脚本(含springboot调用方式),lua脚本如何写以后有时间在玩。 本次测试的lua脚本
  写redis锁时经常使用的一个脚本: if redis.call("get", KEYS[1]) == ARGV[1] then     return redis.call("del", KEYS[1]) else     return 0 end Redis客户端操作
  我这里的客户端用的 windows  的,将准备好的lua  脚本放在自己指定的文件夹# 链接redis服务器 > redis-cli.exe -h 127.0.0.1 -p 6379 # 设置测试键值 > set jimmyTestRedisLock Y > OK # 检查设置是否成功 > get jimmyTestRedisLock > "Y" # 先执行一个测试脚本 > eval "return {KEYS[1],ARGV[1]}" 1 key1 first > 1) "key1" > 2) "first" # 执行我们的测试脚本 > eval E:/tmp/unlock.lua 1 jimmyTestRedisLock Y > (error) ERR Error compiling script (new function): user_script:1: "" expected near "/"
  报错了!!! why ??? 这个符合eval语法吖?
  其实,这里面有一个问题就是如果想要直接执行文件,就不需要进入 redis-client  # 直接在cmd中(linux就是终端里调用 redis-cli 命令即可) > redis-cli.exe -h 127.0.0.1 -p 6379 --eval E:/tmp/unlock.lua 1 jimmyTestRedisLock Y > 1 # 检查脚本执行是否成功 > get jimmyTestRedisLock # 完美 > (nil)
  当然如果想要在 reids-client  内执行怎么办呢?这里就需要使用  SCRIPT LOAD # 将lua加载到redis服务中 执行完会返回一段SHA码 > redis-cli script load "$(cat 【替换成编写的lua文件名】.lua)" # EvalSHA命令 > evalsha SHA码 Spring boot中执行lua脚本
  这里展示部分代码
  将脚本放在 resouces   文件下 lua/unlock.lua  @Override public boolean tryLock() {     log.info("RedisLock tryLock()");     try{         String uuid = UUID.randomUUID().toString();          // 序列化值多双引号问题,指定序列化方式         redisTemplate.setValueSerializer(new StringRedisSerializer());          redisTemplate.opsForValue().set(lock, uuid, expiresTime, TimeUnit.SECONDS);         local.set(uuid);     }catch (Exception e){         log.error("RedisLock tryLock() ex", e);         return  false;     }     log.info("RedisLock tryLock() success");      return true; }  /**  * 释放锁  */ @Override public void unlock() {     log.info("RedisLock tryLock(1,2) success");     DefaultRedisScript unlockScript = new DefaultRedisScript();     unlockScript.setResultType(Long.class);     unlockScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("lua/unlock.lua")));      List keys = new ArrayList<>();     keys.add(lock);     List args = new ArrayList<>();     args.add(local.get());     // 集群模式下这样使用会报错  org.springframework.dao.InvalidDataAccessApiUsageException: EvalSha is not supported in cluster environment.     //        Long res = (Long) redisTemplate.execute(unlockScript, keys,local.get());      Long res = (Long) redisTemplate.execute(new RedisCallback() {         @Override         public Long doInRedis(RedisConnection connection) throws DataAccessException {             Object nativeConnection = connection.getNativeConnection();             // 集群模式和单机模式虽然执行脚本的方法一样,但是没有共同的接口,所以只能分开执行             // 集群模式             if (nativeConnection instanceof JedisCluster) {                 return (Long) ((JedisCluster) nativeConnection).eval(unlockScript.getScriptAsString(), keys, args);             }              // 单机模式             else if (nativeConnection instanceof Jedis) {                 return (Long) ((Jedis) nativeConnection).eval(unlockScript.getScriptAsString(), keys, args);             }             return 0L;         }     });      log.info("RedisLock unlock res:" + res);     if(res == 1) {         log.info("RedisLock unlock success");     } else {         log.info("RedisLock unlock fail");     } }
  测试代码: import ...RedisLock; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.web.WebAppConfiguration; import javax.annotation.Resource;  @RunWith(SpringRunner.class) @SpringBootTest @WebAppConfiguration public class RedisLockTest {      @Autowired     private RedisLock redisLock;       @Test     public void testRedis(){         System.out.println(redisLock.tryLock());         redisLock.unlock();     } }
  测试控制台结果。当然也需要在redis-client中检查下是否是正确的结果
  2020-12-09 15:20:46.310 INFO [ybyy-customer,] 10084 — [ main] c.s.y.c.service.impl.ClaimServiceImpl : RedisLock tryLock()
  2020-12-09 15:20:46.361 INFO [ybyy-customer,] 10084 — [ main] c.s.y.c.service.impl.ClaimServiceImpl : RedisLock tryLock() success
  true
  2020-12-09 15:20:46.362 INFO [ybyy-customer,] 10084 — [ main] c.s.y.c.service.impl.ClaimServiceImpl : RedisLock tryLock(1,2) success
  2020-12-09 15:20:46.409 INFO [ybyy-customer,] 10084 — [ main] c.s.y.c.service.impl.ClaimServiceImpl : RedisLock unlock res:1
  2020-12-09 15:20:46.409 INFO [ybyy-customer,] 10084 — [ main] c.s.y.c.service.impl.ClaimServiceImpl : RedisLock unlock success
  封面图(侵权删)

市场分析智几L7凭什么卖40万?2021年1月,智己汽车举行全球品牌发布会。并且发布了已经确定量产的两款车型,分别是一款纯电轿车L7和一款纯电SUVLS7。4月初,智己L7首次亮相。同月,上海车展上,智己L7开启EOS立定跳远成绩不佳EOS,是个韭菜币。2017年,柚子币开始出现在公众视野,这个项目从诞生起,就是对标以太坊老大哥的。不仅如此,当时的ICO项目都用以太坊搞众筹,借大哥的火,和大哥比翼双飞。EOS出小爱音箱Play增强版体验仅售129元小升级大实用近日,小米带来了小爱音箱Play增强版,顾名思义,这款音箱要比原本的小爱音箱Play多了一些更为实用的功能。具体有以下几点1音箱增加了数字显示屏,可以显示一些例如时间和问候这样简单这次要感谢韩国,一刀砍向苹果谷歌,手机应用要便宜30了前段时间,苹果做出了一个巨大的让步,那就是不再强制所有APP必须在应用内支付了,可允许APP开发者,通过其它方式通知用户付费,而这笔费用苹果不会收取佣金。一时之间,用户们奔走相告,千元机性价比之王,还要什么自行车!红米Note10Pro测评在换手机之前用的是iPhoneXR,所以我可以我简单对比一下两者日常使用区别,废话不多说,进入正题。手机重量是193g,不重也不轻。手机支持的是67W快充,标配的也是67W的充电器华为鸿蒙120万开发者做300多个APP在玩文字游戏还是不怀好意捧杀文电脑狂人前言最近看到很多自媒体都在说华为鸿蒙系统虽然号称有120万开发者,但鸿蒙原生APP到现在却只有300多个。所以华为自提供系统,至于软件,能用安卓的就用。咋一看,这种说法好连续四个季度登顶,联发科成功翻身,华为台积电功不可没近日,市场调研机构Counterpointresearch发布2021年第二季度处理器市场排名。最新调查报告显示2021年第二季度,联发科凭借38的市场份额拿下手机处理器市场冠军。想买个手机,苹果不考虑。国产手机哪个品牌,哪个型号的好?国产手机就选华为吧,如果买的到的话,不想原价买,那就加价买。不喜欢苹果,不说爱国不爱国,同等配置,苹果比国产手机贵好多。而且,饥饿营销,好的型号,颜色的苹果手机在国内还是比较难买的工银瑞信闫思倩十年投研见证新能源板块崛起,谁将最终领跑?来自工银瑞信的雪球专栏一个行业从孕育期到野蛮生长,再从到优胜劣汰到高质量发展阶段,需要多久?新能源领域仅用了十余年。在这期间,涌现出一批深耕相关产业链的基金经理,深刻见证和参与到全低烧生活买电动车,打了自己脸,但也明白一个道理是的,当嗝嗝在特斯拉的预订网页点下确定键时,就和之前的每次买车一样,我没有任何纠结或者犹豫,就是它了。那天是7月9日,也是特斯拉ModelY标准续航版发布的第二天,本来打算在发布当复旦团队成果登自然主刊,可穿戴电池解决手机续航难题?最近,复旦大学高分子科学系彭慧胜团队通过系统揭示纤维锂离子电池内阻随长度的变化规律,有效解决了聚合物复合活性材料和纤维电极界面稳定性的世界级难题,连续构建出新型纤维聚合物锂离子电池
STM32F103USART串口实验代码includestm32f10x。hvoidMyUSART1Init(void)定义结构体GPIOInitTypeDefGPIOInitStructUSARTInitTypeDef骑手肇事逃逸顺丰被判连带责任平台该不该为骑手负责?日前,企查查公开了一则机动车交通事故责任纠纷民事一审判决书,北京市一名外卖骑手因与原告发生交通事故后逃逸,原告将骑手骑手注册平台所属公司顺丰公司以及保险公司一起告上了法庭。随着移动SpringBootEasyExcel导入导出,好用到爆,可以扔掉POI了一EasyExcelEasyExcel是阿里巴巴开源poi插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据量大起来容易OOM,解决了POI并发造成的报错。主要裁员大潮中,科学家正在离开互联网当科学家背起了KPI作者李贤焕编辑王晓玲在这个冬天的裁员大潮中,科学家也正在离开互联网。11月,复旦大学官宣原蚂蚁集团副总裁AI团队负责人漆远正式加入复旦大学,出任复旦大学浩清教授6999元原价购入厂妹机,使用近3个月,我后悔了吗?厂妹机何来的鄙视和优越感?图源网络,不代表本人观点。侵删。先说观点我个人对厂妹厂弟并无偏见,且不说劳动光荣,没有广大厂弟厂妹的辛勤工作,键盘侠可能都没手机带着优越感打出xxx厂妹机我突然间有个可怕的想法,支付宝微信如果弄个什么币那还得了刚刚看到一个新闻,特斯拉首席执行官马斯克宣布,特斯拉将开始接受使用狗狗币用来为商品支付。这直接说明了这种虚拟币将不在虚拟,可以像国家发行的货币一样流通。在我们国家截止到今年11月2全国哪个地方最会做电商?四川排第8,浙江排第6,山东排第4全国哪个地方最懂电商?四川排第8,浙江排第6,山东位居第42021年,中国统计年鉴公布了各地区企业信息化及电子商务相关数据。过去一年里,全国的信息化及电子商务企业共计112。5万个无现金化有隐藏的风险吗?为何感觉发达国家都不用支付宝和微信支付?他们的信条就是自由,他们怀疑电子货币会泄露资产和行动隐私,所以多数人不用。为了所谓自由,性命和爱情都不会要的,这次疫情又因此灭了一批人。这就是弯道超车,中国在现金支付方面己领先于西Java基础06java方法使用目录1。方法的定义调用1。1无参方法1。2有参方法1。3有返回值方法1。4方法的调用1。5形参和实参2。方法重载3。方法的参数传递4。程序中的关键字方法是将独立的代码块组织成一个成如何租用香港免备案服务器?大家知道租用的大陆主机空间基本上是要进行网站备案的,以防止有人在网上从事非法的网站经营活动,打击不良互联网信息的传播。主机备案是向国家工信部提交审核的,但香港的主机空间和服务器是不你认为小米最失败的是哪款手机?是小米MIX4吗?文小伊评科技小米MIX4最失败?当然不是。虽然MIX4的降价幅度比较大,从初上市的4999元一路雪崩到了3000来块钱左右,但是说他是最失败的产品肯定是不对的,因为MIX4的销量还