forked from bsm/redislock
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathluaScript.go
More file actions
68 lines (57 loc) · 1.14 KB
/
luaScript.go
File metadata and controls
68 lines (57 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package redislock
import "github.com/redis/go-redis/v9"
var (
luaReleaseMultiple = redis.NewScript(`
local num_key = table.getn(KEYS)
local res
for i = 1, num_key do
if redis.call("get", KEYS[i]) == ARGV[1] then
res = redis.call("del", KEYS[i])
else
return 0
end
end
return res
`)
luaSetMultiple = redis.NewScript(`
local num_key = table.getn(KEYS)
local res
local failed
for i = 1, num_key do
if not redis.call('set', KEYS[i], ARGV[1], 'px', ARGV[2], 'nx') then
res = i-1
failed = 1
break
end
end
if failed == 1 then
for i = 1, res do
redis.call('del',KEYS[i])
end
return 0
end
return 1
`)
luaRefreshMultiple = redis.NewScript(`
local num_key = table.getn(KEYS)
local res
for i = 1, num_key do
if redis.call("get", KEYS[i]) == ARGV[1] then
res = redis.call("pexpire", KEYS[1], ARGV[2])
else
return 0
end
end
return res
`)
luaPTTLMultiple = redis.NewScript(`
local num_key = table.getn(KEYS)
for i = 1, num_key do
if redis.call("get", KEYS[i]) == ARGV[1] then
return redis.call("pttl", KEYS[1])
else
return -3
end
end
`)
)