概念
setnx是「SET if Not eXists」的縮寫,只有不存在的時候才設置,可以利用它來實現鎖的效果。
SETNX key value
若給定的 key 已經存在,則 SETNX 不做任何動作。
SET命令
SET命令可用選項的基本語法
SET KEY VALUE [EX seconds] [PX milliseconds] [NX|XX]
EX
到期時間(以秒為單位)
PX
到期時間(以毫秒為單位)
NX
僅在鍵不存在時設置鍵
XX
只有在鍵已存在時才設置
示例
SET mykey “redis” EX 60 NX
在鍵“mykey”不存在時,設置鍵的值為“redis”,到期時間為60秒。
使用redisTemplate操作SetNx
@Override
public boolean setNx(String key,String value, long time) {
try {
RedisCallback<String> callback = (connection) -> {
JedisCommands commands = (JedisCommands) connection.getNativeConnection();
return commands.set(key, value, "NX", "PX", time);
};
String result = redisTemplate.execute(callback);
return !StringUtils.isEmpty(result);
} catch (Exception e) {
logger.error("set redis occured an exception", e);
}
return false;
}