Redis 字符串(String)
String 的设值、计数、批量与位操作。
Key PointsString 不只是字符串:能存整数做原子自增,是计数器和分布式锁的主力。
基础读写
Shell
SET views 0
INCR views # 原子 +1,返回 1
INCRBY views 10 # +10,返回 11
GET views
APPEND views "x" # 追加字符串
STRLEN viewsOutput
(integer) 1
(integer) 11
"11x"
(integer) 3SETNX 与分布式锁
Shell
# 仅当不存在才设值:抢锁成功返回 1,失败返回 0
SETNX lock:order "1"
EXPIRE lock:order 30
# 更推荐的原子写法(设值 + 过期一步完成)
SET lock:order "1" NX EX 30Output
(integer) 1For locks,
SET key val NX EX 30 makes 'acquire + expire' atomic, avoiding a crash after acquire but before expiry leaving a stuck lock. Release with a Lua script that checks ownership, not a plain DEL.基础读写
Shell
SET views 0
INCR views # 原子 +1,返回 1
INCRBY views 10 # +10,返回 11
GET views
APPEND views "x" # 追加字符串
STRLEN viewsOutput
(integer) 1
(integer) 11
"11x"
(integer) 3SETNX 与分布式锁
Shell
# 仅当不存在才设值:抢锁成功返回 1,失败返回 0
SETNX lock:order "1"
EXPIRE lock:order 30
# 更推荐的原子写法(设值 + 过期一步完成)
SET lock:order "1" NX EX 30Output
(integer) 1用 String 做锁时,
SET key val NX EX 30 把「抢锁 + 设过期」合成原子操作,避免「抢到锁后还没设过期就崩溃」导致锁永远不释放。释放锁要用 Lua 脚本校验持有者,别直接 DEL。