如何使用Java JedisCluster通过单命令设置带过期时间的键值对?
解决JedisCluster单条命令设置带过期时间的键值对
你找对方法啦!JedisCluster提供的那个多参数set接口,刚好对应Redis原生的SET key value [NX|XX] [EX seconds|PX milliseconds]命令,完全能实现单条命令设置键值对+过期时间的需求,不用再分两次请求浪费网络开销。
直接用这段代码就能搞定:
getJedisCluster().set(key, value, null, "EX", 3600);
我给你拆解下每个参数的作用:
- 前两个
key和value:就是你要存储的键和对应的值,这个不用多说 nxxx:用来设置执行条件,可选值是"NX"(仅当键不存在时才设置)或"XX"(仅当键存在时才更新)。如果不需要任何条件判断,直接传null或者空字符串就行,对应原生命令里不带NX/XX的普通设置场景expx:指定过期时间的单位,"EX"代表秒,"PX"代表毫秒。你要1小时过期,用"EX"就对了time:具体的过期时长数值,这里就是3600秒(1小时)
这么做除了减少一次网络往返,还能避免分开执行set和expire时可能出现的竞态问题——比如刚执行完set还没来得及expire,这个键就被其他操作意外修改了,单条命令能保证整个操作的原子性。
如果之后你有特殊需求,比如要确保只有键不存在时才设置并添加过期,只需要把第三个参数改成"NX":
getJedisCluster().set(key, value, "NX", "EX", 3600);
内容的提问来源于stack exchange,提问作者JaskeyLam
相关产品推荐
相关产品推荐

