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

购物网站开发问题域分析app开发教程

购物网站开发问题域分析,app开发教程,服装鞋帽商城网站建设,域名过期的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.mmbaike.com/news/101676.html

相关文章:

  • 郑州网站建设 郑州网站设计双桥seo排名优化培训
  • 网站开发与设计岗位职责app投放渠道有哪些
  • 如何将项目发布到网上百度首页排名优化多少钱
  • .net 网站管理系统嘉兴百度seo
  • 9夜夜做新郎网站app推广平台放单平台
  • 个人发布房源的网站陕西网站建设制作
  • 成都网站建设桔子东莞网站营销
  • 学校网站建设的软件环境在线培训系统平台
  • 做网站数据需要的软件百度一下你就知道搜索引擎
  • 工业和信息化部人才交流中心seo薪酬
  • 网站建设排名优化公司关键词有几种类型
  • 网络销售主要做些什么seo优化服务价格
  • 网站开发软件怎么做保定网站建设报价
  • 建设银行官方网站广州山东最新消息今天
  • 免费网站建设报价合肥seo按天收费
  • 聊城做网站的公司平台网络营销推广方式包括哪些
  • 网站开发核心技术网络推广计划书范文
  • 网站建设公司经营营业推广策略有哪些
  • 高端网站开发设计品牌营销案例
  • 做的网站图片不显示国际网站平台有哪些
  • 哈尔滨网站制作哪家好windows优化大师的优点
  • 甘肃网站空间免费二级域名申请网站
  • 建站哪家好就要用兴田德润今日国内新闻最新消息大事
  • 国外企业网站模板windows优化大师会员
  • 大型网站搜索怎么做的茶叶seo网站推广与优化方案
  • wordpress怎么加站点图标牡丹江网站seo
  • 风向 网站福州网络推广运营
  • 用win2003做网站广告投放的方式有哪些
  • 微股东微网站制作平台站外推广渠道
  • 怎么用织梦做网站后台营销传播