CacheSource增加setnx、hsetnx系列方法

This commit is contained in:
Redkale
2022-12-21 16:33:44 +08:00
parent f327378d18
commit d3236f57d2
2 changed files with 169 additions and 4 deletions

View File

@@ -245,6 +245,31 @@ public final class CacheMemorySource extends AbstractCacheSource {
hset(CacheEntryType.MAP, key, field, value);
}
@Override
public <T> void hsetnx(final String key, final String field, final Convert convert, final T value) {
hsetnx(CacheEntryType.MAP, key, field, value);
}
@Override
public <T> void hsetnx(final String key, final String field, final Type type, final T value) {
hsetnx(CacheEntryType.MAP, key, field, value);
}
@Override
public <T> void hsetnx(final String key, final String field, final Convert convert, final Type type, final T value) {
hsetnx(CacheEntryType.MAP, key, field, value);
}
@Override
public void hsetnxString(final String key, final String field, final String value) {
hsetnx(CacheEntryType.MAP, key, field, value);
}
@Override
public void hsetnxLong(final String key, final String field, final long value) {
hsetnx(CacheEntryType.MAP, key, field, value);
}
@Override
public void hmset(final String key, final Serializable... values) {
for (int i = 0; i < values.length; i += 2) {
@@ -426,6 +451,31 @@ public final class CacheMemorySource extends AbstractCacheSource {
return CompletableFuture.runAsync(() -> hsetLong(key, field, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public <T> CompletableFuture<Void> hsetnxAsync(final String key, final String field, final Convert convert, final T value) {
return CompletableFuture.runAsync(() -> hsetnx(key, field, convert, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public <T> CompletableFuture<Void> hsetnxAsync(final String key, final String field, final Type type, final T value) {
return CompletableFuture.runAsync(() -> hsetnx(key, field, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public <T> CompletableFuture<Void> hsetnxAsync(final String key, final String field, final Convert convert, final Type type, final T value) {
return CompletableFuture.runAsync(() -> hsetnx(key, field, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<Void> hsetnxStringAsync(final String key, final String field, final String value) {
return CompletableFuture.runAsync(() -> hsetnxString(key, field, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<Void> hsetnxLongAsync(final String key, final String field, final long value) {
return CompletableFuture.runAsync(() -> hsetnxLong(key, field, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<Void> hmsetAsync(final String key, final Serializable... values) {
return CompletableFuture.runAsync(() -> hmset(key, values), getExecutor()).whenComplete(futureCompleteConsumer);
@@ -550,7 +600,7 @@ public final class CacheMemorySource extends AbstractCacheSource {
CacheEntry entry = container.get(key);
if (entry == null) {
entry = new CacheEntry(cacheType, key, value, null, null, null);
container.putIfAbsent(key, entry);
container.put(key, entry);
} else {
entry.expireSeconds = 0;
entry.objectValue = value;
@@ -558,12 +608,24 @@ public final class CacheMemorySource extends AbstractCacheSource {
}
}
protected void setnx(CacheEntryType cacheType, String key, Object value) {
if (key == null) return;
CacheEntry entry = container.get(key);
if (entry == null) {
entry = new CacheEntry(cacheType, key, value, null, null, null);
container.putIfAbsent(key, entry);
} else {
entry.expireSeconds = 0;
entry.lastAccessed = (int) (System.currentTimeMillis() / 1000);
}
}
protected void hset(CacheEntryType cacheType, String key, String field, Object value) {
if (key == null) return;
CacheEntry entry = container.get(key);
if (entry == null) {
entry = new CacheEntry(CacheEntryType.MAP, key, value, null, null, new ConcurrentHashMap<>());
container.putIfAbsent(key, entry);
container.put(key, entry);
entry.mapValue.put(field, value);
} else {
entry.expireSeconds = 0;
@@ -572,6 +634,19 @@ public final class CacheMemorySource extends AbstractCacheSource {
}
}
protected void hsetnx(CacheEntryType cacheType, String key, String field, Object value) {
if (key == null) return;
CacheEntry entry = container.get(key);
if (entry == null) {
entry = new CacheEntry(CacheEntryType.MAP, key, value, null, null, new ConcurrentHashMap<>());
container.putIfAbsent(key, entry);
entry.mapValue.putIfAbsent(field, value);
} else {
entry.expireSeconds = 0;
entry.lastAccessed = (int) (System.currentTimeMillis() / 1000);
}
}
@Override
public <T> void set(String key, Convert convert, T value) {
set(CacheEntryType.OBJECT, key, value);
@@ -587,6 +662,21 @@ public final class CacheMemorySource extends AbstractCacheSource {
set(CacheEntryType.OBJECT, key, value);
}
@Override
public <T> void setnx(String key, Convert convert, T value) {
setnx(CacheEntryType.OBJECT, key, value);
}
@Override
public <T> void setnx(String key, Type type, T value) {
setnx(CacheEntryType.OBJECT, key, value);
}
@Override
public <T> void setnx(String key, Convert convert, Type type, T value) {
setnx(CacheEntryType.OBJECT, key, value);
}
@Override
public <T> T getSet(String key, Type type, T value) {
T old = get(key, type);
@@ -606,11 +696,21 @@ public final class CacheMemorySource extends AbstractCacheSource {
set(CacheEntryType.STRING, key, value);
}
@Override
public void setnxString(String key, String value) {
setnx(CacheEntryType.STRING, key, value);
}
@Override
public void setLong(String key, long value) {
set(CacheEntryType.LONG, key, value);
}
@Override
public void setnxLong(String key, long value) {
setnx(CacheEntryType.LONG, key, value);
}
@Override
public <T> CompletableFuture<Void> setAsync(String key, Convert convert, T value) {
return CompletableFuture.runAsync(() -> set(key, convert, value), getExecutor()).whenComplete(futureCompleteConsumer);
@@ -626,6 +726,21 @@ public final class CacheMemorySource extends AbstractCacheSource {
return CompletableFuture.runAsync(() -> set(key, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public <T> CompletableFuture<Void> setnxAsync(String key, Convert convert, T value) {
return CompletableFuture.runAsync(() -> setnx(key, convert, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public <T> CompletableFuture<Void> setnxAsync(String key, Type type, T value) {
return CompletableFuture.runAsync(() -> setnx(key, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public <T> CompletableFuture<Void> setnxAsync(String key, Convert convert, Type type, T value) {
return CompletableFuture.runAsync(() -> setnx(key, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public <T> CompletableFuture<T> getSetAsync(String key, Type type, T value) {
return CompletableFuture.runAsync(() -> getSet(key, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
@@ -641,6 +756,11 @@ public final class CacheMemorySource extends AbstractCacheSource {
return CompletableFuture.runAsync(() -> setString(key, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<Void> setnxStringAsync(String key, String value) {
return CompletableFuture.runAsync(() -> setnxString(key, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<String> getSetStringAsync(String key, String value) {
return CompletableFuture.runAsync(() -> getSetString(key, value), getExecutor()).whenComplete(futureCompleteConsumer);
@@ -651,6 +771,11 @@ public final class CacheMemorySource extends AbstractCacheSource {
return CompletableFuture.runAsync(() -> setLong(key, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<Void> setnxLongAsync(String key, long value) {
return CompletableFuture.runAsync(() -> setnxLong(key, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
protected void set(CacheEntryType cacheType, int expireSeconds, String key, Object value) {
if (key == null) return;
CacheEntry entry = container.get(key);

View File

@@ -8,8 +8,8 @@ package org.redkale.source;
import java.io.Serializable;
import java.lang.reflect.Type;
import java.util.*;
import java.util.concurrent.*;
import org.redkale.convert.*;
import java.util.concurrent.CompletableFuture;
import org.redkale.convert.Convert;
import org.redkale.util.Resourcable;
/**
@@ -67,6 +67,16 @@ public interface CacheSource extends Resourcable {
public void hsetLong(final String key, final String field, final long value);
public <T> void hsetnx(final String key, final String field, final Convert convert, final T value);
public <T> void hsetnx(final String key, final String field, final Type type, final T value);
public <T> void hsetnx(final String key, final String field, final Convert convert, final Type type, final T value);
public void hsetnxString(final String key, final String field, final String value);
public void hsetnxLong(final String key, final String field, final long value);
public void hmset(final String key, final Serializable... values);
public <T> List<T> hmget(final String key, final Type type, final String... fields);
@@ -90,6 +100,12 @@ public interface CacheSource extends Resourcable {
public <T> void set(final String key, final Convert convert, final Type type, final T value);
public <T> void setnx(final String key, final Convert convert, final T value);
public <T> void setnx(final String key, final Type type, final T value);
public <T> void setnx(final String key, final Convert convert, final Type type, final T value);
public <T> T getSet(final String key, final Type type, final T value);
public <T> T getSet(final String key, final Convert convert, final Type type, final T value);
@@ -166,6 +182,8 @@ public interface CacheSource extends Resourcable {
public void setString(final String key, final String value);
public void setnxString(final String key, final String value);
public void setString(final int expireSeconds, final String key, final String value);
public Map<String, String> getStringMap(final String... keys);
@@ -200,6 +218,8 @@ public interface CacheSource extends Resourcable {
public void setLong(final String key, final long value);
public void setnxLong(final String key, final long value);
public void setLong(final int expireSeconds, final String key, final long value);
public Map<String, Long> getLongMap(final String... keys);
@@ -241,6 +261,12 @@ public interface CacheSource extends Resourcable {
public <T> CompletableFuture<Void> setAsync(final String key, final Convert convert, final Type type, final T value);
public <T> CompletableFuture<Void> setnxAsync(final String key, final Convert convert, final T value);
public <T> CompletableFuture<Void> setnxAsync(final String key, final Type type, final T value);
public <T> CompletableFuture<Void> setnxAsync(final String key, final Convert convert, final Type type, final T value);
public <T> CompletableFuture<T> getSetAsync(final String key, final Type type, final T value);
public <T> CompletableFuture<T> getSetAsync(final String key, final Convert convert, final Type type, final T value);
@@ -290,6 +316,16 @@ public interface CacheSource extends Resourcable {
public CompletableFuture<Void> hsetLongAsync(final String key, final String field, final long value);
public <T> CompletableFuture<Void> hsetnxAsync(final String key, final String field, final Convert convert, final T value);
public <T> CompletableFuture<Void> hsetnxAsync(final String key, final String field, final Type type, final T value);
public <T> CompletableFuture<Void> hsetnxAsync(final String key, final String field, final Convert convert, final Type type, final T value);
public CompletableFuture<Void> hsetnxStringAsync(final String key, final String field, final String value);
public CompletableFuture<Void> hsetnxLongAsync(final String key, final String field, final long value);
public CompletableFuture<Void> hmsetAsync(final String key, final Serializable... values);
public <T> CompletableFuture<List<T>> hmgetAsync(final String key, final Type type, final String... fields);
@@ -359,6 +395,8 @@ public interface CacheSource extends Resourcable {
public CompletableFuture<Void> setStringAsync(final String key, final String value);
public CompletableFuture<Void> setnxStringAsync(final String key, final String value);
public CompletableFuture<Void> setStringAsync(final int expireSeconds, final String key, final String value);
public CompletableFuture<Map<String, String>> getStringMapAsync(final String... keys);
@@ -393,6 +431,8 @@ public interface CacheSource extends Resourcable {
public CompletableFuture<Void> setLongAsync(final String key, long value);
public CompletableFuture<Void> setnxLongAsync(final String key, long value);
public CompletableFuture<Void> setLongAsync(final int expireSeconds, final String key, final long value);
public CompletableFuture<Map<String, Long>> getLongMapAsync(final String... keys);