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

购物网站开发问题域分析网站制作软件

购物网站开发问题域分析,网站制作软件,燕郊做网站公司,wordpress 收邮件什么是lua脚本? lua语言是一个轻量级的脚本语言,可以嵌入其他语言中使用,调用宿主语言的功能。lua语法简单,小巧,源码一共才200多K,本身不会有太强的功能,很多的语言也支持lua语言,…

什么是lua脚本?

lua语言是一个轻量级的脚本语言,可以嵌入其他语言中使用,调用宿主语言的功能。lua语法简单,小巧,源码一共才200多K,本身不会有太强的功能,很多的语言也支持lua语言,比如redis、Nginx

redis语言中完美嵌入了lua脚本功能,redis可以调用lua脚本中的api,lua脚本也可以调用redis中的命令

redis调用lua脚本

在redis中调用lua脚本,需要使用eval指令

127.0.0.1:6379>eval "return 'hello'" 0
"hello"

调用lua脚本,动态传入参数,其中表达式script后面第一个参数nkey表示key的对应位置,后面的表示key和对应的参数argv

# script脚本后面,第一个参数1表示key为其后的第一个参数,也就是1,如何key后面的参数都是ARGV
127.0.0.1:6379>eval "if KEYS[1]=='1' then return ARGV[1] end return ARGV[2]" 1 1 'hello' 'hi'
"hello"
127.0.0.1:6379>eval "if KEYS[1]=='1' then return ARGV[1] end return ARGV[2]" 1 1 'hello' 'hi'
"hi"

lua脚本调用redis命令

使用lua调用redis的命令,需要使用redis.call调用

# key为0表示能获取到锁
127.0.0.1:6379>eval "local key = redis.call('exists',KEYS[1]) if key==0 then return redis.call('set',KEYS[1],ARGV[1]) end return 1" 1 orderId01 1

写个lua脚本,来实现一个简单的分布锁锁

private static final String LOCK_LUA_SCRIPT = "local lockParam = redis.call('exists', KEYS[1])\n" +"if lockParam == 0 then\n" +"redis.call('set', KEYS[1], ARGV[1])\n" +"redis.call('expire', KEYS[1], ARGV[2])\n" +"end\n" +"return lockParam\n";

简单实现抢单的业务

  @Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testLua() {Long orderId = IdUtil.getSnowflake().nextId();String lockKey = "order:"+orderId;String requestId = IdUtil.randomUUID();try {Long lock = (Long) redisTemplate.execute(RedisScript.of(LOCK_LUA_SCRIPT, Long.class), Arrays.asList(lockKey), requestId, 30);// 抢得到锁if (lock == 0) {// 模拟业务执行10sTimeUnit.MILLISECONDS.sleep(10*1000);}log.info("lock:[{}]", lock);} catch (Exception e) {testRelease(lockKey, requestId);} finally {testRelease(lockKey, requestId);}}

锁释放的,也通过lua脚本实现,主要是保证原子性

 private String UNLOCK_LUA_SCRIPT = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";@Test
public void testRelease(String lockKey, String lockValue) {redisTemplate.execute(RedisScript.of(UNLOCK_LUA_SCRIPT, Long.class), Arrays.asList(lockKey), lockValue);
}

Lua脚本使用场景

  • 保证原子性地执行多个命令
  • 需要返回中间值组合编排后面的命令
http://www.tj-hxxt.cn/news/23569.html

相关文章:

  • 上海圣品科技 做网站如何在百度发布文章
  • 网站开发工作容易出现的失误seo是什么岗位的缩写
  • 漯河做网站的软件培训
  • 为网站做外链的方式广州王牌seo
  • wordpress 菜单按钮seo网站推广助理
  • 个体户 做网站外链发布网站
  • 做网站大图片国内外搜索引擎大全
  • 做软件常用的网站如何做好品牌推广工作
  • 网站建设中国十强新手怎么入行sem
  • 校际凡科平台兰州网络推广优化服务
  • 哈尔滨网站建设制作seo推广外包报价表
  • 潍坊网站制作厂家百度电脑端网页版入口
  • 个人信息网站建设的心得体会今日财经新闻
  • 企业做淘宝客网站有哪些百度推广全国代理商排名
  • 佛山网站建设网站制作公司大数据技术主要学什么
  • 公司建立网站的作用有常见的推广平台有哪些
  • 网站规划与建设课设报告产品推广软文300字
  • 郑州做网站的专业公司有哪些淄博网站推广
  • 漫画门户网站怎么做的可以发广告的100个网站
  • 龙华三网合一网站建设网站seo优化报告
  • 做网站学多长时间可以学会品牌运营管理有限公司
  • 英文seo是什么意思广州seo运营
  • 有了域名怎样做网站关键词指数查询工具
  • 邢台住房和城乡建设部网站淘宝宝贝关键词排名查询工具
  • 网站制作三站优化营商环境 提升服务效能
  • 电子计算机哪个专业最吃香手机系统优化工具
  • 石英石台面做网单有什么网站广告优化师适合女生吗
  • 电脑硬盘做网站服务器教程怎么网站排名seo
  • 临淄信息网招聘小红书seo优化
  • 制作宣传片拍摄公司长春seo网站优化