redis setIfAbsent和setnx的区别与使用说明

网友投稿 1076 2022-12-21

redis setIfAbsent和setnx的区别与使用说明

redis setIfAbsent和setnx的区别与使用说明

redis setIfAbsent和setnx的区别与使用

如果为空就set值,并返回1

如果存在(不为空)不进行操作,并返回0

setIfAbsent 和 setnx 使用范围

setIfAbsent 是java中的方法

setnx 是 redis命令中的方法

setnx 例子

redis> SETNX testkey "test"

(integer) 1

redis> SETNX testkey "test"

(integer) 0

redis> GET testkey

"test"

setIfAbsent 例子

redis> SETNX testkey "test"

(integer) 1

redis> SETNX testkey "test"

(integer) 0

redis> GET testkey

"test"

RedisTemplate 实现 setnx exptime (扩展 redisTemplate.setIfAbsent)

之前用 reFKaFFmNocBdisTemplate 实现setnx exptime 时 是分两步的

1. redisTemplate.setIfAbsent

2. redisTemplate.expire

这样的不是原子性的 可能在第一步与第二步之间 重新发布了或者服务器重启了 这个key就永远不会消失了

可以采用以下的方法

public static boolean setIfAbsent(final String key, final Serializable value, final long exptime) {

Boolean b = (Boolean) redisTemplate.execute(new RedisCallback() {

@Override

public Boolean doInRedis(RedisConnection connection) throws DataAccessException {

RedisSerializer valueSerializer = redisTemplate.getValueSerializer();

RedisSerializer keySerializer = redisTemplate.getKeySerializer();

Object obj = connection.execute("set", keySerializer.serialize(key),

valueSerializer.serialize(value),

SafeEncoder.encode("NX"),

SafeEncoder.encode("EX"),

Protocol.toByteArray(exptime));

return obj != null;

}

});

http:// return b;

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:车载应用宝(车载应用宝hd)
下一篇:商城软件app开发(商城软件app开发流程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~