作者热门文章
- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章redis setIfAbsent和setnx的区别与使用说明由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
如果为空就set值,并返回1 。
如果存在(不为空)不进行操作,并返回0 。
setIfAbsent 是java中的方法 。
setnx 是 redis命令中的方法 。
1
2
3
4
5
6
|
redis> SETNX testkey
"test"
(integer)
1
redis> SETNX testkey
"test"
(integer)
0
redis> GET testkey
"test"
|
1
2
3
4
5
6
|
redis> SETNX testkey
"test"
(integer)
1
redis> SETNX testkey
"test"
(integer)
0
redis> GET testkey
"test"
|
1. redisTemplate.setIfAbsent 。
2. redisTemplate.expire 。
这样的不是原子性的 可能在第一步与第二步之间 重新发布了或者服务器重启了 这个key就永远不会消失了 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
static
boolean
setIfAbsent(
final
String key,
final
Serializable value,
final
long
exptime) {
Boolean b = (Boolean) redisTemplate.execute(
new
RedisCallback<Boolean>() {
@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
;
}
});
return
b;
}
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/enthan809882/article/details/107783440 。
最后此篇关于redis setIfAbsent和setnx的区别与使用说明的文章就讲到这里了,如果你想了解更多关于redis setIfAbsent和setnx的区别与使用说明的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用Memcached(使用spymemcached作为客户端)来缓存从远程服务器收到的响应。我的程序的逻辑很简单: 如果请求的资源缓存在Memcached中,则立即返回缓存; 如果没有,则连接
我是一名优秀的程序员,十分优秀!