✅Redis中的setnx和setex有啥区别?
典型回答
这个其实只要知道了他们是什么东西的缩写就容易回答了。
SETNX ,SET if Not eXists , 只有键不存在时才设置值
- 不能设置过期时间
SETEX , SET with EXpiration, 设置值并指定过期时间
- 无条件进行设置,并带有过期时间
SETNX 示例:
SETNX holliskey "hello"- 如果
holliskey不存在,就设置为"hello",**返回 ****1** - 如果
holliskey已存在,不做修改,**返回 ****0**
SETEX 示例:
SETEX holliskey 60 "hello"- **无论
**holliskey**是否存在,都会设置为 ****"hello"** - 并设置过期时间为 60 秒(TTL)
在使用场景上,setnx常用于分布式锁的实现,或者幂等处理上面。而setex常用于缓存的过期控制上面。
扩展知识
只在键不存在时设置,并设置过期时间
前面提到了,SETNX是不能设置超时时间的,那么想要实现“只在键不存在时设置,并设置过期时间 ”需要通过EXPIRE命令来配合才行,即:
SETNX hollis_key "666"
EXPIRE hollis_key 10但是这样做就不是原子命令了,需要配合事务或者lua脚本才行。
或者直接使用SET命令也能实现:
SET hollis_key "666" NX EX 10