go-redis 自增,如果key不存在,从10000开始自增,如果key存在,自增后返回结果,使用lua脚本
时间: 2024-03-08 11:49:28 浏览: 57
可以使用以下Lua脚本实现:
```
local current = tonumber(redis.call('get', KEYS[1]))
if current == nil then
current = 10000
end
current = current + tonumber(ARGV[1])
redis.call('set', KEYS[1], current)
return current
```
这个脚本首先尝试获取指定键的值。如果该键不存在,则将当前值设置为10000,否则将其转换为数字并加上传递给脚本的参数。最后,脚本将新的值设置回键中,并返回该值。您可以在Go中使用以下代码调用这个脚本:
```
script := redis.NewScript(`
local current = tonumber(redis.call('get', KEYS[1]))
if current == nil then
current = 10000
end
current = current + tonumber(ARGV[1])
redis.call('set', KEYS[1], current)
return current
`)
newVal, err := script.Run(ctx, redisClient, []string{"mykey"}, 1).Result()
if err != nil {
// 处理错误
}
fmt.Println(newVal.(int64))
```
在这个例子中,我们使用Go Redis客户端的`NewScript`方法创建了一个新的Lua脚本。然后,我们调用`Run`方法来执行脚本,并传递Redis客户端、键和自增量作为参数。最后,我们将结果转换为int64类型并打印出来。
阅读全文