diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index 80094972d..d916e295c 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -156,8 +156,8 @@ public final class CacheMemorySource extends AbstractCacheSource { //----------- hxxx -------------- @Override - public int hdel(final String key, String... fields) { - int count = 0; + public long hdel(final String key, String... fields) { + long count = 0; CacheEntry entry = container.get(key); if (entry == null || entry.mapValue == null) { return 0; @@ -182,7 +182,7 @@ public final class CacheMemorySource extends AbstractCacheSource { } @Override - public int hlen(final String key) { + public long hlen(final String key) { CacheEntry entry = container.get(key); if (entry == null || entry.mapValue == null) { return 0; @@ -289,46 +289,16 @@ public final class CacheMemorySource extends AbstractCacheSource { return entry.mapValue.contains(field); } - @Override - public void hset(final String key, final String field, final Type type, final T value) { - hset(CacheEntryType.MAP, key, field, value); - } - @Override public void hset(final String key, final String field, final Convert convert, final Type type, final T value) { hset(CacheEntryType.MAP, key, field, value); } - @Override - public void hsetString(final String key, final String field, final String value) { - hset(CacheEntryType.MAP, key, field, value); - } - - @Override - public void hsetLong(final String key, final String field, final long value) { - hset(CacheEntryType.MAP, key, field, value); - } - - @Override - public boolean hsetnx(final String key, final String field, final Type type, final T value) { - return hsetnx(CacheEntryType.MAP, key, field, value); - } - @Override public boolean hsetnx(final String key, final String field, final Convert convert, final Type type, final T value) { return hsetnx(CacheEntryType.MAP, key, field, value); } - @Override - public boolean hsetnxString(final String key, final String field, final String value) { - return hsetnx(CacheEntryType.MAP, key, field, value); - } - - @Override - public boolean hsetnxLong(final String key, final String field, final long value) { - return 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) { @@ -367,31 +337,11 @@ public final class CacheMemorySource extends AbstractCacheSource { return hgetall(CacheEntryType.MAP, key); } - @Override - public Map hgetallString(final String key) { - return hgetall(CacheEntryType.MAP, key); - } - - @Override - public Map hgetallLong(final String key) { - return hgetall(CacheEntryType.MAP, key); - } - @Override public List hvals(final String key, final Type type) { return hvals(CacheEntryType.MAP, key); } - @Override - public List hvalsString(final String key) { - return hvals(CacheEntryType.MAP, key); - } - - @Override - public List hvalsLong(final String key) { - return hvals(CacheEntryType.MAP, key); - } - @Override public Map hscan(final String key, final Type type, AtomicLong cursor, int limit, String pattern) { if (key == null) { @@ -416,31 +366,7 @@ public final class CacheMemorySource extends AbstractCacheSource { return (T) entry.mapValue.get(field); } - @Override - public String hgetString(final String key, final String field) { - if (key == null) { - return null; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.isExpired() || entry.mapValue == null) { - return null; - } - return (String) entry.mapValue.get(field); - } - - @Override - public long hgetLong(final String key, final String field, long defValue) { - if (key == null) { - return defValue; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.isExpired() || entry.mapValue == null) { - return defValue; - } - return ((Number) entry.mapValue.getOrDefault(field, defValue)).longValue(); - } //----------- hxxx -------------- - @Override public boolean exists(String key) { if (key == null) { @@ -476,47 +402,9 @@ public final class CacheMemorySource extends AbstractCacheSource { return entry.cacheType == CacheEntryType.DOUBLE ? (T) (Double) Double.longBitsToDouble(((AtomicLong) entry.objectValue).intValue()) : (T) entry.objectValue; } - @Override - public String getString(String key) { - if (key == null) { - return null; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.isExpired()) { - return null; - } - return (String) entry.objectValue; - } - - @Override - public String getSetString(String key, String value) { - String old = getString(key); - setString(key, value); - return old; - } - - @Override - public long getLong(String key, long defValue) { - if (key == null) { - return defValue; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.isExpired()) { - return defValue; - } - return entry.objectValue == null ? defValue : (entry.objectValue instanceof AtomicLong ? ((AtomicLong) entry.objectValue).get() : (Long) entry.objectValue); - } - - @Override - public long getSetLong(String key, long value, long defValue) { - long old = getLong(key, defValue); - setLong(key, value); - return old; - } - //----------- hxxx -------------- @Override - public CompletableFuture hdelAsync(final String key, String... fields) { + public CompletableFuture hdelAsync(final String key, String... fields) { return supplyAsync(() -> hdel(key, fields), getExecutor()); } @@ -526,7 +414,7 @@ public final class CacheMemorySource extends AbstractCacheSource { } @Override - public CompletableFuture hlenAsync(final String key) { + public CompletableFuture hlenAsync(final String key) { return supplyAsync(() -> hlen(key), getExecutor()); } @@ -560,46 +448,16 @@ public final class CacheMemorySource extends AbstractCacheSource { return supplyAsync(() -> hexists(key, field), getExecutor()); } - @Override - public CompletableFuture hsetAsync(final String key, final String field, final Type type, final T value) { - return runAsync(() -> hset(key, field, type, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - @Override public CompletableFuture hsetAsync(final String key, final String field, final Convert convert, final Type type, final T value) { return runAsync(() -> hset(key, field, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture hsetStringAsync(final String key, final String field, final String value) { - return runAsync(() -> hsetString(key, field, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture hsetLongAsync(final String key, final String field, final long value) { - return runAsync(() -> hsetLong(key, field, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture hsetnxAsync(final String key, final String field, final Type type, final T value) { - return supplyAsync(() -> hsetnx(key, field, type, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - @Override public CompletableFuture hsetnxAsync(final String key, final String field, final Convert convert, final Type type, final T value) { return supplyAsync(() -> hsetnx(key, field, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture hsetnxStringAsync(final String key, final String field, final String value) { - return supplyAsync(() -> hsetnxString(key, field, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture hsetnxLongAsync(final String key, final String field, final long value) { - return supplyAsync(() -> hsetnxLong(key, field, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - @Override public CompletableFuture hmsetAsync(final String key, final Serializable... values) { return runAsync(() -> hmset(key, values), getExecutor()).whenComplete(futureCompleteConsumer); @@ -620,31 +478,11 @@ public final class CacheMemorySource extends AbstractCacheSource { return supplyAsync(() -> hgetall(key, type), getExecutor()); } - @Override - public CompletableFuture> hgetallStringAsync(final String key) { - return supplyAsync(() -> hgetallString(key), getExecutor()); - } - - @Override - public CompletableFuture> hgetallLongAsync(final String key) { - return supplyAsync(() -> hgetallLong(key), getExecutor()); - } - @Override public CompletableFuture> hvalsAsync(final String key, final Type type) { return supplyAsync(() -> hvals(key, type), getExecutor()); } - @Override - public CompletableFuture> hvalsStringAsync(final String key) { - return supplyAsync(() -> hvalsString(key), getExecutor()); - } - - @Override - public CompletableFuture> hvalsLongAsync(final String key) { - return supplyAsync(() -> hvalsLong(key), getExecutor()); - } - @Override public CompletableFuture> hscanAsync(final String key, final Type type, AtomicLong cursor, int limit, String pattern) { return supplyAsync(() -> hscan(key, type, cursor, limit, pattern), getExecutor()); @@ -655,37 +493,12 @@ public final class CacheMemorySource extends AbstractCacheSource { return supplyAsync(() -> hget(key, field, type), getExecutor()); } - @Override - public CompletableFuture hgetStringAsync(final String key, final String field) { - return supplyAsync(() -> hgetString(key, field), getExecutor()); - } - - @Override - public CompletableFuture hgetLongAsync(final String key, final String field, long defValue) { - return supplyAsync(() -> hgetLong(key, field, defValue), getExecutor()); - } - //----------- hxxx -------------- @Override public CompletableFuture getAsync(final String key, final Type type) { return supplyAsync(() -> (T) get(key, type), getExecutor()); } - @Override - public CompletableFuture getStringAsync(final String key) { - return supplyAsync(() -> getString(key), getExecutor()); - } - - @Override - public CompletableFuture getLongAsync(final String key, long defValue) { - return supplyAsync(() -> getLong(key, defValue), getExecutor()); - } - - @Override - public CompletableFuture getSetLongAsync(final String key, long value, long defValue) { - return supplyAsync(() -> getSetLong(key, value, defValue), getExecutor()); - } - @Override public T getex(final String key, final int expireSeconds, final Type type) { if (key == null) { @@ -706,51 +519,11 @@ public final class CacheMemorySource extends AbstractCacheSource { return (T) entry.objectValue; } - @Override - @SuppressWarnings("unchecked") - public String getexString(String key, final int expireSeconds) { - if (key == null) { - return null; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.isExpired()) { - return null; - } - entry.lastAccessed = (int) (System.currentTimeMillis() / 1000); - entry.expireSeconds = expireSeconds; - return (String) entry.objectValue; - } - - @Override - public long getexLong(String key, final int expireSeconds, long defValue) { - if (key == null) { - return defValue; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.isExpired()) { - return defValue; - } - entry.lastAccessed = (int) (System.currentTimeMillis() / 1000); - entry.expireSeconds = expireSeconds; - return entry.objectValue == null ? defValue : (entry.objectValue instanceof AtomicLong ? ((AtomicLong) entry.objectValue).get() : (Long) entry.objectValue); - - } - @Override public CompletableFuture getexAsync(final String key, final int expireSeconds, final Type type) { return supplyAsync(() -> getex(key, expireSeconds, type), getExecutor()); } - @Override - public CompletableFuture getexStringAsync(final String key, final int expireSeconds) { - return supplyAsync(() -> getexString(key, expireSeconds), getExecutor()); - } - - @Override - public CompletableFuture getexLongAsync(final String key, final int expireSeconds, long defValue) { - return supplyAsync(() -> getexLong(key, expireSeconds, defValue), getExecutor()); - } - protected void set(CacheEntryType cacheType, String key, Object value) { if (key == null) { return; @@ -840,7 +613,7 @@ public final class CacheMemorySource extends AbstractCacheSource { } @Override - public void mset(Object... keyVals) { + public void mset(Serializable... keyVals) { if (keyVals.length % 2 != 0) { throw new SourceException("key value must be paired"); } @@ -870,87 +643,30 @@ public final class CacheMemorySource extends AbstractCacheSource { }); } - @Override - public void set(String key, Type type, T value) { - set(CacheEntryType.OBJECT, key, value); - } - @Override public void set(String key, Convert convert, Type type, T value) { - set(CacheEntryType.OBJECT, key, value); - } - - @Override - public boolean setnx(String key, Type type, T value) { - return setnx(CacheEntryType.OBJECT, key, value); + set(findEntryType(type), key, value); } @Override public boolean setnx(String key, Convert convert, Type type, T value) { - return setnx(CacheEntryType.OBJECT, key, value); - } - - @Override - public boolean setnxex(String key, int expireSeconds, Type type, T value) { - return setnxex(CacheEntryType.OBJECT, expireSeconds, key, value); + return setnx(findEntryType(type), key, value); } @Override public boolean setnxex(String key, int expireSeconds, Convert convert, Type type, T value) { - return setnxex(CacheEntryType.OBJECT, expireSeconds, key, value); - } - - @Override - public boolean setnxexBytes(final String key, final int expireSeconds, final byte[] value) { - return setnxex(CacheEntryType.BYTES, expireSeconds, key, value); - } - - @Override - public boolean setnxexString(String key, int expireSeconds, String value) { - return setnxex(CacheEntryType.STRING, expireSeconds, key, value); - } - - @Override - public boolean setnxexLong(String key, int expireSeconds, long value) { - return setnxex(CacheEntryType.LONG, expireSeconds, key, value); - } - - @Override - public T getSet(String key, Type type, T value) { - T old = get(key, type); - set(CacheEntryType.OBJECT, key, value); - return old; + return setnxex(findEntryType(type), expireSeconds, key, value); } @Override public T getSet(String key, Convert convert, Type type, T value) { T old = get(key, type); - set(CacheEntryType.OBJECT, key, value); + set(findEntryType(type), key, value); return old; } @Override - public void setString(String key, String value) { - set(CacheEntryType.STRING, key, value); - } - - @Override - public boolean setnxString(String key, String value) { - return setnx(CacheEntryType.STRING, key, value); - } - - @Override - public void setLong(String key, long value) { - set(CacheEntryType.LONG, key, value); - } - - @Override - public boolean setnxLong(String key, long value) { - return setnx(CacheEntryType.LONG, key, value); - } - - @Override - public CompletableFuture msetAsync(final Object... keyVals) { + public CompletableFuture msetAsync(final Serializable... keyVals) { return runAsync(() -> mset(keyVals), getExecutor()).whenComplete(futureCompleteConsumer); } @@ -959,61 +675,21 @@ public final class CacheMemorySource extends AbstractCacheSource { return runAsync(() -> mset(map), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture setAsync(String key, Type type, T value) { - return runAsync(() -> set(key, type, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - @Override public CompletableFuture setAsync(String key, Convert convert, Type type, T value) { return runAsync(() -> set(key, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture setnxAsync(String key, Type type, T value) { - return supplyAsync(() -> setnx(key, type, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - @Override public CompletableFuture setnxAsync(String key, Convert convert, Type type, T value) { return supplyAsync(() -> setnx(key, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture getSetAsync(String key, Type type, T value) { - return runAsync(() -> getSet(key, type, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - @Override public CompletableFuture getSetAsync(String key, Convert convert, Type type, T value) { return runAsync(() -> getSet(key, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture setStringAsync(String key, String value) { - return runAsync(() -> setString(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture setnxStringAsync(String key, String value) { - return supplyAsync(() -> setnxString(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture getSetStringAsync(String key, String value) { - return runAsync(() -> getSetString(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture setLongAsync(String key, long value) { - return runAsync(() -> setLong(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture setnxLongAsync(String key, long value) { - return supplyAsync(() -> setnxLong(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - protected void set(CacheEntryType cacheType, int expireSeconds, String key, Object value) { if (key == null) { return; @@ -1049,24 +725,9 @@ public final class CacheMemorySource extends AbstractCacheSource { } } - @Override - public void setex(String key, int expireSeconds, Type type, T value) { - set(CacheEntryType.OBJECT, expireSeconds, key, value); - } - @Override public void setex(String key, int expireSeconds, Convert convert, Type type, T value) { - set(CacheEntryType.OBJECT, expireSeconds, key, value); - } - - @Override - public void setexString(String key, int expireSeconds, String value) { - set(CacheEntryType.STRING, expireSeconds, key, value); - } - - @Override - public void setexLong(String key, int expireSeconds, long value) { - set(CacheEntryType.LONG, expireSeconds, key, value); + set(findEntryType(type), expireSeconds, key, value); } @Override @@ -1079,31 +740,6 @@ public final class CacheMemorySource extends AbstractCacheSource { return runAsync(() -> setex(key, expireSeconds, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture setexStringAsync(String key, int expireSeconds, String value) { - return runAsync(() -> setexString(key, expireSeconds, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture setexLongAsync(String key, int expireSeconds, long value) { - return runAsync(() -> setexLong(key, expireSeconds, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture setnxexStringAsync(String key, int expireSeconds, String value) { - return supplyAsync(() -> setnxexString(key, expireSeconds, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture setnxexLongAsync(String key, int expireSeconds, long value) { - return supplyAsync(() -> setnxexLong(key, expireSeconds, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture setnxexBytesAsync(String key, int expireSeconds, byte[] value) { - return supplyAsync(() -> setnxexBytes(key, expireSeconds, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - @Override public CompletableFuture setnxexAsync(final String key, final int expireSeconds, final Type type, final T value) { return supplyAsync(() -> setnxex(key, expireSeconds, type, value), getExecutor()).whenComplete(futureCompleteConsumer); @@ -1193,7 +829,7 @@ public final class CacheMemorySource extends AbstractCacheSource { } @Override - public int del(final String... keys) { + public long del(final String... keys) { if (keys == null) { return 0; } @@ -1282,7 +918,7 @@ public final class CacheMemorySource extends AbstractCacheSource { } @Override - public CompletableFuture delAsync(final String... keys) { + public CompletableFuture delAsync(final String... keys) { return supplyAsync(() -> del(keys), getExecutor()).whenComplete(futureCompleteConsumer); } @@ -1329,56 +965,11 @@ public final class CacheMemorySource extends AbstractCacheSource { return map; } - @Override - public Map mgetString(final String... keys) { - Map map = new LinkedHashMap<>(); - for (String key : keys) { - Object n = get(key, String.class); - map.put(key, n == null ? null : n.toString()); - } - return map; - } - - @Override - public Map mgetLong(final String... keys) { - Map map = new LinkedHashMap<>(); - for (String key : keys) { - Number n = (Number) get(key, long.class); - map.put(key, n == null ? null : n.longValue()); - } - return map; - } - - @Override - public Map mgetBytes(final String... keys) { - Map map = new LinkedHashMap<>(); - for (String key : keys) { - byte[] n = get(key, byte[].class); - map.put(key, get(key, byte[].class)); - } - return map; - } - @Override public CompletableFuture> mgetAsync(final Type componentType, final String... keys) { return CompletableFuture.completedFuture(mget(componentType, keys)); } - @Override - public CompletableFuture> mgetStringAsync(final String... keys) { - return CompletableFuture.completedFuture(mgetString(keys)); - } - - @Override - public CompletableFuture> mgetLongAsync(final String... keys) { - return CompletableFuture.completedFuture(mgetLong(keys)); - } - - @Override - public CompletableFuture> mgetBytesAsync(final String... keys) { - return CompletableFuture.completedFuture(mgetBytes(keys)); - } - @Override public CompletableFuture>> lrangeAsync(Type componentType, String... keys) { return supplyAsync(() -> lrange(componentType, keys), getExecutor()); @@ -1400,24 +991,24 @@ public final class CacheMemorySource extends AbstractCacheSource { } @Override - public int llen(final String key) { + public long llen(final String key) { Collection collection = (Collection) get(key, Object.class); return collection == null ? 0 : collection.size(); } @Override - public int scard(final String key) { + public long scard(final String key) { Collection collection = (Collection) get(key, Object.class); return collection == null ? 0 : collection.size(); } @Override - public CompletableFuture llenAsync(final String key) { + public CompletableFuture llenAsync(final String key) { return supplyAsync(() -> llen(key), getExecutor()); } @Override - public CompletableFuture scardAsync(final String key) { + public CompletableFuture scardAsync(final String key) { return supplyAsync(() -> scard(key), getExecutor()); } @@ -1432,28 +1023,6 @@ public final class CacheMemorySource extends AbstractCacheSource { return supplyAsync(() -> sismember(key, type, value), getExecutor()); } - @Override - public boolean sismemberString(final String key, final String value) { - Collection list = (Collection) get(key, String.class); - return list != null && list.contains(value); - } - - @Override - public CompletableFuture sismemberStringAsync(final String key, final String value) { - return supplyAsync(() -> sismemberString(key, value), getExecutor()); - } - - @Override - public boolean sismemberLong(final String key, final long value) { - Collection list = (Collection) get(key, long.class); - return list != null && list.contains(value); - } - - @Override - public CompletableFuture sismemberLongAsync(final String key, final long value) { - return supplyAsync(() -> sismemberLong(key, value), getExecutor()); - } - protected void appendListItem(CacheEntryType cacheType, String key, Object... values) { appendListItem(cacheType, true, key, values); } @@ -1503,15 +1072,17 @@ public final class CacheMemorySource extends AbstractCacheSource { } @Override - public void lpushx(final String key, final Type componentType, T value) { + public void lpushx(final String key, final Type componentType, T... values) { if (container.containsKey(key)) { - appendListItem(CacheEntryType.OBJECT_LIST, false, key, value); + for (T value : values) { + appendListItem(CacheEntryType.OBJECT_LIST, false, key, value); + } } } @Override - public CompletableFuture lpushxAsync(final String key, final Type componentType, final T value) { - return runAsync(() -> lpushx(key, componentType, value), getExecutor()).whenComplete(futureCompleteConsumer); + public CompletableFuture lpushxAsync(final String key, final Type componentType, final T... values) { + return runAsync(() -> lpushx(key, componentType, values), getExecutor()).whenComplete(futureCompleteConsumer); } @Override @@ -1576,8 +1147,8 @@ public final class CacheMemorySource extends AbstractCacheSource { } @Override - public CompletableFuture rpoplpushAsync(final String list1, final String list2, final Type componentType) { - return supplyAsync(() -> rpoplpush(list1, list2, componentType), getExecutor()).whenComplete(futureCompleteConsumer); + public CompletableFuture rpoplpushAsync(final String key, final String key2, final Type componentType) { + return supplyAsync(() -> rpoplpush(key, key2, componentType), getExecutor()).whenComplete(futureCompleteConsumer); } @Override @@ -1605,45 +1176,27 @@ public final class CacheMemorySource extends AbstractCacheSource { } @Override - public void rpushx(String key, Type componentType, T value) { + public void rpushx(String key, Type componentType, T... values) { if (container.containsKey(key)) { - appendListItem(CacheEntryType.OBJECT_LIST, key, value); + for (T value : values) { + appendListItem(CacheEntryType.OBJECT_LIST, key, value); + } } } @Override - public CompletableFuture rpushxAsync(final String key, final Type componentType, final T value) { - return runAsync(() -> rpushx(key, componentType, value), getExecutor()).whenComplete(futureCompleteConsumer); + public CompletableFuture rpushxAsync(final String key, final Type componentType, final T... values) { + return runAsync(() -> rpushx(key, componentType, values), getExecutor()).whenComplete(futureCompleteConsumer); } @Override - public void rpush(String key, Type componentType, T value) { - appendListItem(CacheEntryType.OBJECT_LIST, key, value); + public void rpush(String key, Type componentType, T... values) { + appendListItem(CacheEntryType.OBJECT_LIST, key, values); } @Override - public void rpushString(String key, String value) { - appendListItem(CacheEntryType.STRING_LIST, key, value); - } - - @Override - public void rpushLong(String key, long value) { - appendListItem(CacheEntryType.LONG_LIST, key, value); - } - - @Override - public CompletableFuture rpushAsync(final String key, final Type componentType, final T value) { - return runAsync(() -> rpush(key, componentType, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture rpushStringAsync(final String key, final String value) { - return runAsync(() -> rpushString(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture rpushLongAsync(final String key, final long value) { - return runAsync(() -> rpushLong(key, value), getExecutor()).whenComplete(futureCompleteConsumer); + public CompletableFuture rpushAsync(final String key, final Type componentType, final T... values) { + return runAsync(() -> rpush(key, componentType, values), getExecutor()).whenComplete(futureCompleteConsumer); } @Override @@ -1687,36 +1240,6 @@ public final class CacheMemorySource extends AbstractCacheSource { return supplyAsync(() -> lrem(key, componentType, value), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture lremStringAsync(final String key, final String value) { - return supplyAsync(() -> lremString(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture lremLongAsync(final String key, final long value) { - return supplyAsync(() -> lremLong(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public String spopString(final String key) { - return (String) spop(key, String.class); - } - - @Override - public Set spopString(final String key, int count) { - return spop(key, count, String.class); - } - - @Override - public Long spopLong(final String key) { - return (Long) spop(key, long.class); - } - - @Override - public Set spopLong(final String key, int count) { - return spop(key, count, long.class); - } - @Override public T spop(final String key, final Type componentType) { if (key == null) { @@ -1824,31 +1347,11 @@ public final class CacheMemorySource extends AbstractCacheSource { appendSetItem(CacheEntryType.OBJECT_SET, key, value); } - @Override - public void saddString(String key, String value) { - appendSetItem(CacheEntryType.OBJECT_SET, key, value); - } - - @Override - public void saddLong(String key, long value) { - appendSetItem(CacheEntryType.OBJECT_SET, key, value); - } - @Override public CompletableFuture saddAsync(final String key, final Type componentType, T value) { return runAsync(() -> sadd(key, componentType, value), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture saddStringAsync(final String key, final String value) { - return runAsync(() -> saddString(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture saddLongAsync(final String key, final long value) { - return runAsync(() -> saddLong(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - @Override public int srem(String key, Type type, T value) { if (key == null) { @@ -1861,123 +1364,11 @@ public final class CacheMemorySource extends AbstractCacheSource { return entry.csetValue.remove(value) ? 1 : 0; } - @Override - public int sremString(String key, String value) { - if (key == null) { - return 0; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.csetValue == null) { - return 0; - } - return entry.csetValue.remove(value) ? 1 : 0; - } - - @Override - public int sremLong(String key, long value) { - if (key == null) { - return 0; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.csetValue == null) { - return 0; - } - return entry.csetValue.remove(value) ? 1 : 0; - } - @Override public CompletableFuture sremAsync(final String key, final Type componentType, final T value) { return supplyAsync(() -> srem(key, componentType, value), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture sremStringAsync(final String key, final String value) { - return supplyAsync(() -> sremString(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture sremLongAsync(final String key, final long value) { - return supplyAsync(() -> sremLong(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public byte[] getBytes(final String key) { - if (key == null) { - return null; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.isExpired()) { - return null; - } - return (byte[]) entry.objectValue; - } - - @Override - public byte[] getSetBytes(final String key, byte[] value) { - byte[] old = getBytes(key); - setBytes(key, value); - return old; - } - - @Override - public CompletableFuture getBytesAsync(final String key) { - return supplyAsync(() -> getBytes(key), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture getSetBytesAsync(final String key, byte[] value) { - return supplyAsync(() -> getSetBytes(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public byte[] getexBytes(String key, final int expireSeconds) { - if (key == null) { - return null; - } - CacheEntry entry = container.get(key); - if (entry == null || entry.isExpired()) { - return null; - } - entry.lastAccessed = (int) (System.currentTimeMillis() / 1000); - entry.expireSeconds = expireSeconds; - return (byte[]) entry.objectValue; - } - - @Override - public CompletableFuture getexBytesAsync(final String key, final int expireSeconds) { - return supplyAsync(() -> getexBytes(key, expireSeconds), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public void setBytes(String key, byte[] value) { - set(CacheEntryType.BYTES, key, value); - } - - @Override - public CompletableFuture setBytesAsync(final String key, byte[] value) { - return runAsync(() -> setBytes(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public boolean setnxBytes(final String key, final byte[] value) { - return setnx(CacheEntryType.BYTES, key, value); - } - - @Override - public CompletableFuture setnxBytesAsync(final String key, byte[] value) { - return supplyAsync(() -> setnxBytes(key, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public void setexBytes(final String key, final int expireSeconds, final byte[] value) { - set(CacheEntryType.BYTES, expireSeconds, key, value); - } - - @Override - public CompletableFuture setexBytesAsync(final String key, final int expireSeconds, byte[] value) { - return runAsync(() -> setexBytes(key, expireSeconds, value), getExecutor()).whenComplete(futureCompleteConsumer); - } - @Override public long dbsize() { return container.size(); @@ -2072,24 +1463,15 @@ public final class CacheMemorySource extends AbstractCacheSource { return supplyAsync(() -> sscan(key, componentType, cursor, limit, pattern), getExecutor()).whenComplete(futureCompleteConsumer); } - @Override - public CompletableFuture spopStringAsync(String key) { - return supplyAsync(() -> spopString(key), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture> spopStringAsync(String key, int count) { - return supplyAsync(() -> spopString(key, count), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture spopLongAsync(String key) { - return supplyAsync(() -> spopLong(key), getExecutor()).whenComplete(futureCompleteConsumer); - } - - @Override - public CompletableFuture> spopLongAsync(String key, int count) { - return supplyAsync(() -> spopLong(key, count), getExecutor()).whenComplete(futureCompleteConsumer); + protected CacheEntryType findEntryType(Type type) { + if (type == String.class) { + return CacheEntryType.STRING; + } else if (type == long.class || type == Long.class) { + return CacheEntryType.LONG; + } else if (type == byte[].class) { + return CacheEntryType.BYTES; + } + return CacheEntryType.OBJECT; } public static enum CacheEntryType { diff --git a/src/main/java/org/redkale/source/CacheSource.java b/src/main/java/org/redkale/source/CacheSource.java index e83084b2e..306999c92 100644 --- a/src/main/java/org/redkale/source/CacheSource.java +++ b/src/main/java/org/redkale/source/CacheSource.java @@ -19,7 +19,6 @@ import org.redkale.util.*; * CacheSource提供三种数据类型操作: String、Long、byte[]和泛型指定的数据类型。
* String统一用setString、getString等系列方法。
* Long统一用setLong、getLong、incr等系列方法。
- * byte[]统一用setBytes、getBytes等系列方法。
* 其他则供自定义数据类型使用。 * * param V value的类型 移除 @2.4.0 @@ -40,20 +39,25 @@ public interface CacheSource extends Resourcable { //------------------------ get ------------------------ public T get(final String key, final Type type); - public String getString(final String key); + default String getString(final String key) { + return get(key, String.class); + } - public long getLong(final String key, long defValue); - - public byte[] getBytes(final String key); + default long getLong(final String key, long defValue) { + Long val = get(key, Long.class); + return val == null ? defValue : val; + } //------------------------ mget ------------------------ public Map mget(final Type componentType, final String... keys); - public Map mgetString(final String... keys); + default Map mgetString(final String... keys) { + return mget(String.class, keys); + } - public Map mgetLong(final String... keys); - - public Map mgetBytes(final String... keys); + default Map mgetLong(final String... keys) { + return mget(Long.class, keys); + } default T[] mgets(final Type componentType, final String... keys) { T[] rs = (T[]) Creator.newArray(TypeToken.typeToClass(componentType), keys.length); @@ -82,83 +86,98 @@ public interface CacheSource extends Resourcable { return rs; } - default byte[][] mgetsBytes(final String... keys) { - byte[][] rs = new byte[keys.length][]; - Map map = mgetBytes(keys); - for (int i = 0; i < keys.length; i++) { - rs[i] = map.get(keys[i]); - } - return rs; - } - //------------------------ getex ------------------------ public T getex(final String key, final int expireSeconds, final Type type); - public String getexString(final String key, final int expireSeconds); + default String getexString(final String key, final int expireSeconds) { + return getex(key, expireSeconds, String.class); + } - public long getexLong(final String key, final int expireSeconds, long defValue); - - public byte[] getexBytes(final String key, final int expireSeconds); + default long getexLong(final String key, final int expireSeconds, long defValue) { + Long val = getex(key, expireSeconds, Long.class); + return val == null ? defValue : val; + } //------------------------ getset ------------------------ - public T getSet(final String key, final Type type, final T value); - public T getSet(final String key, final Convert convert, final Type type, final T value); - public long getSetLong(final String key, long value, long defValue); + default T getSet(final String key, final Type type, final T value) { + return getSet(key, (Convert) null, type, value); + } - public String getSetString(final String key, final String value); + default String getSetString(final String key, final String value) { + return getSet(key, String.class, value); + } - public byte[] getSetBytes(final String key, final byte[] value); + default long getSetLong(final String key, long value, long defValue) { + Long val = getSet(key, Long.class, value); + return val == null ? defValue : val; + } //------------------------ set ------------------------ //MSET key value [key value ...] - public void mset(final Object... keyVals); + public void mset(final Serializable... keyVals); public void mset(final Map map); - public void set(final String key, final Type type, final T value); - public void set(final String key, final Convert convert, final Type type, final T value); - public void setString(final String key, final String value); + default void set(final String key, final Type type, final T value) { + set(key, (Convert) null, type, value); + } - public void setLong(final String key, final long value); + default void setString(final String key, final String value) { + set(key, String.class, value); + } - public void setBytes(final String key, final byte[] value); + default void setLong(final String key, final long value) { + set(key, Long.class, value); + } //------------------------ setnx ------------------------ - public boolean setnx(final String key, final Type type, final T value); - public boolean setnx(final String key, final Convert convert, final Type type, final T value); - public boolean setnxString(final String key, final String value); + default boolean setnx(final String key, final Type type, final T value) { + return setnx(key, (Convert) null, type, value); + } - public boolean setnxLong(final String key, final long value); + default boolean setnxString(final String key, final String value) { + return setnx(key, String.class, value); + } - public boolean setnxBytes(final String key, final byte[] value); + default boolean setnxLong(final String key, final long value) { + return setnx(key, Long.class, value); + } //------------------------ setnxex ------------------------ - public boolean setnxex(final String key, final int expireSeconds, final Type type, final T value); - public boolean setnxex(final String key, final int expireSeconds, final Convert convert, final Type type, final T value); - public boolean setnxexString(final String key, final int expireSeconds, final String value); + default boolean setnxex(final String key, final int expireSeconds, final Type type, final T value) { + return setnxex(key, expireSeconds, (Convert) null, type, value); + } - public boolean setnxexLong(final String key, final int expireSeconds, final long value); + default boolean setnxexString(final String key, final int expireSeconds, final String value) { + return setnxex(key, expireSeconds, String.class, value); + } - public boolean setnxexBytes(final String key, final int expireSeconds, final byte[] value); + default boolean setnxexLong(final String key, final int expireSeconds, final long value) { + return setnxex(key, expireSeconds, Long.class, value); + } //------------------------ setex ------------------------ - public void setex(final String key, final int expireSeconds, final Type type, final T value); - public void setex(final String key, final int expireSeconds, final Convert convert, final Type type, final T value); - public void setexString(final String key, final int expireSeconds, final String value); + default void setex(final String key, final int expireSeconds, final Type type, final T value) { + setex(key, expireSeconds, (Convert) null, type, value); + } - public void setexLong(final String key, final int expireSeconds, final long value); + default void setexString(final String key, final int expireSeconds, final String value) { + setex(key, expireSeconds, String.class, value); + } - public void setexBytes(final String key, final int expireSeconds, final byte[] value); + default void setexLong(final String key, final int expireSeconds, final long value) { + setex(key, expireSeconds, Long.class, value); + } //------------------------ xxxx ------------------------ public boolean exists(final String key); @@ -171,7 +190,7 @@ public interface CacheSource extends Resourcable { public boolean renamenx(String oldKey, String newKey); - public int del(final String... keys); + public long del(final String... keys); public long incr(final String key); @@ -186,48 +205,73 @@ public interface CacheSource extends Resourcable { //------------------------ hget ------------------------ public T hget(final String key, final String field, final Type type); - public String hgetString(final String key, final String field); + default String hgetString(final String key, final String field) { + return hget(key, field, String.class); + } - public long hgetLong(final String key, final String field, long defValue); + default long hgetLong(final String key, final String field, long defValue) { + Long val = hget(key, field, Long.class); + return val == null ? defValue : val; + } //------------------------ hset ------------------------ - public void hset(final String key, final String field, final Type type, final T value); - public void hset(final String key, final String field, final Convert convert, final Type type, final T value); - public void hsetString(final String key, final String field, final String value); + default void hset(final String key, final String field, final Type type, final T value) { + hset(key, field, (Convert) null, type, value); + } - public void hsetLong(final String key, final String field, final long value); + default void hsetString(final String key, final String field, final String value) { + hset(key, field, String.class, value); + } + + default void hsetLong(final String key, final String field, final long value) { + hset(key, field, Long.class, value); + } //------------------------ hsetnx ------------------------ - public boolean hsetnx(final String key, final String field, final Type type, final T value); - public boolean hsetnx(final String key, final String field, final Convert convert, final Type type, final T value); - public boolean hsetnxString(final String key, final String field, final String value); + default boolean hsetnx(final String key, final String field, final Type type, final T value) { + return hsetnx(key, field, (Convert) null, type, value); + } - public boolean hsetnxLong(final String key, final String field, final long value); + default boolean hsetnxString(final String key, final String field, final String value) { + return hsetnx(key, field, String.class, value); + } + + default boolean hsetnxLong(final String key, final String field, final long value) { + return hsetnx(key, field, Long.class, value); + } //------------------------ hgetall ------------------------ public Map hgetall(final String key, final Type type); - public Map hgetallString(final String key); + default Map hgetallString(final String key) { + return hgetall(key, String.class); + } - public Map hgetallLong(final String key); + default Map hgetallLong(final String key) { + return hgetall(key, Long.class); + } //------------------------ hvals ------------------------ public List hvals(final String key, final Type type); - public List hvalsString(final String key); + default List hvalsString(final String key) { + return hvals(key, String.class); + } - public List hvalsLong(final String key); + default List hvalsLong(final String key) { + return hvals(key, Long.class); + } //------------------------ hxxx ------------------------ - public int hdel(final String key, String... fields); + public long hdel(final String key, String... fields); public List hkeys(final String key); - public int hlen(final String key); + public long hlen(final String key); public long hincr(final String key, String field); @@ -248,17 +292,35 @@ public interface CacheSource extends Resourcable { public List hmget(final String key, final Type type, final String... fields); - default Map hscan(final String key, final Type type, AtomicLong cursor, int limit) { - return hscan(key, type, cursor, limit, null); + default List hmgetString(final String key, final String... fields) { + return hmget(key, String.class, fields); + } + + default List hmgetLong(final String key, final String... fields) { + return hmget(key, Long.class, fields); } public Map hscan(final String key, final Type type, AtomicLong cursor, int limit, String pattern); + default Map hscan(final String key, final Type type, AtomicLong cursor, int limit) { + return hscan(key, type, cursor, limit, null); + } + //------------------------ list ------------------------ - public int llen(final String key); + public long llen(final String key); + + public void ltrim(final String key, int start, int stop); public Map> lrange(final Type componentType, final String... keys); + default Map> lrangeString(final String... keys) { + return lrange(String.class, keys); + } + + default Map> lrangeLong(final String... keys) { + return lrange(Long.class, keys); + } + public List lrange(final String key, final Type componentType, int start, int stop); default List lrangeString(final String key, int start, int stop) { @@ -281,8 +343,6 @@ public interface CacheSource extends Resourcable { return lrange(key, Long.class, 0, -1); } - public void ltrim(final String key, int start, int stop); - public T lpop(final String key, final Type componentType); default String lpopString(final String key) { @@ -303,24 +363,24 @@ public interface CacheSource extends Resourcable { lpush(key, Long.class, values); } - public void lpushx(final String key, final Type componentType, T value); + public void lpushx(final String key, final Type componentType, T... values); - default void lpushxString(final String key, String value) { - lpushx(key, String.class, value); + default void lpushxString(final String key, String... values) { + lpushx(key, String.class, values); } - default void lpushxLong(final String key, Long value) { - lpushx(key, Long.class, value); + default void lpushxLong(final String key, Long... values) { + lpushx(key, Long.class, values); } - public void rpushx(final String key, final Type componentType, T value); + public void rpushx(final String key, final Type componentType, T... values); - default void rpushxString(final String key, String value) { - rpushx(key, String.class, value); + default void rpushxString(final String key, String... values) { + rpushx(key, String.class, values); } - default void rpushxLong(final String key, Long value) { - rpushx(key, Long.class, value); + default void rpushxLong(final String key, Long... values) { + rpushx(key, Long.class, values); } public T rpop(final String key, final Type componentType); @@ -333,14 +393,14 @@ public interface CacheSource extends Resourcable { return rpop(key, Long.class); } - public T rpoplpush(final String list1, final String list2, final Type componentType); + public T rpoplpush(final String key, final String key2, final Type componentType); - default String rpoplpushString(final String list1, final String list2) { - return rpoplpush(list1, list2, String.class); + default String rpoplpushString(final String key, final String key2) { + return rpoplpush(key, key2, String.class); } - default Long rpoplpushLong(final String list1, final String list2) { - return rpoplpush(list1, list2, Long.class); + default Long rpoplpushLong(final String key, final String key2) { + return rpoplpush(key, key2, Long.class); } public int lrem(final String key, final Type componentType, final T value); @@ -353,39 +413,91 @@ public interface CacheSource extends Resourcable { return lrem(key, Long.class, value); } - public void rpush(final String key, final Type componentType, final T value); + public void rpush(final String key, final Type componentType, final T... values); - default void rpushString(final String key, final String value) { - rpush(key, String.class, value); + default void rpushString(final String key, final String... values) { + rpush(key, String.class, values); } - default void rpushLong(final String key, final long value) { - rpush(key, Long.class, value); + default void rpushLong(final String key, final Long... values) { + rpush(key, Long.class, values); } //------------------------ set ------------------------ - public int scard(final String key); + public long scard(final String key); public Set smembers(final String key, final Type componentType); + default Set smembersString(final String key) { + return smembers(key, String.class); + } + + default Set smembersLong(final String key) { + return smembers(key, Long.class); + } + public Map> smembers(final Type componentType, final String... keys); + default Map> smembersString(final String... keys) { + return smembers(String.class, keys); + } + + default Map> smembersLong(final String... keys) { + return smembers(Long.class, keys); + } + public boolean sismember(final String key, final Type componentType, final T value); + default boolean sismemberString(final String key, final String value) { + return sismember(key, String.class, value); + } + + default boolean sismemberLong(final String key, final long value) { + return sismember(key, Long.class, value); + } + public void sadd(final String key, final Type componentType, final T value); + default void saddString(final String key, final String value) { + sadd(key, String.class, value); + } + + default void saddLong(final String key, final long value) { + sadd(key, Long.class, value); + } + public int srem(final String key, final Type componentType, final T value); + default int sremString(final String key, final String value) { + return srem(key, String.class, value); + } + + default int sremLong(final String key, final long value) { + return srem(key, Long.class, value); + } + public T spop(final String key, final Type componentType); + default String spopString(final String key) { + return spop(key, String.class); + } + + default Long spopLong(final String key) { + return spop(key, Long.class); + } + public Set spop(final String key, final int count, final Type componentType); - public Set sscan(final String key, final Type componentType, AtomicLong cursor, int limit, String pattern); - - default Set sscan(final String key, final Type componentType, AtomicLong cursor, int limit) { - return sscan(key, componentType, cursor, limit, null); + default Set spopString(final String key, final int count) { + return spop(key, count, String.class); } + default Set spopLong(final String key, final int count) { + return spop(key, count, Long.class); + } + + public Set sscan(final String key, final Type componentType, AtomicLong cursor, int limit, String pattern); + default Set sscanString(final String key, AtomicLong cursor, int limit, String pattern) { return sscan(key, String.class, cursor, limit, pattern); } @@ -394,6 +506,10 @@ public interface CacheSource extends Resourcable { return sscan(key, Long.class, cursor, limit, pattern); } + default Set sscan(final String key, final Type componentType, AtomicLong cursor, int limit) { + return sscan(key, componentType, cursor, limit, null); + } + default Set sscanString(final String key, AtomicLong cursor, int limit) { return sscan(key, String.class, cursor, limit, null); } @@ -402,33 +518,9 @@ public interface CacheSource extends Resourcable { return sscan(key, Long.class, cursor, limit, null); } - //---------- set-string ---------- - default Set smembersString(final String key) { - return smembers(key, String.class); - } - - public boolean sismemberString(final String key, final String value); - - public void saddString(final String key, final String value); - - public int sremString(final String key, final String value); - - public String spopString(final String key); - - public Set spopString(final String key, final int count); - - //---------- set-long ---------- - public boolean sismemberLong(final String key, final long value); - - public void saddLong(final String key, final long value); - - public int sremLong(final String key, final long value); - - public Long spopLong(final String key); - - public Set spopLong(final String key, final int count); - //------------------------ keys ------------------------ + public List keys(String pattern); + default List keys() { return keys(null); } @@ -437,14 +529,12 @@ public interface CacheSource extends Resourcable { return keys(startsWith + "*"); } - public List keys(String pattern); + public List scan(AtomicLong cursor, int limit, String pattern); default List scan(AtomicLong cursor, int limit) { return scan(cursor, limit, null); } - public List scan(AtomicLong cursor, int limit, String pattern); - public long dbsize(); public void flushdb(); @@ -459,20 +549,24 @@ public interface CacheSource extends Resourcable { //------------------------ getAsync ------------------------ public CompletableFuture getAsync(final String key, final Type type); - public CompletableFuture getStringAsync(final String key); + default CompletableFuture getStringAsync(final String key) { + return getAsync(key, String.class); + } - public CompletableFuture getLongAsync(final String key, long defValue); - - public CompletableFuture getBytesAsync(final String key); + default CompletableFuture getLongAsync(final String key, long defValue) { + return getAsync(key, Long.class).thenApply(v -> v == null ? defValue : (Long) v); + } //------------------------ mgetAsync ------------------------ public CompletableFuture> mgetAsync(final Type componentType, final String... keys); - public CompletableFuture> mgetStringAsync(final String... keys); + default CompletableFuture> mgetStringAsync(final String... keys) { + return mgetAsync(String.class, keys); + } - public CompletableFuture> mgetLongAsync(final String... keys); - - public CompletableFuture> mgetBytesAsync(final String... keys); + default CompletableFuture> mgetLongAsync(final String... keys) { + return mgetAsync(Long.class, keys); + } default CompletableFuture mgetsAsync(final Type componentType, final String... keys) { return mgetAsync(componentType, keys).thenApply(map -> { @@ -504,84 +598,96 @@ public interface CacheSource extends Resourcable { }); } - default CompletableFuture mgetsBytesAsync(final String... keys) { - return mgetBytesAsync(keys).thenApply(map -> { - byte[][] rs = new byte[keys.length][]; - for (int i = 0; i < keys.length; i++) { - rs[i] = map.get(keys[i]); - } - return rs; - }); - } - //------------------------ getexAsync ------------------------ public CompletableFuture getexAsync(final String key, final int expireSeconds, final Type type); - public CompletableFuture getexStringAsync(final String key, final int expireSeconds); + default CompletableFuture getexStringAsync(final String key, final int expireSeconds) { + return getexAsync(key, expireSeconds, String.class); + } - public CompletableFuture getexLongAsync(final String key, final int expireSeconds, long defValue); - - public CompletableFuture getexBytesAsync(final String key, final int expireSeconds); + default CompletableFuture getexLongAsync(final String key, final int expireSeconds, long defValue) { + return getexAsync(key, expireSeconds, Long.class).thenApply(v -> v == null ? defValue : (Long) v); + } //------------------------ getsetAsync ------------------------ - public CompletableFuture getSetAsync(final String key, final Type type, final T value); - public CompletableFuture getSetAsync(final String key, final Convert convert, final Type type, final T value); - public CompletableFuture getSetLongAsync(final String key, long value, long defValue); + default CompletableFuture getSetAsync(final String key, final Type type, final T value) { + return getSetAsync(key, (Convert) null, type, value); + } - public CompletableFuture getSetStringAsync(final String key, final String value); + default CompletableFuture getSetStringAsync(final String key, final String value) { + return getSetAsync(key, String.class, value); + } - public CompletableFuture getSetBytesAsync(final String key, final byte[] value); + default CompletableFuture getSetLongAsync(final String key, long value, long defValue) { + return getSetAsync(key, Long.class, value).thenApply(v -> v == null ? defValue : (Long) v); + } //------------------------ setAsync ------------------------ //MSET key value [key value ...] - public CompletableFuture msetAsync(final Object... keyVals); + public CompletableFuture msetAsync(final Serializable... keyVals); public CompletableFuture msetAsync(final Map map); - public CompletableFuture setAsync(final String key, final Type type, final T value); - public CompletableFuture setAsync(final String key, final Convert convert, final Type type, final T value); - public CompletableFuture setStringAsync(final String key, final String value); + default CompletableFuture setAsync(final String key, final Type type, final T value) { + return setAsync(key, (Convert) null, type, value); + } - public CompletableFuture setLongAsync(final String key, long value); + default CompletableFuture setStringAsync(final String key, final String value) { + return setAsync(key, String.class, value); + } - public CompletableFuture setBytesAsync(final String key, final byte[] value); + default CompletableFuture setLongAsync(final String key, long value) { + return setAsync(key, Long.class, value); + } //------------------------ setnxAsync ------------------------ - public CompletableFuture setnxAsync(final String key, final Type type, final T value); - public CompletableFuture setnxAsync(final String key, final Convert convert, final Type type, final T value); - public CompletableFuture setnxStringAsync(final String key, final String value); + default CompletableFuture setnxAsync(final String key, final Type type, final T value) { + return setnxAsync(key, (Convert) null, type, value); + } - public CompletableFuture setnxLongAsync(final String key, long value); + default CompletableFuture setnxStringAsync(final String key, final String value) { + return setnxAsync(key, String.class, value); + } - public CompletableFuture setnxBytesAsync(final String key, final byte[] value); + default CompletableFuture setnxLongAsync(final String key, long value) { + return setnxAsync(key, Long.class, value); + } //------------------------ setnxexAsync ------------------------ - public CompletableFuture setnxexAsync(final String key, final int expireSeconds, final Type type, final T value); - public CompletableFuture setnxexAsync(final String key, final int expireSeconds, final Convert convert, final Type type, final T value); - public CompletableFuture setnxexStringAsync(final String key, final int expireSeconds, final String value); + default CompletableFuture setnxexAsync(final String key, final int expireSeconds, final Type type, final T value) { + return setnxexAsync(key, expireSeconds, (Convert) null, type, value); + } - public CompletableFuture setnxexLongAsync(final String key, final int expireSeconds, final long value); + default CompletableFuture setnxexStringAsync(final String key, final int expireSeconds, final String value) { + return setnxexAsync(key, expireSeconds, String.class, value); + } - public CompletableFuture setnxexBytesAsync(final String key, final int expireSeconds, final byte[] value); + default CompletableFuture setnxexLongAsync(final String key, final int expireSeconds, final long value) { + return setnxexAsync(key, expireSeconds, Long.class, value); + } //------------------------ setexAsync ------------------------ - public CompletableFuture setexAsync(final String key, final int expireSeconds, final Type type, final T value); - public CompletableFuture setexAsync(final String key, final int expireSeconds, final Convert convert, final Type type, final T value); - public CompletableFuture setexStringAsync(final String key, final int expireSeconds, final String value); + default CompletableFuture setexAsync(final String key, final int expireSeconds, final Type type, final T value) { + return setexAsync(key, expireSeconds, (Convert) null, type, value); + } - public CompletableFuture setexLongAsync(final String key, final int expireSeconds, final long value); + default CompletableFuture setexStringAsync(final String key, final int expireSeconds, final String value) { + return setexAsync(key, expireSeconds, String.class, value); + } - public CompletableFuture setexBytesAsync(final String key, final int expireSeconds, final byte[] value); + default CompletableFuture setexLongAsync(final String key, final int expireSeconds, final long value) { + return setexAsync(key, expireSeconds, Long.class, value); + } //------------------------ xxxxAsync ------------------------ public CompletableFuture existsAsync(final String key); @@ -594,7 +700,7 @@ public interface CacheSource extends Resourcable { public CompletableFuture renamenxAsync(String oldKey, String newKey); - public CompletableFuture delAsync(final String... keys); + public CompletableFuture delAsync(final String... keys); public CompletableFuture incrAsync(final String key); @@ -609,48 +715,72 @@ public interface CacheSource extends Resourcable { //------------------------ hgetAsync ------------------------ public CompletableFuture hgetAsync(final String key, final String field, final Type type); - public CompletableFuture hgetStringAsync(final String key, final String field); + default CompletableFuture hgetStringAsync(final String key, final String field) { + return hgetAsync(key, field, String.class); + } - public CompletableFuture hgetLongAsync(final String key, final String field, long defValue); + default CompletableFuture hgetLongAsync(final String key, final String field, long defValue) { + return hgetAsync(key, field, Long.class).thenApply(v -> v == null ? defValue : (Long) v); + } //------------------------ hsetAsync ------------------------ - public CompletableFuture hsetAsync(final String key, final String field, final Type type, final T value); - public CompletableFuture hsetAsync(final String key, final String field, final Convert convert, final Type type, final T value); - public CompletableFuture hsetStringAsync(final String key, final String field, final String value); + default CompletableFuture hsetAsync(final String key, final String field, final Type type, final T value) { + return hsetAsync(key, field, (Convert) null, type, value); + } - public CompletableFuture hsetLongAsync(final String key, final String field, final long value); + default CompletableFuture hsetStringAsync(final String key, final String field, final String value) { + return hsetAsync(key, field, String.class, value); + } + + default CompletableFuture hsetLongAsync(final String key, final String field, final long value) { + return hsetAsync(key, field, Long.class, value); + } //------------------------ hsetnxAsync ------------------------ - public CompletableFuture hsetnxAsync(final String key, final String field, final Type type, final T value); - public CompletableFuture hsetnxAsync(final String key, final String field, final Convert convert, final Type type, final T value); - public CompletableFuture hsetnxStringAsync(final String key, final String field, final String value); + default CompletableFuture hsetnxAsync(final String key, final String field, final Type type, final T value) { + return hsetnxAsync(key, field, (Convert) null, type, value); + } - public CompletableFuture hsetnxLongAsync(final String key, final String field, final long value); + default CompletableFuture hsetnxStringAsync(final String key, final String field, final String value) { + return hsetnxAsync(key, field, String.class, value); + } + + default CompletableFuture hsetnxLongAsync(final String key, final String field, final long value) { + return hsetnxAsync(key, field, Long.class, value); + } //------------------------ hgetallAsync ------------------------ public CompletableFuture> hgetallAsync(final String key, final Type type); - public CompletableFuture> hgetallStringAsync(final String key); + default CompletableFuture> hgetallStringAsync(final String key) { + return hgetallAsync(key, String.class); + } - public CompletableFuture> hgetallLongAsync(final String key); + default CompletableFuture> hgetallLongAsync(final String key) { + return hgetallAsync(key, Long.class); + } //------------------------ hvalsAsync ------------------------ public CompletableFuture> hvalsAsync(final String key, final Type type); - public CompletableFuture> hvalsStringAsync(final String key); + default CompletableFuture> hvalsStringAsync(final String key) { + return hvalsAsync(key, String.class); + } - public CompletableFuture> hvalsLongAsync(final String key); + default CompletableFuture> hvalsLongAsync(final String key) { + return hvalsAsync(key, Long.class); + } //------------------------ hxxxAsync ------------------------ - public CompletableFuture hdelAsync(final String key, String... fields); + public CompletableFuture hdelAsync(final String key, String... fields); public CompletableFuture> hkeysAsync(final String key); - public CompletableFuture hlenAsync(final String key); + public CompletableFuture hlenAsync(final String key); public CompletableFuture hincrAsync(final String key, String field); @@ -671,17 +801,35 @@ public interface CacheSource extends Resourcable { public CompletableFuture> hmgetAsync(final String key, final Type type, final String... fields); - default CompletableFuture> hscanAsync(final String key, final Type type, AtomicLong cursor, int limit) { - return hscanAsync(key, type, cursor, limit, null); + default CompletableFuture> hmgetStringAsync(final String key, final String... fields) { + return hmgetAsync(key, String.class, fields); + } + + default CompletableFuture> hmgetLongAsync(final String key, final String... fields) { + return hmgetAsync(key, Long.class, fields); } public CompletableFuture> hscanAsync(final String key, final Type type, AtomicLong cursor, int limit, String pattern); + default CompletableFuture> hscanAsync(final String key, final Type type, AtomicLong cursor, int limit) { + return hscanAsync(key, type, cursor, limit, null); + } + //------------------------ listAsync ------------------------ - public CompletableFuture llenAsync(final String key); + public CompletableFuture llenAsync(final String key); + + public CompletableFuture ltrimAsync(final String key, int start, int stop); public CompletableFuture>> lrangeAsync(final Type componentType, final String... keys); + default CompletableFuture>> lrangeStringAsync(final String... keys) { + return lrangeAsync(String.class, keys); + } + + default CompletableFuture>> lrangeLongAsync(final String... keys) { + return lrangeAsync(Long.class, keys); + } + public CompletableFuture> lrangeAsync(final String key, final Type componentType, int start, int stop); default CompletableFuture> lrangeStringAsync(final String key, int start, int stop) { @@ -704,8 +852,6 @@ public interface CacheSource extends Resourcable { return lrangeAsync(key, Long.class, 0, -1); } - public CompletableFuture ltrimAsync(final String key, int start, int stop); - public CompletableFuture lpopAsync(final String key, final Type componentType); default CompletableFuture lpopStringAsync(final String key) { @@ -726,24 +872,24 @@ public interface CacheSource extends Resourcable { return lpushAsync(key, Long.class, values); } - public CompletableFuture lpushxAsync(final String key, final Type componentType, T value); + public CompletableFuture lpushxAsync(final String key, final Type componentType, T... values); - default CompletableFuture lpushxStringAsync(final String key, String value) { - return lpushxAsync(key, String.class, value); + default CompletableFuture lpushxStringAsync(final String key, String... values) { + return lpushxAsync(key, String.class, values); } - default CompletableFuture lpushxLongAsync(final String key, Long value) { - return lpushxAsync(key, Long.class, value); + default CompletableFuture lpushxLongAsync(final String key, Long... values) { + return lpushxAsync(key, Long.class, values); } - public CompletableFuture rpushxAsync(final String key, final Type componentType, T value); + public CompletableFuture rpushxAsync(final String key, final Type componentType, T... values); - default CompletableFuture rpushxStringAsync(final String key, String value) { - return rpushxAsync(key, String.class, value); + default CompletableFuture rpushxStringAsync(final String key, String... values) { + return rpushxAsync(key, String.class, values); } - default CompletableFuture rpushxLongAsync(final String key, Long value) { - return rpushxAsync(key, Long.class, value); + default CompletableFuture rpushxLongAsync(final String key, Long... values) { + return rpushxAsync(key, Long.class, values); } public CompletableFuture rpopAsync(final String key, final Type componentType); @@ -756,14 +902,14 @@ public interface CacheSource extends Resourcable { return rpopAsync(key, Long.class); } - public CompletableFuture rpoplpushAsync(final String list1, final String list2, final Type componentType); + public CompletableFuture rpoplpushAsync(final String key, final String key2, final Type componentType); - default CompletableFuture rpoplpushStringAsync(final String list1, final String list2) { - return rpoplpushAsync(list1, list2, String.class); + default CompletableFuture rpoplpushStringAsync(final String key, final String key2) { + return rpoplpushAsync(key, key2, String.class); } - default CompletableFuture rpoplpushLongAsync(final String list1, final String list2) { - return rpoplpushAsync(list1, list2, Long.class); + default CompletableFuture rpoplpushLongAsync(final String key, final String key2) { + return rpoplpushAsync(key, key2, Long.class); } public CompletableFuture lremAsync(final String key, final Type componentType, final T value); @@ -776,39 +922,91 @@ public interface CacheSource extends Resourcable { return lremAsync(key, Long.class, value); } - public CompletableFuture rpushAsync(final String key, final Type componentType, final T value); + public CompletableFuture rpushAsync(final String key, final Type componentType, final T... values); - default CompletableFuture rpushStringAsync(final String key, final String value) { - return rpushAsync(key, String.class, value); + default CompletableFuture rpushStringAsync(final String key, final String... values) { + return rpushAsync(key, String.class, values); } - default CompletableFuture rpushLongAsync(final String key, final long value) { - return rpushAsync(key, Long.class, value); + default CompletableFuture rpushLongAsync(final String key, final Long... values) { + return rpushAsync(key, Long.class, values); } //------------------------ setAsync ------------------------ - public CompletableFuture scardAsync(final String key); + public CompletableFuture scardAsync(final String key); public CompletableFuture> smembersAsync(final String key, final Type componentType); + default CompletableFuture> smembersStringAsync(final String key) { + return smembersAsync(key, String.class); + } + + default CompletableFuture> smembersLongAsync(final String key) { + return smembersAsync(key, Long.class); + } + public CompletableFuture>> smembersAsync(final Type componentType, final String... keys); + default CompletableFuture>> smembersStringAsync(final String... keys) { + return smembersAsync(String.class, keys); + } + + default CompletableFuture>> smembersLongAsync(final String... keys) { + return smembersAsync(Long.class, keys); + } + public CompletableFuture sismemberAsync(final String key, final Type componentType, final T value); + default CompletableFuture sismemberStringAsync(final String key, final String value) { + return sismemberAsync(key, String.class, value); + } + + default CompletableFuture sismemberLongAsync(final String key, final long value) { + return sismemberAsync(key, Long.class, value); + } + public CompletableFuture saddAsync(final String key, final Type componentType, final T value); + default CompletableFuture saddStringAsync(final String key, final String value) { + return saddAsync(key, String.class, value); + } + + default CompletableFuture saddLongAsync(final String key, final long value) { + return saddAsync(key, Long.class, value); + } + public CompletableFuture sremAsync(final String key, final Type componentType, final T value); + default CompletableFuture sremStringAsync(final String key, final String value) { + return sremAsync(key, String.class, value); + } + + default CompletableFuture sremLongAsync(final String key, final long value) { + return sremAsync(key, Long.class, value); + } + public CompletableFuture spopAsync(final String key, final Type componentType); + default CompletableFuture spopStringAsync(final String key) { + return spopAsync(key, String.class); + } + + default CompletableFuture spopLongAsync(final String key) { + return spopAsync(key, Long.class); + } + public CompletableFuture> spopAsync(final String key, final int count, final Type componentType); - public CompletableFuture> sscanAsync(final String key, final Type componentType, AtomicLong cursor, int limit, String pattern); - - default CompletableFuture> sscanAsync(final String key, final Type componentType, AtomicLong cursor, int limit) { - return sscanAsync(key, componentType, cursor, limit, null); + default CompletableFuture> spopStringAsync(final String key, final int count) { + return spopAsync(key, count, String.class); } + default CompletableFuture> spopLongAsync(final String key, final int count) { + return spopAsync(key, count, Long.class); + } + + public CompletableFuture> sscanAsync(final String key, final Type componentType, AtomicLong cursor, int limit, String pattern); + default CompletableFuture> sscanStringAsync(final String key, AtomicLong cursor, int limit, String pattern) { return sscanAsync(key, String.class, cursor, limit, pattern); } @@ -817,6 +1015,10 @@ public interface CacheSource extends Resourcable { return sscanAsync(key, Long.class, cursor, limit, pattern); } + default CompletableFuture> sscanAsync(final String key, final Type componentType, AtomicLong cursor, int limit) { + return sscanAsync(key, componentType, cursor, limit, null); + } + default CompletableFuture> sscanStringAsync(final String key, AtomicLong cursor, int limit) { return sscanAsync(key, String.class, cursor, limit); } @@ -825,33 +1027,9 @@ public interface CacheSource extends Resourcable { return sscanAsync(key, Long.class, cursor, limit); } - //---------- set-string ---------- - default CompletableFuture> smembersStringAsync(final String key) { - return smembersAsync(key, String.class); - } - - public CompletableFuture sismemberStringAsync(final String key, final String value); - - public CompletableFuture saddStringAsync(final String key, final String value); - - public CompletableFuture sremStringAsync(final String key, final String value); - - public CompletableFuture spopStringAsync(final String key); - - public CompletableFuture> spopStringAsync(final String key, final int count); - - //---------- set-long ---------- - public CompletableFuture sismemberLongAsync(final String key, final long value); - - public CompletableFuture saddLongAsync(final String key, final long value); - - public CompletableFuture sremLongAsync(final String key, final long value); - - public CompletableFuture spopLongAsync(final String key); - - public CompletableFuture> spopLongAsync(final String key, final int count); - //------------------------ keys-Async ------------------------ + public CompletableFuture> keysAsync(String pattern); + default CompletableFuture> keysAsync() { return keysAsync(null); } @@ -860,14 +1038,12 @@ public interface CacheSource extends Resourcable { return keysAsync(startsWith + "*"); } - public CompletableFuture> keysAsync(String pattern); + public CompletableFuture> scanAsync(AtomicLong cursor, int limit, String pattern); default CompletableFuture> scanAsync(AtomicLong cursor, int limit) { return scanAsync(cursor, limit, null); } - public CompletableFuture> scanAsync(AtomicLong cursor, int limit, String pattern); - public CompletableFuture dbsizeAsync(); public CompletableFuture flushdbAsync(); @@ -942,7 +1118,7 @@ public interface CacheSource extends Resourcable { @Deprecated(since = "2.8.0") default CompletableFuture hremoveAsync(final String key, String... fields) { - return hdelAsync(key, fields); + return hdelAsync(key, fields).thenApply(v -> v.intValue()); } @Deprecated(since = "2.8.0") @@ -967,12 +1143,12 @@ public interface CacheSource extends Resourcable { @Deprecated(since = "2.8.0") default CompletableFuture removeAsync(final String key) { - return delAsync(key); + return delAsync(key).thenApply(v -> v.intValue()); } @Deprecated(since = "2.8.0") default int hremove(final String key, String... fields) { - return hdel(key, fields); + return (int) hdel(key, fields); } @Deprecated(since = "2.8.0") @@ -1002,7 +1178,7 @@ public interface CacheSource extends Resourcable { @Deprecated(since = "2.8.0") default int remove(final String key) { - return del(key); + return (int) del(key); } @Deprecated(since = "2.8.0") @@ -1015,11 +1191,6 @@ public interface CacheSource extends Resourcable { setexLong(key, expireSeconds, value); } - @Deprecated(since = "2.8.0") - default void setBytes(final int expireSeconds, final String key, final byte[] value) { - setexBytes(key, expireSeconds, value); - } - @Deprecated(since = "2.8.0") default CompletableFuture getAndRefreshAsync(final String key, final int expireSeconds, final Type type) { return getexAsync(key, expireSeconds, type); @@ -1040,11 +1211,6 @@ public interface CacheSource extends Resourcable { return getexLong(key, expireSeconds, defValue); } - @Deprecated(since = "2.8.0") - default byte[] getBytesAndRefresh(final String key, final int expireSeconds) { - return getexBytes(key, expireSeconds); - } - @Deprecated(since = "2.8.0") default CompletableFuture getLongAndRefreshAsync(final String key, final int expireSeconds, long defValue) { return getexLongAsync(key, expireSeconds, defValue); @@ -1055,19 +1221,14 @@ public interface CacheSource extends Resourcable { return getexStringAsync(key, expireSeconds); } - @Deprecated(since = "2.8.0") - default CompletableFuture getBytesAndRefreshAsync(final String key, final int expireSeconds) { - return getexBytesAsync(key, expireSeconds); - } - @Deprecated(since = "2.8.0") default int hsize(final String key) { - return hlen(key); + return (int) hlen(key); } @Deprecated(since = "2.8.0") default CompletableFuture hsizeAsync(final String key) { - return hlenAsync(key); + return hlenAsync(key).thenApply(v -> v.intValue()); } @Deprecated(since = "2.8.0") @@ -1379,4 +1540,24 @@ public interface CacheSource extends Resourcable { default int getKeySize() { return (int) dbsize(); } + + @Deprecated(since = "2.8.0") + default CompletableFuture> hmapAsync(final String key, final Type type, int start, int limit, String pattern) { + return hscanAsync(key, type, new AtomicLong(start), limit, pattern); + } + + @Deprecated(since = "2.8.0") + default CompletableFuture> hmapAsync(final String key, final Type type, int start, int limit) { + return hscanAsync(key, type, new AtomicLong(start), limit); + } + + @Deprecated(since = "2.8.0") + default Map hmap(final String key, final Type type, int start, int limit, String pattern) { + return hscan(key, type, new AtomicLong(start), limit, pattern); + } + + @Deprecated(since = "2.8.0") + default Map hmap(final String key, final Type type, int start, int limit) { + return hscan(key, type, new AtomicLong(start), limit); + } }