CacheSource增加msetnx接口
This commit is contained in:
@@ -25,7 +25,6 @@ import org.redkale.convert.json.*;
|
|||||||
import org.redkale.inject.ResourceEvent;
|
import org.redkale.inject.ResourceEvent;
|
||||||
import org.redkale.service.Local;
|
import org.redkale.service.Local;
|
||||||
import org.redkale.util.*;
|
import org.redkale.util.*;
|
||||||
import org.redkale.annotation.ResourceChanged;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CacheSource的默认实现--内存缓存
|
* CacheSource的默认实现--内存缓存
|
||||||
@@ -300,21 +299,31 @@ public final class CacheMemorySource extends AbstractCacheSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<Void> msetAsync(Serializable... keyVals) {
|
|
||||||
return runFuture(() -> mset(keyVals));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mset(Map map) {
|
public void mset(Map map) {
|
||||||
map.forEach((key, val) -> set0(key.toString(), 0, null, null, val));
|
map.forEach((key, val) -> set0(key.toString(), 0, null, null, val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<Void> msetAsync(Serializable... keyVals) {
|
||||||
|
return runFuture(() -> mset(keyVals));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<Void> msetnxAsync(Serializable... keyVals) {
|
||||||
|
return runFuture(() -> msetnx(keyVals));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Void> msetAsync(Map map) {
|
public CompletableFuture<Void> msetAsync(Map map) {
|
||||||
return runFuture(() -> mset(map));
|
return runFuture(() -> mset(map));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<Void> msetnxAsync(Map map) {
|
||||||
|
return runFuture(() -> msetnx(map));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> void set(String key, Convert convert, Type type, T value) {
|
public <T> void set(String key, Convert convert, Type type, T value) {
|
||||||
set0(key, 0, convert, type, value);
|
set0(key, 0, convert, type, value);
|
||||||
@@ -420,6 +429,34 @@ public final class CacheMemorySource extends AbstractCacheSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void msetnx(Serializable... keyVals) {
|
||||||
|
if (keyVals.length % 2 != 0) {
|
||||||
|
throw new SourceException("key value must be paired");
|
||||||
|
}
|
||||||
|
msetnx(Utility.ofMap(keyVals));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void msetnx(Map map) {
|
||||||
|
containerLock.lock();
|
||||||
|
try {
|
||||||
|
for (Object key : map.keySet()) {
|
||||||
|
if (find(key.toString(), CacheEntryType.OBJECT) != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, Object> en : (Set<Map.Entry<String, Object>>) map.entrySet()) {
|
||||||
|
CacheEntry entry = new CacheEntry(CacheEntryType.OBJECT, en.getKey());
|
||||||
|
container.put(en.getKey(), entry);
|
||||||
|
entry.setObjectValue(this.convert, null, en.getValue());
|
||||||
|
entry.lastAccessed = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
containerLock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> void setex(String key, int expireSeconds, Convert convert, Type type, T value) {
|
public <T> void setex(String key, int expireSeconds, Convert convert, Type type, T value) {
|
||||||
set0(key, expireSeconds, convert, type, value);
|
set0(key, expireSeconds, convert, type, value);
|
||||||
|
|||||||
@@ -171,6 +171,15 @@ public interface CacheSource extends Resourcable {
|
|||||||
msetAsync(map).join();
|
msetAsync(map).join();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//MSETNX key value [key value ...]
|
||||||
|
default void msetnx(Serializable... keyVals) {
|
||||||
|
msetnxAsync(keyVals).join();
|
||||||
|
}
|
||||||
|
|
||||||
|
default void msetnx(Map map) {
|
||||||
|
msetnxAsync(map).join();
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------ setnx ------------------------
|
//------------------------ setnx ------------------------
|
||||||
default <T> boolean setnx(String key, Convert convert, Type type, T value) {
|
default <T> boolean setnx(String key, Convert convert, Type type, T value) {
|
||||||
return setnxAsync(key, convert, type, value).join();
|
return setnxAsync(key, convert, type, value).join();
|
||||||
@@ -1057,6 +1066,11 @@ public interface CacheSource extends Resourcable {
|
|||||||
|
|
||||||
public CompletableFuture<Void> msetAsync(Map map);
|
public CompletableFuture<Void> msetAsync(Map map);
|
||||||
|
|
||||||
|
//MSET key value [key value ...]
|
||||||
|
public CompletableFuture<Void> msetnxAsync(Serializable... keyVals);
|
||||||
|
|
||||||
|
public CompletableFuture<Void> msetnxAsync(Map map);
|
||||||
|
|
||||||
//------------------------ setnx ------------------------
|
//------------------------ setnx ------------------------
|
||||||
public <T> CompletableFuture<Boolean> setnxAsync(String key, Convert convert, Type type, T value);
|
public <T> CompletableFuture<Boolean> setnxAsync(String key, Convert convert, Type type, T value);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user