提交lua限流

This commit is contained in:
qiurunze 2018-12-20 19:59:15 +08:00
parent 7bc644a647
commit ed68ca4b99
2 changed files with 13 additions and 0 deletions

View File

@ -64,6 +64,7 @@
| 022 |mysql主从复制思路及实操未更新代码 |[解决思路](/docs/mysql-master-slave.md) |
| 023 |如何进行分库分表 |[解决思路](/docs/mysql-master-slave.md) |
| 024 |秒杀类似场景sql的写法注意事项有哪些|[解决思路](/docs/mysql-master-slave.md) |
| 025 |如何利用lua脚本进行原子性 -- 操作限流?|[解决思路](/docs/mysql-master-slave.md) |
#### [分布式系统发展历程(已更新)](/docs/fenbushi.md)
#### [分布式系统](/docs/redis-code.md)

View File

@ -119,6 +119,18 @@
1. 减少网络开销在Lua脚本中可以把多个命令放在同一个脚本中运行
2. 原子操作redis会将整个脚本作为一个整体执行中间不会被其他命令插入。换句话说编写脚本的过程中无需担心会出现竞态条件
3. 复用性客户端发送的脚本会永远存储在redis中这意味着其他客户端可以复用这一脚本来完成同样的逻辑
例子: 利用lua脚本进行电话号或则IP限流
KEYS[1] ARGV[1] ARGV[2] key 参数1 参数2
local num=redis.call('incr',KEYS[1])
if tonumber(num)==1 then
redis.call('expire',KEYS[1],ARGV[1])
return 1
elseif tonumber(num)>tonumber(ARGV[2]) then
return 0
else
return 1
end