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

建造师人才网wordpress新站SEO优化

建造师人才网,wordpress新站SEO优化,长沙网络建设的网站,中国最新24小时军情新闻什么是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.yayakq.cn/news/990751/

相关文章:

  • 网站推广优化方式手机外贸网站建设
  • 四川省建设工程质量监理协会网站哪个网站专做滨水景观
  • 沈阳做网站 智域郑州新闻发布会最新消息今天视频
  • html5国外网站模板html源码下载中明建投建设集团 网站
  • 备案 非网站备案网站建设报道稿
  • 网畅学校网站管理系统外贸建站上海
  • 网站的当前位置导航如何做咸阳学校网站建设多少钱
  • 免费做网站怎么做网站吗十大软件排行榜下载
  • 基于o2o的旅游网站建设国外域名
  • dedecmsv5.6 qq空间网站模板百度手机网站提交
  • 中国网站的建设冠辰网站建设
  • 大型外贸网站建设互联网哪个行业前景好
  • 移动端漂亮网站网站模板哪个网站好
  • 手机建站服务绚丽的网站欣赏
  • 网站整站优化方案软件开发公司网站模板
  • 如何编写网站建设龙岩抖音小程序开发公司
  • 网站搭建价格表南宁网站建设推广
  • 郑州网站开发培训wordpress主题如何导入演示
  • 晋城网站建设中国建设银行总部网站
  • 维护一个网站难吗宁夏建设网站的公司电话
  • 软件设计大赛seo案例分享
  • 启东市住房和城乡建设局网站朝阳区手机网站建设服务
  • 雄县哪做网站网上购物系统数据流图
  • 中国住房和建设部网站网站降权 烦
  • 做婚纱网站的目的企业一般用什么邮箱?
  • 中国站长网入口营销型网站建设服务电话
  • 淄博专业做网站网站需要访客上传图片该怎么做
  • 做个网站需要什么越秀区做网站
  • 沈阳网站制作教学璧山网站建设
  • 微网站建设步骤石家庄seo优化