CacheSource增加smismember方法

This commit is contained in:
redkale
2023-06-11 22:53:17 +08:00
parent a00a5eb5e2
commit 3d379d59ef
2 changed files with 305 additions and 76 deletions

View File

@@ -154,6 +154,11 @@ public final class CacheMemorySource extends AbstractCacheSource {
}
}
@Override
public CompletableFuture<Boolean> isOpenAsync() {
return CompletableFuture.completedFuture(true);
}
//----------- hxxx --------------
@Override
public long hdel(final String key, String... fields) {
@@ -932,6 +937,11 @@ public final class CacheMemorySource extends AbstractCacheSource {
return supplyAsync(() -> sdiffstore(key, srcKey, srcKey2s), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<List<Boolean>> smismembersAsync(final String key, final String... members) {
return supplyAsync(() -> smismembers(key, members), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public <T> Set<T> sdiff(final String key, final Type componentType, final String... key2s) {
Set<T> rs = new HashSet<>();
@@ -951,18 +961,56 @@ public final class CacheMemorySource extends AbstractCacheSource {
@Override
public long sdiffstore(final String key, final String srcKey, final String... srcKey2s) {
Set rs = new HashSet<>();
CacheEntry entry = container.get(srcKey);
Set rs = sdiff(srcKey, Object.class, srcKey2s);
if (container.containsKey(key)) {
CopyOnWriteArraySet set = container.get(srcKey).csetValue;
set.clear();
set.addAll(rs);
} else {
appendSetItem(CacheEntryType.OBJECT_SET, key, rs);
}
return rs.size();
}
@Override
public <T> CompletableFuture<Set<T>> sinterAsync(final String key, final Type componentType, final String... key2s) {
return supplyAsync(() -> sinter(key, componentType, key2s), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<Long> sinterstoreAsync(final String key, final String srcKey, final String... srcKey2s) {
return supplyAsync(() -> sinterstore(key, srcKey, srcKey2s), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public <T> Set<T> sinter(final String key, final Type componentType, final String... key2s) {
Set<T> rs = new HashSet<>();
CacheEntry entry = container.get(key);
if (entry == null || entry.csetValue == null) {
return 0L;
return rs;
}
rs.addAll(entry.csetValue);
for (String k : srcKey2s) {
for (String k : key2s) {
CacheEntry en2 = container.get(k);
if (en2 != null && en2.csetValue != null) {
en2.csetValue.forEach(v -> rs.remove(v));
Set<T> removes = new HashSet<>();
for (T v : rs) {
if (!en2.csetValue.contains(v)) {
removes.add(v);
}
}
rs.removeAll(removes);
} else {
rs.clear();
return rs;
}
}
return rs;
}
@Override
public long sinterstore(final String key, final String srcKey, final String... srcKey2s) {
Set rs = sinter(srcKey, Object.class, srcKey2s);
if (container.containsKey(key)) {
CopyOnWriteArraySet set = container.get(srcKey).csetValue;
set.clear();
@@ -995,6 +1043,16 @@ public final class CacheMemorySource extends AbstractCacheSource {
return map;
}
@Override
public List<Boolean> smismembers(final String key, final String... members) {
Set s = (Set) get(key, Object.class);
List<Boolean> rs = new ArrayList<>();
for (String member : members) {
rs.add(s != null && s.contains(member));
}
return rs;
}
@Override
public <T> Map<String, List<T>> lrange(final Type componentType, final String... keys) {
Map<String, List<T>> map = new HashMap<>();

View File

@@ -33,11 +33,13 @@ public interface CacheSource extends Resourcable {
public String getType();
default boolean isOpen() {
return true;
return isOpenAsync().join();
}
//------------------------ get ------------------------
public <T> T get(final String key, final Type type);
default <T> T get(final String key, final Type type) {
return (T) getAsync(key, type).join();
}
default String getString(final String key) {
return get(key, String.class);
@@ -49,7 +51,9 @@ public interface CacheSource extends Resourcable {
}
//------------------------ mget ------------------------
public <T> Map<String, T> mget(final Type componentType, final String... keys);
default <T> Map<String, T> mget(final Type componentType, final String... keys) {
return (Map) mgetAsync(componentType, keys).join();
}
default Map<String, String> mgetString(final String... keys) {
return mget(String.class, keys);
@@ -87,7 +91,9 @@ public interface CacheSource extends Resourcable {
}
//------------------------ getex ------------------------
public <T> T getex(final String key, final int expireSeconds, final Type type);
default <T> T getex(final String key, final int expireSeconds, final Type type) {
return (T) getexAsync(key, expireSeconds, type).join();
}
default String getexString(final String key, final int expireSeconds) {
return getex(key, expireSeconds, String.class);
@@ -99,7 +105,9 @@ public interface CacheSource extends Resourcable {
}
//------------------------ getset ------------------------
public <T> T getSet(final String key, final Convert convert, final Type type, final T value);
default <T> T getSet(final String key, final Convert convert, final Type type, final T value) {
return getSetAsync(key, convert, type, value).join();
}
default <T> T getSet(final String key, final Type type, final T value) {
return getSet(key, (Convert) null, type, value);
@@ -116,11 +124,17 @@ public interface CacheSource extends Resourcable {
//------------------------ set ------------------------
//MSET key value [key value ...]
public void mset(final Serializable... keyVals);
default void mset(final Serializable... keyVals) {
msetAsync(keyVals).join();
}
public void mset(final Map map);
default void mset(final Map map) {
msetAsync(map).join();
}
public <T> void set(final String key, final Convert convert, final Type type, final T value);
default <T> void set(final String key, final Convert convert, final Type type, final T value) {
setAsync(key, convert, type, value).join();
}
default <T> void set(final String key, final Type type, final T value) {
set(key, (Convert) null, type, value);
@@ -135,7 +149,9 @@ public interface CacheSource extends Resourcable {
}
//------------------------ setnx ------------------------
public <T> boolean setnx(final String key, final Convert convert, final Type type, final T value);
default <T> boolean setnx(final String key, final Convert convert, final Type type, final T value) {
return setnxAsync(key, convert, type, value).join();
}
default <T> boolean setnx(final String key, final Type type, final T value) {
return setnx(key, (Convert) null, type, value);
@@ -150,7 +166,9 @@ public interface CacheSource extends Resourcable {
}
//------------------------ setnxex ------------------------
public <T> boolean setnxex(final String key, final int expireSeconds, final Convert convert, final Type type, final T value);
default <T> boolean setnxex(final String key, final int expireSeconds, final Convert convert, final Type type, final T value) {
return setnxexAsync(key, expireSeconds, convert, type, value).join();
}
default <T> boolean setnxex(final String key, final int expireSeconds, final Type type, final T value) {
return setnxex(key, expireSeconds, (Convert) null, type, value);
@@ -165,7 +183,9 @@ public interface CacheSource extends Resourcable {
}
//------------------------ setex ------------------------
public <T> void setex(final String key, final int expireSeconds, final Convert convert, final Type type, final T value);
default <T> void setex(final String key, final int expireSeconds, final Convert convert, final Type type, final T value) {
setexAsync(key, expireSeconds, convert, type, value).join();
}
default <T> void setex(final String key, final int expireSeconds, final Type type, final T value) {
setex(key, expireSeconds, (Convert) null, type, value);
@@ -180,30 +200,54 @@ public interface CacheSource extends Resourcable {
}
//------------------------ xxxx ------------------------
public boolean exists(final String key);
default boolean exists(final String key) {
return existsAsync(key).join();
}
public void expire(final String key, final int seconds);
default void expire(final String key, final int expireSeconds) {
expireAsync(key, expireSeconds).join();
}
public boolean persist(final String key);
default boolean persist(final String key) {
return persistAsync(key).join();
}
public boolean rename(String oldKey, String newKey);
default boolean rename(String oldKey, String newKey) {
return renameAsync(oldKey, newKey).join();
}
public boolean renamenx(String oldKey, String newKey);
default boolean renamenx(String oldKey, String newKey) {
return renamenxAsync(oldKey, newKey).join();
}
public long del(final String... keys);
default long del(final String... keys) {
return delAsync(keys).join();
}
public long incr(final String key);
default long incr(final String key) {
return incrAsync(key).join();
}
public long incrby(final String key, long num);
default long incrby(final String key, long num) {
return incrbyAsync(key, num).join();
}
public long decr(final String key);
default double incrbyFloat(final String key, double num) {
return incrbyFloatAsync(key, num).join();
}
public long decrby(final String key, long num);
default long decr(final String key) {
return decrAsync(key).join();
}
public double incrbyFloat(final String key, double num);
default long decrby(final String key, long num) {
return decrbyAsync(key, num).join();
}
//------------------------ 键 Keys ------------------------
public List<String> keys(String pattern);
default List<String> keys(String pattern) {
return keysAsync(pattern).join();
}
default List<String> keys() {
return keys(null);
@@ -213,43 +257,75 @@ public interface CacheSource extends Resourcable {
return keys(startsWith + "*");
}
public List<String> scan(AtomicLong cursor, int limit, String pattern);
default List<String> scan(AtomicLong cursor, int limit, String pattern) {
return scanAsync(cursor, limit, pattern).join();
}
default List<String> scan(AtomicLong cursor, int limit) {
return scan(cursor, limit, null);
}
//------------------------ 服务器 Server ------------------------
public long dbsize();
default long dbsize() {
return dbsizeAsync().join();
}
public void flushdb();
default void flushdb() {
flushdbAsync().join();
}
public void flushall();
default void flushall() {
flushallAsync().join();
}
//------------------------ 哈希表 Hash ------------------------
public long hdel(final String key, String... fields);
default long hdel(final String key, String... fields) {
return hdelAsync(key, fields).join();
}
public List<String> hkeys(final String key);
default List<String> hkeys(final String key) {
return hkeysAsync(key).join();
}
public long hlen(final String key);
default long hlen(final String key) {
return hlenAsync(key).join();
}
public long hincr(final String key, String field);
default long hincr(final String key, String field) {
return hincrAsync(key, field).join();
}
public long hincrby(final String key, String field, long num);
default long hincrby(final String key, String field, long num) {
return hincrbyAsync(key, field, num).join();
}
public double hincrbyFloat(final String key, String field, double num);
default double hincrbyFloat(final String key, String field, double num) {
return hincrbyFloatAsync(key, field, num).join();
}
public long hdecr(final String key, String field);
default long hdecr(final String key, String field) {
return hdecrAsync(key, field).join();
}
public long hdecrby(final String key, String field, long num);
default long hdecrby(final String key, String field, long num) {
return hdecrbyAsync(key, field, num).join();
}
public boolean hexists(final String key, String field);
default boolean hexists(final String key, String field) {
return hexistsAsync(key, field).join();
}
public void hmset(final String key, final Serializable... values);
default void hmset(final String key, final Serializable... values) {
hmsetAsync(key, values).join();
}
public void hmset(final String key, final Map map);
default void hmset(final String key, final Map map) {
hmsetAsync(key, map).join();
}
public <T> List<T> hmget(final String key, final Type type, final String... fields);
default <T> List<T> hmget(final String key, final Type type, final String... fields) {
return (List) hmgetAsync(key, type, fields).join();
}
default List<String> hmgetString(final String key, final String... fields) {
return hmget(key, String.class, fields);
@@ -259,13 +335,17 @@ public interface CacheSource extends Resourcable {
return hmget(key, Long.class, fields);
}
public <T> Map<String, T> hscan(final String key, final Type type, AtomicLong cursor, int limit, String pattern);
default <T> Map<String, T> hscan(final String key, final Type type, AtomicLong cursor, int limit, String pattern) {
return (Map) hscanAsync(key, type, cursor, limit, pattern).join();
}
default <T> Map<String, T> hscan(final String key, final Type type, AtomicLong cursor, int limit) {
return hscan(key, type, cursor, limit, null);
}
public <T> T hget(final String key, final String field, final Type type);
default <T> T hget(final String key, final String field, final Type type) {
return (T) hgetAsync(key, field, type).join();
}
default String hgetString(final String key, final String field) {
return hget(key, field, String.class);
@@ -276,7 +356,9 @@ public interface CacheSource extends Resourcable {
return val == null ? defValue : val;
}
public <T> void hset(final String key, final String field, final Convert convert, final Type type, final T value);
default <T> void hset(final String key, final String field, final Convert convert, final Type type, final T value) {
hsetAsync(key, field, convert, type, value).join();
}
default <T> void hset(final String key, final String field, final Type type, final T value) {
hset(key, field, (Convert) null, type, value);
@@ -290,7 +372,9 @@ public interface CacheSource extends Resourcable {
hset(key, field, Long.class, value);
}
public <T> boolean hsetnx(final String key, final String field, final Convert convert, final Type type, final T value);
default <T> boolean hsetnx(final String key, final String field, final Convert convert, final Type type, final T value) {
return hsetnxAsync(key, field, convert, type, value).join();
}
default <T> boolean hsetnx(final String key, final String field, final Type type, final T value) {
return hsetnx(key, field, (Convert) null, type, value);
@@ -304,7 +388,9 @@ public interface CacheSource extends Resourcable {
return hsetnx(key, field, Long.class, value);
}
public <T> Map<String, T> hgetall(final String key, final Type type);
default <T> Map<String, T> hgetall(final String key, final Type type) {
return (Map) hgetallAsync(key, type).join();
}
default Map<String, String> hgetallString(final String key) {
return hgetall(key, String.class);
@@ -314,7 +400,9 @@ public interface CacheSource extends Resourcable {
return hgetall(key, Long.class);
}
public <T> List<T> hvals(final String key, final Type type);
default <T> List<T> hvals(final String key, final Type type) {
return (List) hvalsAsync(key, type).join();
}
default List<String> hvalsString(final String key) {
return hvals(key, String.class);
@@ -325,11 +413,17 @@ public interface CacheSource extends Resourcable {
}
//------------------------ 列表 List ------------------------
public long llen(final String key);
default long llen(final String key) {
return llenAsync(key).join();
}
public void ltrim(final String key, int start, int stop);
default void ltrim(final String key, int start, int stop) {
ltrimAsync(key, start, stop).join();
}
public <T> Map<String, List<T>> lrange(final Type componentType, final String... keys);
default <T> Map<String, List<T>> lrange(final Type componentType, final String... keys) {
return (Map) lrangeAsync(componentType, keys).join();
}
default Map<String, List<String>> lrangeString(final String... keys) {
return lrange(String.class, keys);
@@ -339,7 +433,9 @@ public interface CacheSource extends Resourcable {
return lrange(Long.class, keys);
}
public <T> List<T> lrange(final String key, final Type componentType, int start, int stop);
default <T> List<T> lrange(final String key, final Type componentType, int start, int stop) {
return (List) lrangeAsync(key, componentType, start, stop).join();
}
default List<String> lrangeString(final String key, int start, int stop) {
return lrange(key, String.class, start, stop);
@@ -361,7 +457,9 @@ public interface CacheSource extends Resourcable {
return lrange(key, Long.class, 0, -1);
}
public <T> T lpop(final String key, final Type componentType);
default <T> T lpop(final String key, final Type componentType) {
return (T) lpopAsync(key, componentType).join();
}
default String lpopString(final String key) {
return lpop(key, String.class);
@@ -371,7 +469,9 @@ public interface CacheSource extends Resourcable {
return lpop(key, Long.class);
}
public <T> void lpush(final String key, final Type componentType, T... values);
default <T> void lpush(final String key, final Type componentType, T... values) {
lpushAsync(key, componentType, values).join();
}
default void lpushString(final String key, String... values) {
lpush(key, String.class, values);
@@ -381,7 +481,9 @@ public interface CacheSource extends Resourcable {
lpush(key, Long.class, values);
}
public <T> void lpushx(final String key, final Type componentType, T... values);
default <T> void lpushx(final String key, final Type componentType, T... values) {
lpushxAsync(key, componentType, values).join();
}
default void lpushxString(final String key, String... values) {
lpushx(key, String.class, values);
@@ -391,7 +493,9 @@ public interface CacheSource extends Resourcable {
lpushx(key, Long.class, values);
}
public <T> void rpushx(final String key, final Type componentType, T... values);
default <T> void rpushx(final String key, final Type componentType, T... values) {
rpushxAsync(key, componentType, values).join();
}
default void rpushxString(final String key, String... values) {
rpushx(key, String.class, values);
@@ -401,7 +505,9 @@ public interface CacheSource extends Resourcable {
rpushx(key, Long.class, values);
}
public <T> T rpop(final String key, final Type componentType);
default <T> T rpop(final String key, final Type componentType) {
return (T) rpopAsync(key, componentType).join();
}
default String rpopString(final String key) {
return rpop(key, String.class);
@@ -411,7 +517,9 @@ public interface CacheSource extends Resourcable {
return rpop(key, Long.class);
}
public <T> T rpoplpush(final String key, final String key2, final Type componentType);
default <T> T rpoplpush(final String key, final String key2, final Type componentType) {
return (T) rpoplpushAsync(key, key2, componentType).join();
}
default String rpoplpushString(final String key, final String key2) {
return rpoplpush(key, key2, String.class);
@@ -421,7 +529,9 @@ public interface CacheSource extends Resourcable {
return rpoplpush(key, key2, Long.class);
}
public <T> int lrem(final String key, final Type componentType, final T value);
default <T> int lrem(final String key, final Type componentType, final T value) {
return lremAsync(key, componentType, value).join();
}
default int lremString(final String key, final String value) {
return lrem(key, String.class, value);
@@ -431,7 +541,9 @@ public interface CacheSource extends Resourcable {
return lrem(key, Long.class, value);
}
public <T> void rpush(final String key, final Type componentType, final T... values);
default <T> void rpush(final String key, final Type componentType, final T... values) {
rpushAsync(key, componentType, values).join();
}
default void rpushString(final String key, final String... values) {
rpush(key, String.class, values);
@@ -442,7 +554,9 @@ public interface CacheSource extends Resourcable {
}
//------------------------ 集合 Set ------------------------
public <T> void sadd(final String key, final Type componentType, final T... values);
default <T> void sadd(final String key, final Type componentType, final T... values) {
saddAsync(key, componentType, values).join();
}
default void saddString(final String key, final String... values) {
sadd(key, String.class, values);
@@ -452,7 +566,9 @@ public interface CacheSource extends Resourcable {
sadd(key, Long.class, values);
}
public <T> Set<T> sdiff(final String key, final Type componentType, final String... key2s);
default <T> Set<T> sdiff(final String key, final Type componentType, final String... key2s) {
return (Set) sdiffAsync(key, componentType, key2s).join();
}
default Set<String> sdiffString(final String key, final String... key2s) {
return sdiff(key, String.class, key2s);
@@ -462,11 +578,33 @@ public interface CacheSource extends Resourcable {
return sdiff(key, Long.class, key2s);
}
public long sdiffstore(final String key, final String srcKey, final String... srcKey2s);
default long sdiffstore(final String key, final String srcKey, final String... srcKey2s) {
return sdiffstoreAsync(key, srcKey, srcKey2s).join();
}
public long scard(final String key);
default <T> Set<T> sinter(final String key, final Type componentType, final String... key2s) {
return (Set) sinterAsync(key, componentType, key2s).join();
}
public <T> Set<T> smembers(final String key, final Type componentType);
default Set<String> sinterString(final String key, final String... key2s) {
return sinter(key, String.class, key2s);
}
default Set<Long> sinterLong(final String key, final String... key2s) {
return sinter(key, Long.class, key2s);
}
default long sinterstore(final String key, final String srcKey, final String... srcKey2s) {
return sinterstoreAsync(key, srcKey, srcKey2s).join();
}
default long scard(final String key) {
return scardAsync(key).join();
}
default <T> Set<T> smembers(final String key, final Type componentType) {
return (Set) smembersAsync(key, componentType).join();
}
default Set<String> smembersString(final String key) {
return smembers(key, String.class);
@@ -476,7 +614,9 @@ public interface CacheSource extends Resourcable {
return smembers(key, Long.class);
}
public <T> Map<String, Set<T>> smembers(final Type componentType, final String... keys);
default <T> Map<String, Set<T>> smembers(final Type componentType, final String... keys) {
return (Map) smembersAsync(componentType, keys).join();
}
default Map<String, Set<String>> smembersString(final String... keys) {
return smembers(String.class, keys);
@@ -486,7 +626,9 @@ public interface CacheSource extends Resourcable {
return smembers(Long.class, keys);
}
public <T> boolean sismember(final String key, final Type componentType, final T value);
default <T> boolean sismember(final String key, final Type componentType, final T value) {
return sismemberAsync(key, componentType, value).join();
}
default boolean sismemberString(final String key, final String value) {
return sismember(key, String.class, value);
@@ -496,7 +638,18 @@ public interface CacheSource extends Resourcable {
return sismember(key, Long.class, value);
}
public <T> long srem(final String key, final Type componentType, final T... values);
default boolean smismember(final String key, final String member) {
List<Boolean> rs = smismembers(key, member);
return rs.get(0);
}
default List<Boolean> smismembers(final String key, final String... members) {
return smismembersAsync(key, members).join();
}
default <T> long srem(final String key, final Type componentType, final T... values) {
return sremAsync(key, componentType, values).join();
}
default long sremString(final String key, final String... values) {
return srem(key, String.class, values);
@@ -506,7 +659,9 @@ public interface CacheSource extends Resourcable {
return srem(key, Long.class, values);
}
public <T> T spop(final String key, final Type componentType);
default <T> T spop(final String key, final Type componentType) {
return (T) spopAsync(key, componentType).join();
}
default String spopString(final String key) {
return spop(key, String.class);
@@ -516,7 +671,9 @@ public interface CacheSource extends Resourcable {
return spop(key, Long.class);
}
public <T> Set<T> spop(final String key, final int count, final Type componentType);
default <T> Set<T> spop(final String key, final int count, final Type componentType) {
return (Set) spopAsync(key, count, componentType).join();
}
default Set<String> spopString(final String key, final int count) {
return spop(key, count, String.class);
@@ -526,7 +683,9 @@ public interface CacheSource extends Resourcable {
return spop(key, count, Long.class);
}
public <T> Set<T> sscan(final String key, final Type componentType, AtomicLong cursor, int limit, String pattern);
default <T> Set<T> sscan(final String key, final Type componentType, AtomicLong cursor, int limit, String pattern) {
return (Set) sscanAsync(key, componentType, cursor, limit, pattern).join();
}
default Set<String> sscanString(final String key, AtomicLong cursor, int limit, String pattern) {
return sscan(key, String.class, cursor, limit, pattern);
@@ -549,9 +708,7 @@ public interface CacheSource extends Resourcable {
}
//---------------------- CompletableFuture 异步版 ---------------------------------
default CompletableFuture<Boolean> isOpenAsync() {
return CompletableFuture.completedFuture(isOpen());
}
public CompletableFuture<Boolean> isOpenAsync();
//------------------------ getAsync ------------------------
public <T> CompletableFuture<T> getAsync(final String key, final Type type);
@@ -980,6 +1137,18 @@ public interface CacheSource extends Resourcable {
public CompletableFuture<Long> sdiffstoreAsync(final String key, final String srcKey, final String... srcKey2s);
public <T> CompletableFuture<Set<T>> sinterAsync(final String key, final Type componentType, final String... key2s);
default CompletableFuture<Set<String>> sinterStringAsync(final String key, final String... key2s) {
return sinterAsync(key, String.class, key2s);
}
default CompletableFuture<Set<Long>> sinterLongAsync(final String key, final String... key2s) {
return sinterAsync(key, Long.class, key2s);
}
public CompletableFuture<Long> sinterstoreAsync(final String key, final String srcKey, final String... srcKey2s);
public CompletableFuture<Long> scardAsync(final String key);
public <T> CompletableFuture<Set<T>> smembersAsync(final String key, final Type componentType);
@@ -1012,6 +1181,8 @@ public interface CacheSource extends Resourcable {
return sismemberAsync(key, Long.class, value);
}
public <T> CompletableFuture<List<Boolean>> smismembersAsync(final String key, final String... members);
public <T> CompletableFuture<Long> sremAsync(final String key, final Type componentType, final T... values);
default CompletableFuture<Long> sremStringAsync(final String key, final String... values) {