Redis 学习笔记

所有文章
安装和启动 set 、get、ttl、expire、persist 命令 Redis 锁 使用 Redis 实现分布式限流 Lua 脚本的使用 数据持久化对过期时间的影响 时钟跳跃对过期时间的影响 如何保证只 incr 存在的key ? Redis 支持原子性吗? Redis 6 中的多线程是什么? Redis 哈希类型(Hash)

Redis : 如何保证只 incr 存在的key ?


使用 incr 指令时,若 key 不存在,则会初始化该 key,并将 value 置为 1 。

如何保证只 incr 存在的key ? 答案是用 lua 脚本。

脚本:

local exists = redis.call('exists', KEYS[1]); 
if (exists == 1) then 
    return redis.call('incr', KEYS[1]); 
end 
return nil;

测试示例1:

127.0.0.1:6379> set test_key 10
OK
127.0.0.1:6379> eval "local exists = redis.call('exists', KEYS[1]); if (exists == 1) then return redis.call('incr', KEYS[1]); end return nil;" 1 test_key
(integer) 11

脚本返回了 11 ,说明 incr 生效了。

测试示例2:

127.0.0.1:6379> eval "local exists = redis.call('exists', KEYS[1]); if (exists == 1) then return redis.call('incr', KEYS[1]); end return nil;" 1 test_key_not_exists
(nil)

脚本返回了 nil,说明未进行 incr 操作。


( 本文完 )

文章目录