redis setIfAbsent和setnx的區(qū)別與使用說明
redis setIfAbsent和setnx的區(qū)別與使用
如果為空就set值,并返回1
如果存在(不為空)不進(jìn)行操作,并返回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 實現(xiàn) setnx exptime (擴(kuò)展 redisTemplate.setIfAbsent)
之前用 redisTemplate 實現(xiàn)setnx exptime 時 是分兩步的
1. redisTemplate.setIfAbsent
2. redisTemplate.expire
這樣的不是原子性的 可能在第一步與第二步之間 重新發(fā)布了或者服務(wù)器重啟了 這個key就永遠(yuǎn)不會消失了
可以采用以下的方法
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;
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring?bean標(biāo)簽中的init-method和destroy-method詳解
這篇文章主要介紹了spring?bean標(biāo)簽中的init-method和destroy-method,在很多項目中,經(jīng)常在xml配置文件中看到init-method 或者 destroy-method ,因此整理收集下,方便以后參考和學(xué)習(xí),需要的朋友可以參考下2023-04-04
JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑
這篇文章主要介紹了JVM性能調(diào)優(yōu)實戰(zhàn):讓你的IntelliJ Idea縱享絲滑的相關(guān)資料,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
java實現(xiàn)檢測Linux網(wǎng)絡(luò)狀態(tài)(附源碼)
實時監(jiān)控服務(wù)器網(wǎng)絡(luò)狀態(tài)是保證業(yè)務(wù)高可用性和可靠性的重要環(huán)節(jié),本文主要介紹了如何設(shè)計并實現(xiàn)一個高性能,可擴(kuò)展,支持事件訂閱與周期采樣的Linux?網(wǎng)絡(luò)狀態(tài)檢測工具,需要的可以了解下2025-06-06
SpringBoot配置SSL同時支持http和https訪問實現(xiàn)
本文主要介紹了SpringBoot配置SSL同時支持http和https訪問實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

