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

WordPress 建电商网站今日新闻摘抄十条简短

WordPress 建电商网站,今日新闻摘抄十条简短,专业做家电经销的网站,上海建设和交通委网站文章目录 1、lua脚本入门1.1、变量:弱类型1.2、流程控制1.3、在lua中执行redis指令1.4、实战:先判断是否自己的锁,如果是才能删除 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脚本是有原子性:因为是通过一个指令执行的

[root@localhost ~]# 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 ...]

script:lua 脚本字符串
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 a=5 return a" 0
(integer) 5

1.2、流程控制

127.0.0.1:6379> eval "if 10>20 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
"40"
127.0.0.1:6379> eval "return {10,20,30,40}" 0
1) (integer) 10
2) (integer) 20
3) (integer) 30
4) (integer) 40
127.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) "70"

1.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
"333"
127.0.0.1:6379> eval "return redis.call('get','lock')" 0
"333"
127.0.0.1:6379> eval "return redis.call('set',KEYS[1],ARGV[1])" 1 lock 123
OK
127.0.0.1:6379> get lock
"123"

1.4、实战:先判断是否自己的锁,如果是才能删除

eval "if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end"
eval "if redis.call('get',KEYS[1]) == ARGV[1] 
then return redis.call('del',KEYS[1]) 
else return 0 
end"
127.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) 0

在这里插入图片描述

127.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) 1

在这里插入图片描述

2、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。

[root@localhost ~]# 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.sczhlp.com/news/38547/

相关文章:

  • 靠网络营销火起来的企业seo公司排名
  • 书店网站建设设计方案广州网站关键词推广
  • 网站开发与维护是什么网站推广软件费用是多少
  • 2017年做网站维护总结google国际版
  • 连云港北京网站建设百度推广关键词查询
  • 免费网站下载直播软件大全西安百度关键词包年
  • 广州网站运营十年乐云seo郑州网站推广哪家专业
  • 做家乡特产的网站企业网络推广方式
  • 可以网上做单的网站搜索引擎营销的成功案例
  • 用vs做网站怎么插入标签哪家网络推广好
  • 网站建站外包公司磁力岛引擎
  • 网站开发课程设计实验报告二级域名注册平台
  • 建设企业网站的规划手机网站关键词seo
  • 淘宝联盟推广可以做网站吗手机优化大师官方免费下载
  • wordpress最简易主题珠海百度seo
  • 网络营销论文2500字企业网站怎么优化
  • 网站上的链接怎么做的完善的seo网站
  • 网站建设茶店网什么是竞价
  • 域名如何指向网站网络营销推广工具
  • wordpress b2c 建站怎样建立自己网站
  • 金华永康义乌网站建设关键词推广优化app
  • 2017我们一起做网站企业seo外包公司
  • 网站建设幽默如何查询百度搜索关键词排名
  • 甘肃系统建站怎么用seo营销培训
  • 网站更新了域名如何找到网站制作价格
  • 成都建设网站做电商需要学哪些基础
  • 网站设计 布局推广信息哪个平台好
  • 盘锦微信网站建设广州百度竞价外包
  • 网站的滚动图片怎么做公司建设网站哪家好
  • 如何做交易网站秦皇岛seo排名