diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/RedisKvClient.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/RedisKvClient.java index 78a57e34e..668ed7015 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/RedisKvClient.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/RedisKvClient.java @@ -230,22 +230,22 @@ private Commanders initCommanders() { CacheConfig cacheConfig = new CacheConfig(namespace, metaCacheEnable); - RedisTemplate cacheRedisTemplate = initRedisTemplate("kv.redis.cache"); - RedisTemplate storeRedisTemplate = initRedisTemplate("kv.redis.store"); + RedisTemplate redisTemplate = initRedisTemplate(); - KeyMetaServer keyMetaServer = new DefaultKeyMetaServer(kvClient, storeRedisTemplate, keyDesign, gcExecutor, cacheConfig); + KeyMetaServer keyMetaServer = new DefaultKeyMetaServer(kvClient, keyDesign, gcExecutor, cacheConfig); WriteBuffer hashWriteBuffer = WriteBuffer.newWriteBuffer(namespace, "hash"); WriteBuffer zsetWriteBuffer = WriteBuffer.newWriteBuffer(namespace, "zset"); WriteBuffer setWriteBuffer = WriteBuffer.newWriteBuffer(namespace, "set"); CommanderConfig commanderConfig = new CommanderConfig(kvClient, keyDesign, cacheConfig, kvConfig, - keyMetaServer, cacheRedisTemplate, storeRedisTemplate, gcExecutor, hashWriteBuffer, zsetWriteBuffer, setWriteBuffer); + keyMetaServer, redisTemplate, gcExecutor, hashWriteBuffer, zsetWriteBuffer, setWriteBuffer); return new Commanders(commanderConfig); } - private RedisTemplate initRedisTemplate(String key) { + private RedisTemplate initRedisTemplate() { + String key = "kv.redis.cache"; String type = RedisKvConf.getString(namespace, key + ".config.type", "local"); if (type.equalsIgnoreCase("local")) { String url = RedisKvConf.getString(namespace, key + ".url", null); diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/Commander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/Commander.java index 4e2dfb887..a4c872072 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/Commander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/Commander.java @@ -33,8 +33,7 @@ public abstract class Commander { protected final CacheConfig cacheConfig; protected final KvConfig kvConfig; protected final KeyMetaServer keyMetaServer; - protected final RedisTemplate cacheRedisTemplate; - protected final RedisTemplate storeRedisTemplate; + protected final RedisTemplate redisTemplate; protected final KvGcExecutor gcExecutor; protected final MpscSlotHashExecutor asyncWriteExecutor = KvExecutors.getInstance().getAsyncWriteExecutor(); protected final WriteBuffer hashWriteBuffer; @@ -47,8 +46,7 @@ public Commander(CommanderConfig commanderConfig) { this.cacheConfig = commanderConfig.getCacheConfig(); this.kvConfig = commanderConfig.getKvConfig(); this.keyMetaServer = commanderConfig.getKeyMetaServer(); - this.cacheRedisTemplate = commanderConfig.getCacheRedisTemplate(); - this.storeRedisTemplate = commanderConfig.getStoreRedisTemplate(); + this.redisTemplate = commanderConfig.getRedisTemplate(); this.gcExecutor = commanderConfig.getGcExecutor(); this.hashWriteBuffer = commanderConfig.getHashWriteBuffer(); this.zsetWriteBuffer = commanderConfig.getZsetWriteBuffer(); @@ -62,16 +60,16 @@ public Commander(CommanderConfig commanderConfig) { protected abstract Reply execute(Command command); protected final Reply sync(CompletableFuture future) { - return cacheRedisTemplate.sync(future, cacheConfig.cacheTimeoutMillis()); + return redisTemplate.sync(future, cacheConfig.cacheTimeoutMillis()); } protected final List sync(List> futures) { - return cacheRedisTemplate.sync(futures, cacheConfig.cacheTimeoutMillis()); + return redisTemplate.sync(futures, cacheConfig.cacheTimeoutMillis()); } protected final Reply checkCache(byte[] script, byte[] cacheKey, byte[][] args) { //cache - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, args)); + Reply reply = sync(redisTemplate.sendLua(script, new byte[][]{cacheKey}, args)); if (reply instanceof ErrorReply) { return reply; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/CommanderConfig.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/CommanderConfig.java index f55dc47ac..473811156 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/CommanderConfig.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/CommanderConfig.java @@ -22,8 +22,7 @@ public class CommanderConfig { private final CacheConfig cacheConfig; private final KvConfig kvConfig; private final KeyMetaServer keyMetaServer; - private final RedisTemplate cacheRedisTemplate; - private final RedisTemplate storeRedisTemplate; + private final RedisTemplate redisTemplate; private final KvGcExecutor gcExecutor; private final WriteBuffer hashWriteBuffer; private final WriteBuffer zsetWriteBuffer; @@ -31,15 +30,14 @@ public class CommanderConfig { public CommanderConfig(KVClient kvClient, KeyDesign keyDesign, CacheConfig cacheConfig, KvConfig kvConfig, KeyMetaServer keyMetaServer, - RedisTemplate cacheRedisTemplate, RedisTemplate storeRedisTemplate, KvGcExecutor gcExecutor, + RedisTemplate redisTemplate, KvGcExecutor gcExecutor, WriteBuffer hashWriteBuffer, WriteBuffer zsetWriteBuffer, WriteBuffer setWriteBuffer) { this.kvClient = kvClient; this.keyDesign = keyDesign; this.cacheConfig = cacheConfig; this.kvConfig = kvConfig; this.keyMetaServer = keyMetaServer; - this.cacheRedisTemplate = cacheRedisTemplate; - this.storeRedisTemplate = storeRedisTemplate; + this.redisTemplate = redisTemplate; this.gcExecutor = gcExecutor; this.hashWriteBuffer = hashWriteBuffer; this.zsetWriteBuffer = zsetWriteBuffer; @@ -66,12 +64,8 @@ public KeyMetaServer getKeyMetaServer() { return keyMetaServer; } - public RedisTemplate getCacheRedisTemplate() { - return cacheRedisTemplate; - } - - public RedisTemplate getStoreRedisTemplate() { - return storeRedisTemplate; + public RedisTemplate getRedisTemplate() { + return redisTemplate; } public KvGcExecutor getGcExecutor() { diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/DelCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/DelCommander.java index e94b910d1..ba393d132 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/DelCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/DelCommander.java @@ -48,23 +48,8 @@ protected Reply execute(Command command) { KeyType keyType = keyMeta.getKeyType(); EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); //redis - if (keyType == KeyType.zset) { - if (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_2) { - cacheRedisTemplate.sendDel(cacheKey); - } - if (encodeVersion == EncodeVersion.version_3) { - storeRedisTemplate.sendDel(cacheKey); - } - } - if (keyType == KeyType.hash) { - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - cacheRedisTemplate.sendDel(cacheKey); - } - } - if (keyType == KeyType.set) { - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - cacheRedisTemplate.sendDel(cacheKey); - } + if (keyType == KeyType.zset && encodeVersion == EncodeVersion.version_1) { + redisTemplate.sendDel(cacheKey); } //local if (keyType == KeyType.zset && cacheConfig.isZSetLocalCacheEnable()) { diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/ExpireAtCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/ExpireAtCommander.java index 94d09faff..ded3151a3 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/ExpireAtCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/ExpireAtCommander.java @@ -72,24 +72,9 @@ protected Reply execute(Command command) { // KeyType keyType = keyMeta.getKeyType(); EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (keyType == KeyType.zset && encodeVersion == EncodeVersion.version_3) { + if (keyType == KeyType.zset && encodeVersion == EncodeVersion.version_1) { byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - storeRedisTemplate.sendPExpire(cacheKey, expireTime - System.currentTimeMillis() + 1000L); - } - if (keyType == KeyType.zset && (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_2)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.zsetRangeCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); - } - if (keyType == KeyType.hash && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.hgetallCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); - } - if (keyType == KeyType.set && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.hgetallCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); + redisTemplate.sendPExpire(cacheKey, expireTime - System.currentTimeMillis() + 1000L); } return IntegerReply.REPLY_1; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/ExpireCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/ExpireCommander.java index 091aefd69..29178c4d4 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/ExpireCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/ExpireCommander.java @@ -72,24 +72,9 @@ protected Reply execute(Command command) { // KeyType keyType = keyMeta.getKeyType(); EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (keyType == KeyType.zset && encodeVersion == EncodeVersion.version_3) { + if (keyType == KeyType.zset && encodeVersion == EncodeVersion.version_1) { byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - storeRedisTemplate.sendPExpire(cacheKey, expireTime - System.currentTimeMillis() + 1000L); - } - if (keyType == KeyType.zset && (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_2)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.zsetRangeCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); - } - if (keyType == KeyType.hash && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.hgetallCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); - } - if (keyType == KeyType.set && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.hgetallCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); + redisTemplate.sendPExpire(cacheKey, expireTime - System.currentTimeMillis() + 1000L); } return IntegerReply.REPLY_1; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/PExpireAtCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/PExpireAtCommander.java index 2ae49d048..5ce662730 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/PExpireAtCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/PExpireAtCommander.java @@ -71,24 +71,9 @@ protected Reply execute(Command command) { // KeyType keyType = keyMeta.getKeyType(); EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (keyType == KeyType.zset && encodeVersion == EncodeVersion.version_3) { + if (keyType == KeyType.zset && encodeVersion == EncodeVersion.version_1) { byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - storeRedisTemplate.sendPExpire(cacheKey, expireTime - System.currentTimeMillis() + 1000L); - } - if (keyType == KeyType.zset && (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_2)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.zsetRangeCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); - } - if (keyType == KeyType.hash && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.hgetallCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); - } - if (keyType == KeyType.set && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.hgetallCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); + redisTemplate.sendPExpire(cacheKey, expireTime - System.currentTimeMillis() + 1000L); } return IntegerReply.REPLY_1; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/PExpireCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/PExpireCommander.java index bae2fde42..39ae4cee3 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/PExpireCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/PExpireCommander.java @@ -72,24 +72,9 @@ protected Reply execute(Command command) { // KeyType keyType = keyMeta.getKeyType(); EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (keyType == KeyType.zset && encodeVersion == EncodeVersion.version_3) { + if (keyType == KeyType.zset && encodeVersion == EncodeVersion.version_1) { byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - storeRedisTemplate.sendPExpire(cacheKey, expireTime - System.currentTimeMillis() + 1000L); - } - if (keyType == KeyType.zset && (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_2)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.zsetRangeCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); - } - if (keyType == KeyType.hash && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.hgetallCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); - } - if (keyType == KeyType.set && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - long pexpire = Math.min(expireTime - System.currentTimeMillis() + 1000L, cacheConfig.hgetallCacheMillis()); - cacheRedisTemplate.sendPExpire(cacheKey, pexpire); + redisTemplate.sendPExpire(cacheKey, expireTime - System.currentTimeMillis() + 1000L); } return IntegerReply.REPLY_1; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/UnlinkCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/UnlinkCommander.java index 0c8e5e0a0..5e41d7d0f 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/UnlinkCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/db/UnlinkCommander.java @@ -45,18 +45,9 @@ protected Reply execute(Command command) { KeyType keyType = keyMeta.getKeyType(); EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (keyType == KeyType.zset && (encodeVersion == EncodeVersion.version_1 - || encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { + if (keyType == KeyType.zset && (encodeVersion == EncodeVersion.version_1)) { byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - storeRedisTemplate.sendDel(cacheKey); - } - if (keyType == KeyType.hash && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - cacheRedisTemplate.sendDel(cacheKey); - } - if (keyType == KeyType.set && (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3)) { - byte[] cacheKey = keyDesign.cacheKey(keyMeta, key); - cacheRedisTemplate.sendDel(cacheKey); + redisTemplate.sendDel(cacheKey); } } return IntegerReply.parse(ret); diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HDelCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HDelCommander.java index 06e340e7a..fd8c81f4d 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HDelCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HDelCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.*; /** @@ -29,13 +28,6 @@ */ public class HDelCommander extends Hash0Commander { - private static final byte[] script = ("local arg1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(arg1) == 1 then\n" + - "\tlocal ret = redis.call('hdel', KEYS[1], unpack(ARGV));\n" + - "\treturn {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public HDelCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -86,7 +78,7 @@ protected Reply execute(Command command) { Map deleteMaps = hash.hdel(fields); delCount = deleteMaps.size(); if (delCount == 0) { - if (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { return IntegerReply.parse(fields.size()); } return IntegerReply.REPLY_0; @@ -107,7 +99,7 @@ protected Reply execute(Command command) { delCount = deleteMaps.size(); } if (delCount == 0) { - if (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { return IntegerReply.parse(fields.size()); } return IntegerReply.REPLY_0; @@ -126,7 +118,7 @@ protected Reply execute(Command command) { delCount = deleteMaps.size(); } if (delCount == 0) { - if (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { return IntegerReply.parse(fields.size()); } return IntegerReply.REPLY_0; @@ -150,84 +142,16 @@ protected Reply execute(Command command) { int fieldSize = fields.size(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1) { - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - byte[][] subKeys = new byte[fieldSize][]; - int i=0; - for (BytesKey field : fields) { - subKeys[i] = keyDesign.hashFieldSubKey(keyMeta, key, field.getKey()); - i++; - } - if (encodeVersion == EncodeVersion.version_0) { - if (delCount < 0) { - boolean[] exists = kvClient.exists(subKeys); - delCount = Utils.count(exists); - } - if (delCount > 0) { - int size = BytesUtils.toInt(keyMeta.getExtra()) - delCount; - if (size <= 0 || deleteAll) { - keyMetaServer.deleteKeyMeta(key); - } else { - byte[] extra = BytesUtils.toBytes(size); - keyMeta = new KeyMeta(keyMeta.getEncodeVersion(), keyMeta.getKeyType(), keyMeta.getKeyVersion(), keyMeta.getExpireTime(), extra); - keyMetaServer.createOrUpdateKeyMeta(key, keyMeta); - } - } - batchDeleteSubKeys(key, keyMeta, cacheKey, result, subKeys, false); - return IntegerReply.parse(delCount); - } else { - if (deleteAll) { - keyMetaServer.deleteKeyMeta(key); - } - batchDeleteSubKeys(key, keyMeta, cacheKey, result, subKeys, !deleteAll); - return IntegerReply.parse(fieldSize); - } + if (type == null) { + KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); } - - List commands = new ArrayList<>(fieldSize + 1); - - byte[][] args = new byte[fieldSize][]; - System.arraycopy(objects, 2, args, 0, args.length); - Command luaCmd = cacheRedisTemplate.luaCommand(script, new byte[][]{cacheKey}, args); - commands.add(luaCmd); - byte[][] subKeys = new byte[fieldSize][]; - int i=0; for (BytesKey field : fields) { - byte[] hashFieldCacheKey = keyDesign.hashFieldCacheKey(keyMeta, key, field.getKey()); - Command cmd = new Command(new byte[][]{RedisCommand.DEL.raw(), hashFieldCacheKey}); - commands.add(cmd); subKeys[i] = keyDesign.hashFieldSubKey(keyMeta, key, field.getKey()); i++; } - List replyList = sync(cacheRedisTemplate.sendCommand(commands)); - - Reply luaReply = replyList.get(0); - Reply reply = null; - if (luaReply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) luaReply).getReplies(); - String opeType = Utils.bytesToString(((BulkReply) replies[0]).getRaw()); - if (opeType.equalsIgnoreCase("1")) {//cache hit - reply = replies[1]; - } - } - - if (delCount < 0) { - if (reply instanceof IntegerReply) { - delCount = ((IntegerReply) reply).getInteger().intValue(); - type = KvCacheMonitor.Type.redis_cache; - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } - - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - - if (encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { if (delCount < 0) { boolean[] exists = kvClient.exists(subKeys); delCount = Utils.count(exists); @@ -242,31 +166,14 @@ protected Reply execute(Command command) { keyMetaServer.createOrUpdateKeyMeta(key, keyMeta); } } - batchDeleteSubKeys(key, keyMeta, cacheKey, result, subKeys, false); - - for (Reply reply1 : replyList) { - if (reply1 instanceof ErrorReply) { - return reply1; - } - } - return IntegerReply.parse(delCount); - } else if (keyMeta.getEncodeVersion() == EncodeVersion.version_3) { + } else { if (deleteAll) { keyMetaServer.deleteKeyMeta(key); } batchDeleteSubKeys(key, keyMeta, cacheKey, result, subKeys, !deleteAll); - - for (Reply reply1 : replyList) { - if (reply1 instanceof ErrorReply) { - return reply1; - } - } - return IntegerReply.parse(fieldSize); - } else { - return ErrorReply.INTERNAL_ERROR; } } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HExistsCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HExistsCommander.java index bc82e996f..d65d9b023 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HExistsCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HExistsCommander.java @@ -9,13 +9,10 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.HashLRUCache; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; import com.netease.nim.camellia.redis.proxy.upstream.kv.kv.KeyValue; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; -import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; /** * HEXISTS key field @@ -24,19 +21,6 @@ */ public class HExistsCommander extends Hash0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) > 0 then\n" + - "\tredis.call('pexpire', KEYS[1], ARGV[2]);\n" + - "\treturn {'1', ret1};\n" + - "end\n" + - "local arg1 = redis.call('exists', KEYS[2]);\n" + - "if tonumber(arg1) == 1 then\n" + - "\tlocal ret2 = redis.call('hexists', KEYS[2], ARGV[1]);\n" + - "\tredis.call('pexpire', KEYS[2], ARGV[3]);\n" + - "\treturn {'2', ret2};\n" + - "end\n" + - "return {'3'};").getBytes(StandardCharsets.UTF_8); - public HExistsCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -95,52 +79,12 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, field); - KeyValue keyValue = kvClient.get(subKey); - if (keyValue == null || keyValue.getValue() == null) { - return IntegerReply.REPLY_0; - } - return IntegerReply.REPLY_1; - } - - byte[] hashFieldCacheKey = keyDesign.hashFieldCacheKey(keyMeta, key, field); - - //cache - { - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{hashFieldCacheKey, cacheKey}, - new byte[][]{field, hgetCacheMillis(), hgetallCacheMillis()})); - if (reply instanceof ErrorReply) { - return reply; - } - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - String type = Utils.bytesToString(((BulkReply) replies[0]).getRaw()); - if (type.equalsIgnoreCase("1") || type.equalsIgnoreCase("2")) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return replies[1]; - } - } - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - - //get from kv byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, field); KeyValue keyValue = kvClient.get(subKey); - if (keyValue == null || keyValue.getValue() == null) { return IntegerReply.REPLY_0; } - - //build hget cache - Reply reply = sync(cacheRedisTemplate.sendPSetEx(hashFieldCacheKey, cacheConfig.hgetCacheMillis(), keyValue.getValue())); - if (reply instanceof ErrorReply) { - return reply; - } - return IntegerReply.REPLY_1; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HGetAllCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HGetAllCommander.java index b2fe30140..1540b6e00 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HGetAllCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HGetAllCommander.java @@ -10,13 +10,10 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.buffer.WriteBufferValue; import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.RedisHash; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; import java.util.Map; /** @@ -26,14 +23,6 @@ */ public class HGetAllCommander extends Hash0Commander { - private static final byte[] script = ("local arg = redis.call('exists', KEYS[1]);\n" + - "if tonumber(arg) == 1 then\n" + - "\tlocal ret = redis.call('hgetall', KEYS[1]);\n" + - "\tredis.call('pexpire', KEYS[1], ARGV[1]);\n" + - "\treturn {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public HGetAllCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -79,39 +68,12 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - Map map = hgetallFromKv(keyMeta, key); - if (cacheConfig.isHashLocalCacheEnable()) { - cacheConfig.getHashLRUCache().putAllForRead(key, cacheKey, new RedisHash(map)); - } - return toReply(map); - } - - Reply reply = checkCache(script, cacheKey, new byte[][]{hgetallCacheMillis()}); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - if (cacheConfig.isHashLocalCacheEnable()) { - if (reply instanceof MultiBulkReply) { - cacheConfig.getHashLRUCache().putAllForRead(key, cacheKey, new RedisHash(toMap((MultiBulkReply) reply))); - } - } - return reply; - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); Map map = hgetallFromKv(keyMeta, key); if (cacheConfig.isHashLocalCacheEnable()) { cacheConfig.getHashLRUCache().putAllForRead(key, cacheKey, new RedisHash(map)); } - - ErrorReply errorReply = buildCache(cacheKey, map); - if (errorReply != null) { - return errorReply; - } - return toReply(map); } @@ -128,18 +90,4 @@ private MultiBulkReply toReply(Map map) { } return new MultiBulkReply(replies); } - - private Map toMap(MultiBulkReply reply) { - Reply[] replies = reply.getReplies(); - Map map = new HashMap<>(replies.length / 2); - for (int i = 0; i < replies.length; i += 2) { - Reply field = replies[i]; - Reply value = replies[i + 1]; - if (field instanceof BulkReply && value instanceof BulkReply) { - map.put(new BytesKey(((BulkReply) field).getRaw()), ((BulkReply) value).getRaw()); - } - } - return map; - } - } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HGetCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HGetCommander.java index 08142464d..ddb5ec706 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HGetCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HGetCommander.java @@ -18,8 +18,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; - /** * HGET key field *

@@ -31,22 +29,6 @@ public HGetCommander(CommanderConfig commanderConfig) { super(commanderConfig); } - //get hget cache, if exists, delay ttl, return 1 and value - //get hgetall cache, if exists, delay ttl, return 2 and value - //return 3 and value - private static final byte[] script = ("local ret1 = redis.call('get', KEYS[1]);\n" + - "if ret1 then\n" + - "\tredis.call('pexpire', KEYS[1], ARGV[2]);\n" + - "\treturn {'1', ret1};\n" + - "end\n" + - "local arg1 = redis.call('exists', KEYS[2]);\n" + - "if tonumber(arg1) == 1 then\n" + - "\tlocal ret2 = redis.call('hget', KEYS[2], ARGV[1]);\n" + - "\tredis.call('pexpire', KEYS[2], ARGV[3]);\n" + - "\treturn {'2', ret2};\n" + - "end\n" + - "return {'3'};").getBytes(StandardCharsets.UTF_8); - @Override public RedisCommand redisCommand() { return RedisCommand.HGET; @@ -100,52 +82,12 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, field); - KeyValue keyValue = kvClient.get(subKey); - if (keyValue == null || keyValue.getValue() == null) { - return BulkReply.NIL_REPLY; - } - return new BulkReply(keyValue.getValue()); - } - - byte[] hashFieldCacheKey = keyDesign.hashFieldCacheKey(keyMeta, key, field); - - //cache - { - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{hashFieldCacheKey, cacheKey}, - new byte[][]{field, hgetCacheMillis(), hgetallCacheMillis()})); - if (reply instanceof ErrorReply) { - return reply; - } - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - String type = Utils.bytesToString(((BulkReply) replies[0]).getRaw()); - if (type.equalsIgnoreCase("1") || type.equalsIgnoreCase("2")) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return replies[1]; - } - } - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - - //get from kv byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, field); KeyValue keyValue = kvClient.get(subKey); - if (keyValue == null || keyValue.getValue() == null) { return BulkReply.NIL_REPLY; } - - //build hget cache - Reply reply = sync(cacheRedisTemplate.sendPSetEx(hashFieldCacheKey, cacheConfig.hgetCacheMillis(), keyValue.getValue())); - if (reply instanceof ErrorReply) { - return reply; - } return new BulkReply(keyValue.getValue()); } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HKeysCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HKeysCommander.java index 7a9c53a6b..fc06c5b2f 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HKeysCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HKeysCommander.java @@ -11,12 +11,10 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.HashLRUCache; import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.RedisHash; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.Map; /** @@ -26,14 +24,6 @@ */ public class HKeysCommander extends Hash0Commander { - private static final byte[] script = ("local arg = redis.call('exists', KEYS[1]);\n" + - "if tonumber(arg) == 1 then\n" + - "\tlocal ret = redis.call('hkeys', KEYS[1]);\n" + - "\tredis.call('pexpire', KEYS[1], ARGV[1]);\n" + - "\treturn {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public HKeysCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -86,35 +76,11 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - Map map = hgetallFromKv(keyMeta, key); - if (cacheConfig.isHashLocalCacheEnable()) { - cacheConfig.getHashLRUCache().putAllForRead(key, cacheKey, new RedisHash(map)); - } - return toReply(map); - } - - Reply reply = checkCache(script, cacheKey, new byte[][]{hgetallCacheMillis()}); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - Map map = hgetallFromKv(keyMeta, key); if (cacheConfig.isHashLocalCacheEnable()) { cacheConfig.getHashLRUCache().putAllForRead(key, cacheKey, new RedisHash(map)); } - - ErrorReply errorReply = buildCache(cacheKey, map); - if (errorReply != null) { - return errorReply; - } - return toReply(map); } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HLenCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HLenCommander.java index ee6fc3e96..678ce99ae 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HLenCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HLenCommander.java @@ -56,25 +56,13 @@ protected Reply execute(Command command) { return reply; } EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { int size = BytesUtils.toInt(keyMeta.getExtra()); return IntegerReply.parse(size); } else if (encodeVersion == EncodeVersion.version_1) { KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); long size = getSizeFromKv(keyMeta, key); return IntegerReply.parse(size); - } else if (encodeVersion == EncodeVersion.version_3) { - reply = sync(cacheRedisTemplate.sendCommand(new Command(new byte[][]{RedisCommand.HLEN.raw(), cacheKey}))); - if (reply instanceof IntegerReply) { - Long size = ((IntegerReply) reply).getInteger(); - if (size != null && size > 0) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - long size = getSizeFromKv(keyMeta, key); - return IntegerReply.parse(size); } else { return ErrorReply.INTERNAL_ERROR; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HMGetCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HMGetCommander.java index 14d85a540..389d9657c 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HMGetCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HMGetCommander.java @@ -12,13 +12,10 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.RedisHash; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; import com.netease.nim.camellia.redis.proxy.upstream.kv.kv.KeyValue; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; -import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.*; /** @@ -28,21 +25,6 @@ */ public class HMGetCommander extends Hash0Commander { - private static final byte[] script1 = ("local arg = redis.call('exists', KEYS[1]);\n" + - "if tonumber(arg) == 1 then\n" + - "\tlocal ret = redis.call('hmget', KEYS[1], unpack(ARGV));\n" + - "\treturn {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - - private static final byte[] script2 = ("local arg = redis.call('exists', KEYS[1]);\n" + - "if tonumber(arg) == 1 then\n" + - "\tlocal ret = redis.call('get', KEYS[1], ARGV[1]);\n" + - "\tredis.call('pexpire', KEYS[1], ARGV[2]);\n" + - "\treturn {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public HMGetCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -103,131 +85,29 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1) { - // - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - // - List list = new ArrayList<>(objects.length - 2); - byte[][] subKeys = new byte[objects.length - 2][]; - for (int i=2; i keyValues = kvClient.batchGet(subKeys); - Map map = new HashMap<>(); - for (KeyValue keyValue : keyValues) { - map.put(new BytesKey(keyValue.getKey()), keyValue.getValue()); - } - Reply[] replies = new Reply[list.size()]; - for (int i=0; i list = new ArrayList<>(objects.length - 2); + byte[][] subKeys = new byte[objects.length - 2][]; + for (int i=2; i keyValues = kvClient.batchGet(subKeys); + Map map = new HashMap<>(); + for (KeyValue keyValue : keyValues) { + map.put(new BytesKey(keyValue.getKey()), keyValue.getValue()); } - { - List commandList = new ArrayList<>(fields.length); - for (byte[] field : fields) { - byte[] hashFieldCacheKey = keyDesign.hashFieldCacheKey(keyMeta, key, field); - Command cmd = cacheRedisTemplate.luaCommand(script2, new byte[][]{hashFieldCacheKey}, new byte[][]{hgetCacheMillis()}); - commandList.add(cmd); - } - Map hitMap = new HashMap<>(); - List cacheMissingFields = new ArrayList<>(); - List replyList = sync(cacheRedisTemplate.sendCommand(commandList)); - for (int i = 0; i < replyList.size(); i++) { - byte[] field = fields[i]; - Reply reply = replyList.get(i); - if (reply instanceof ErrorReply) { - return reply; - } - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - String type = Utils.bytesToString(((BulkReply) replies[0]).getRaw()); - if (type.equalsIgnoreCase("1")) { - hitMap.put(new BytesKey(field), replies[1]); - continue; - } - } - cacheMissingFields.add(field); - } - if (cacheMissingFields.isEmpty()) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return toReply1(fields, hitMap); - } - - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - - byte[][] subKeys = new byte[cacheMissingFields.size()][]; - int i=0; - for (byte[] cacheMissingField : cacheMissingFields) { - byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, cacheMissingField); - subKeys[i] = subKey; - i ++; - } - List keyValues = kvClient.batchGet(subKeys); - List commands = new ArrayList<>(keyValues.size()); - for (KeyValue keyValue : keyValues) { - if (keyValue == null) { - continue; - } - byte[] k = keyValue.getKey(); - byte[] v = keyValue.getValue(); - if (v == null) { - continue; - } - byte[] field = keyDesign.decodeHashFieldBySubKey(k, key); - hitMap.put(new BytesKey(field), new BulkReply(v)); - - byte[] hashFieldCacheKey = keyDesign.hashFieldCacheKey(keyMeta, key, field); - Command cmd = new Command(new byte[][]{RedisCommand.PSETEX.raw(), hashFieldCacheKey, v}); - commands.add(cmd); - } - if (!commands.isEmpty()) { - List cacheSetReplies = sync(cacheRedisTemplate.sendCommand(commands)); - for (Reply cacheSetReply : cacheSetReplies) { - if (cacheSetReply instanceof ErrorReply) { - return cacheSetReply; - } - } - } - return toReply1(fields, hitMap); - } - } - - private Reply toReply1(byte[][] fields, Map map) { - Reply[] replies = new Reply[fields.length]; - int i=0; - for (byte[] field : fields) { - Reply reply = map.get(new BytesKey(field)); - if (reply == null) { + Reply[] replies = new Reply[list.size()]; + for (int i=0; i commands = new ArrayList<>(fieldMap.size()); - List list = new ArrayList<>(fieldMap.size()); - List fieldList = new ArrayList<>(fieldMap.size()); - for (Map.Entry entry : fieldMap.entrySet()) { - byte[] field = entry.getKey().getKey(); - fieldList.add(field); - byte[] value = entry.getValue(); - byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, field);//store-key - KeyValue keyValue = new KeyValue(subKey, value); - list.add(keyValue); - byte[] hashFieldCacheKey = keyDesign.hashFieldCacheKey(keyMeta, key, field);//cache-key - Command cmd = new Command(new byte[][]{RedisCommand.EVAL.raw(), script, two, cacheKey, hashFieldCacheKey, field, value}); - commands.add(cmd); - } - - int existsFields = 0; - List unknownFields = new ArrayList<>(); - //cache - List replyList = sync(cacheRedisTemplate.sendCommand(commands)); - int index = 0; - for (Reply reply : replyList) { - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("2")) { - if (replies[1] instanceof IntegerReply) { - Long integer = ((IntegerReply) replies[1]).getInteger(); - if (integer == 0) { - existsFields++; - index++; - continue; - } else if (integer == 1) { - index++; - continue; - } - } - } - } - if (replies[2] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[2]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("2")) { - existsFields++; - index++; - continue; - } - } - } - unknownFields.add(fieldList.get(index)); - index++; - } - - if (type == null && unknownFields.isEmpty()) { - type = KvCacheMonitor.Type.redis_cache; - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - - if (keyMeta.getEncodeVersion() == EncodeVersion.version_2) { - if (existsCount < 0) { - existsCount = existsFields; - if (!unknownFields.isEmpty()) { - byte[][] subKeys = new byte[unknownFields.size()][]; - for (int i = 0; i < unknownFields.size(); i++) { - byte[] field = unknownFields.get(i); - subKeys[i] = keyDesign.hashFieldSubKey(keyMeta, key, field); - } - boolean[] exists = kvClient.exists(subKeys); - existsCount += Utils.count(exists); - - type = KvCacheMonitor.Type.kv_store; - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } - int add = fieldSize - existsCount; - if (add > 0) { - int size = BytesUtils.toInt(keyMeta.getExtra()); - size = size + add; - keyMeta = new KeyMeta(keyMeta.getEncodeVersion(), keyMeta.getKeyType(), - keyMeta.getKeyVersion(), keyMeta.getExpireTime(), BytesUtils.toBytes(size)); - keyMetaServer.createOrUpdateKeyMeta(key, keyMeta); - } - - batchPut(cacheKey, result, list); - - for (Reply reply : replyList) { - if (reply instanceof ErrorReply) { - return reply; - } - } - - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - - return IntegerReply.parse(add); - } else if (keyMeta.getEncodeVersion() == EncodeVersion.version_3) { - - batchPut(cacheKey, result, list); - - for (Reply reply : replyList) { - if (reply instanceof ErrorReply) { - return reply; - } - } - - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - - return IntegerReply.parse(fieldSize);//可能不准 - } else { - return ErrorReply.INTERNAL_ERROR; - } + return ErrorReply.INTERNAL_ERROR; } private void batchPut(byte[] cacheKey, Result result, List list) { diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HSetNxCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HSetNxCommander.java index 368db0e88..247a0eeae 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HSetNxCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HSetNxCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.utils.BytesUtils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; @@ -30,22 +29,6 @@ */ public class HSetNxCommander extends Hash0Commander { - private static final byte[] script = ("local arg1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(arg1) == 1 then\n" + - "\treturn 1;\n" + - "end\n" + - "local arg2 = redis.call('exists', KEYS[2]);\n" + - "if tonumber(arg2) == 1 then\n" + - "\tlocal arg3 = redis.call('hsetnx', KEYS[2], ARGV[1], ARGV[2]);\n" + - "\tif tonumber(arg3) == 1 then\n" + - "\t\treturn 2;\n" + - "\tend\n" + - "\tif tonumber(arg3) == 0 then\n" + - "\t\treturn 3;\n" + - "\tend\n" + - "end\n" + - "return 4;").getBytes(StandardCharsets.UTF_8); - private static final int cache_miss = 0; private static final int cache_hit_exist = 1; private static final int cache_hit_not_exists = 2; @@ -81,7 +64,7 @@ protected Reply execute(Command command) { if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { byte[] extra = BytesUtils.toBytes(1); keyMeta = new KeyMeta(encodeVersion, KeyType.hash, System.currentTimeMillis(), -1, extra); - } else if (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_3) { + } else if (encodeVersion == EncodeVersion.version_1) { keyMeta = new KeyMeta(encodeVersion, KeyType.hash, System.currentTimeMillis(), -1); } else { return ErrorReply.INTERNAL_ERROR; @@ -193,50 +176,8 @@ protected Reply execute(Command command) { } EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, field); - - if (cacheCheck == cache_miss) { - KeyValue keyValue = kvClient.get(subKey); - if (keyValue != null && keyValue.getValue() != null) { - return IntegerReply.REPLY_0; - } - } - - if (encodeVersion == EncodeVersion.version_0) { - int size = BytesUtils.toInt(keyMeta.getExtra()); - keyMeta = new KeyMeta(keyMeta.getEncodeVersion(), keyMeta.getKeyType(), - keyMeta.getKeyVersion(), keyMeta.getExpireTime(), BytesUtils.toBytes(size + 1)); - keyMetaServer.createOrUpdateKeyMeta(key, keyMeta); - } - put(cacheKey, result, new KeyValue(subKey, value)); - return IntegerReply.REPLY_1; - } - - if (cacheCheck == cache_miss) { - byte[] hashFieldCacheKey = keyDesign.hashFieldCacheKey(keyMeta, key, field); - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{hashFieldCacheKey, cacheKey}, new byte[][]{field, value})); - if (reply instanceof ErrorReply) { - return reply; - } - if (reply instanceof IntegerReply) { - Long integer = ((IntegerReply) reply).getInteger(); - if (integer == 1) { - cacheCheck = cache_hit_exist; - } else if (integer == 2) { - cacheCheck = cache_hit_not_exists; - } else if (integer == 3) { - cacheCheck = cache_hit_exist; - } - } - } - - if (cacheCheck == cache_hit_exist) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return IntegerReply.REPLY_0; - } + KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, field); if (cacheCheck == cache_miss) { @@ -246,7 +187,7 @@ protected Reply execute(Command command) { } } - if (encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { int size = BytesUtils.toInt(keyMeta.getExtra()); keyMeta = new KeyMeta(keyMeta.getEncodeVersion(), keyMeta.getKeyType(), keyMeta.getKeyVersion(), keyMeta.getExpireTime(), BytesUtils.toBytes(size + 1)); diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HStrLenCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HStrLenCommander.java index 65505a034..ab58a0c88 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HStrLenCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HStrLenCommander.java @@ -9,14 +9,11 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.HashLRUCache; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; import com.netease.nim.camellia.redis.proxy.upstream.kv.kv.KeyValue; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; - /** * HSTRLEN key field *

@@ -24,21 +21,6 @@ */ public class HStrLenCommander extends Hash0Commander { - private static final byte[] script = ("local ret1 = redis.call('strlen', KEYS[1]);\n" + - "if tonumber(ret1) > 0 then\n" + - "\tredis.call('pexpire', KEYS[1], ARGV[2]);\n" + - "\treturn {'1', ret1};\n" + - "end\n" + - "local arg1 = redis.call('exists', KEYS[2]);\n" + - "if tonumber(arg1) == 1 then\n" + - "\tlocal ret2 = redis.call('hstrlen', KEYS[2], ARGV[1]);\n" + - "\tredis.call('pexpire', KEYS[2], ARGV[3]);\n" + - "\treturn {'2', ret2};\n" + - "end\n" + - "return {'3'};").getBytes(StandardCharsets.UTF_8); - - - public HStrLenCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -95,52 +77,12 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, field); - KeyValue keyValue = kvClient.get(subKey); - if (keyValue == null || keyValue.getValue() == null) { - return IntegerReply.REPLY_0; - } - return IntegerReply.parse(Utils.bytesToString(keyValue.getValue()).length()); - } - - byte[] hashFieldCacheKey = keyDesign.hashFieldCacheKey(keyMeta, key, field); - - //cache - { - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{hashFieldCacheKey, cacheKey}, - new byte[][]{field, hgetCacheMillis(), hgetallCacheMillis()})); - if (reply instanceof ErrorReply) { - return reply; - } - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - String type = Utils.bytesToString(((BulkReply) replies[0]).getRaw()); - if (type.equalsIgnoreCase("1") || type.equalsIgnoreCase("2")) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return replies[1]; - } - } - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - - //get from kv byte[] subKey = keyDesign.hashFieldSubKey(keyMeta, key, field); KeyValue keyValue = kvClient.get(subKey); - if (keyValue == null || keyValue.getValue() == null) { return IntegerReply.REPLY_0; } - - //build hget cache - Reply reply = sync(cacheRedisTemplate.sendPSetEx(hashFieldCacheKey, cacheConfig.hgetCacheMillis(), keyValue.getValue())); - if (reply instanceof ErrorReply) { - return reply; - } - return IntegerReply.parse(Utils.bytesToString(keyValue.getValue()).length()); } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HValsCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HValsCommander.java index e6e109b9f..b5dac4fe4 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HValsCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/HValsCommander.java @@ -8,12 +8,10 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.HashLRUCache; import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.RedisHash; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.Map; /** @@ -23,14 +21,6 @@ */ public class HValsCommander extends Hash0Commander { - private static final byte[] script = ("local arg = redis.call('exists', KEYS[1]);\n" + - "if tonumber(arg) == 1 then\n" + - "\tlocal ret = redis.call('hvals', KEYS[1]);\n" + - "\tredis.call('pexpire', KEYS[1], ARGV[1]);\n" + - "\treturn {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public HValsCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -85,35 +75,11 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - Map map = hgetallFromKv(keyMeta, key); - if (cacheConfig.isHashLocalCacheEnable()) { - cacheConfig.getHashLRUCache().putAllForRead(key, cacheKey, new RedisHash(map)); - } - return toReply(map); - } - - Reply reply = checkCache(script, cacheKey, new byte[][]{hgetallCacheMillis()}); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - Map map = hgetallFromKv(keyMeta, key); if (cacheConfig.isHashLocalCacheEnable()) { cacheConfig.getHashLRUCache().putAllForRead(key, cacheKey, new RedisHash(map)); } - - ErrorReply errorReply = buildCache(cacheKey, map); - if (errorReply != null) { - return errorReply; - } - return toReply(map); } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/Hash0Commander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/Hash0Commander.java index 1ffb575a8..93932efe2 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/Hash0Commander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/hash/Hash0Commander.java @@ -1,19 +1,13 @@ package com.netease.nim.camellia.redis.proxy.upstream.kv.command.hash; -import com.netease.nim.camellia.redis.proxy.command.Command; -import com.netease.nim.camellia.redis.proxy.enums.RedisCommand; -import com.netease.nim.camellia.redis.proxy.reply.ErrorReply; -import com.netease.nim.camellia.redis.proxy.reply.Reply; import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.RedisHash; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.Commander; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; import com.netease.nim.camellia.redis.proxy.upstream.kv.kv.KeyValue; import com.netease.nim.camellia.redis.proxy.upstream.kv.kv.Sort; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; -import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -57,40 +51,4 @@ protected final Map hgetallFromKv(KeyMeta keyMeta, byte[] key) } return map; } - - protected final ErrorReply buildCache(byte[] cacheKey, Map map) { - if (map.isEmpty()) { - return null; - } - //build cache - byte[][] args1 = new byte[map.size() * 2 + 2][]; - args1[0] = RedisCommand.HSET.raw(); - args1[1] = cacheKey; - int i = 0; - for (Map.Entry entry : map.entrySet()) { - args1[i + 2] = entry.getKey().getKey(); - args1[i + 3] = entry.getValue(); - i += 2; - } - Command hsetCmd = new Command(args1); - Command pexpireCmd = new Command(new byte[][]{RedisCommand.PEXPIRE.raw(), cacheKey, hgetallCacheMillis()}); - List commands = new ArrayList<>(2); - commands.add(hsetCmd); - commands.add(pexpireCmd); - List replyList = sync(cacheRedisTemplate.sendCommand(commands)); - for (Reply reply : replyList) { - if (reply instanceof ErrorReply) { - return (ErrorReply) reply; - } - } - return null; - } - - protected byte[] hgetCacheMillis() { - return Utils.stringToBytes(String.valueOf(cacheConfig.hgetCacheMillis())); - } - - protected final byte[] hgetallCacheMillis() { - return Utils.stringToBytes(String.valueOf(cacheConfig.hgetallCacheMillis())); - } } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SAddCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SAddCommander.java index b2d1dcc41..29e1995b3 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SAddCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SAddCommander.java @@ -15,10 +15,8 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; import com.netease.nim.camellia.redis.proxy.upstream.kv.utils.BytesUtils; -import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.*; /** @@ -28,13 +26,6 @@ */ public class SAddCommander extends Set0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('sadd', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public SAddCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -68,12 +59,12 @@ protected Reply execute(Command command) { //check meta KeyMeta keyMeta = keyMetaServer.getKeyMeta(key); if (keyMeta == null) { - EncodeVersion encodeVersion = keyDesign.hashKeyMetaVersion(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { + EncodeVersion encodeVersion = keyDesign.setKeyMetaVersion(); + if (encodeVersion == EncodeVersion.version_0) { int count = memberSet.size(); byte[] extra = BytesUtils.toBytes(count); keyMeta = new KeyMeta(encodeVersion, KeyType.set, System.currentTimeMillis(), -1, extra); - } else if (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_3) { + } else if (encodeVersion == EncodeVersion.version_1) { keyMeta = new KeyMeta(encodeVersion, KeyType.set, System.currentTimeMillis(), -1); } else { return ErrorReply.INTERNAL_ERROR; @@ -177,64 +168,9 @@ protected Reply execute(Command command) { return saddVersion1(keyMeta, key, cacheKey, first, memberSize, existsMemberSize, memberSet, result, type); } - if (encodeVersion == EncodeVersion.version_2) { - if (!first) { - int ret = checkAndUpdateCache(cacheKey, memberSet, memberSize); - if (existsMemberSize < 0 && ret >= 0) { - existsMemberSize = ret; - // - type = KvCacheMonitor.Type.redis_cache; - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } - return saddVersion0(keyMeta, key, cacheKey, first, memberSize, existsMemberSize, memberSet, result, type); - } - - if (encodeVersion == EncodeVersion.version_3) { - if (!first) { - int ret = checkAndUpdateCache(cacheKey, memberSet, memberSize); - if (existsMemberSize < 0 && ret >= 0) { - // - type = KvCacheMonitor.Type.redis_cache; - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - existsMemberSize = ret; - } - } - return saddVersion1(keyMeta, key, cacheKey, first, memberSize, existsMemberSize, memberSet, result, type); - } - return ErrorReply.INTERNAL_ERROR; } - private int checkAndUpdateCache(byte[] cacheKey, Set memberSet, int memberSize) { - if (memberSet.isEmpty()) { - return -1; - } - byte[][] args = new byte[memberSet.size()][]; - int i = 0; - for (BytesKey bytesKey : memberSet) { - args[i] = bytesKey.getKey(); - i++; - } - int ret = -1; - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, args)); - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (replies[1] instanceof IntegerReply) { - ret = (((IntegerReply) replies[1]).getInteger()).intValue(); - } - } - } - } - if (ret >= 0) { - return memberSize - ret; - } - return ret; - } - private Reply saddVersion0(KeyMeta keyMeta, byte[] key, byte[] cacheKey, boolean first, int memberSize, int existsMemberSize, Set memberSet, Result result, KvCacheMonitor.Type type) { if (type == null) { diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SCardCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SCardCommander.java index 666a1c266..68e2b4d48 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SCardCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SCardCommander.java @@ -80,7 +80,7 @@ protected Reply execute(Command command) { } } - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { return IntegerReply.parse(BytesUtils.toInt(keyMeta.getExtra())); } @@ -89,21 +89,8 @@ protected Reply execute(Command command) { long size = getSizeFromKv(keyMeta, key); return IntegerReply.parse(size); } - if (encodeVersion == EncodeVersion.version_3) { - Reply reply = sync(cacheRedisTemplate.sendCommand(new Command(new byte[][]{RedisCommand.SCARD.raw(), cacheKey}))); - if (reply instanceof IntegerReply) { - Long size = ((IntegerReply) reply).getInteger(); - if (size != null && size > 0) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - long size = getSizeFromKv(keyMeta, key); - return IntegerReply.parse(size); - } else { - return ErrorReply.INTERNAL_ERROR; - } + + return ErrorReply.INTERNAL_ERROR; } private long getSizeFromKv(KeyMeta keyMeta, byte[] key) { diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SIsMemberCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SIsMemberCommander.java index 58b8cd6a1..eb58ad519 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SIsMemberCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SIsMemberCommander.java @@ -9,14 +9,10 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.SetLRUCache; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; import com.netease.nim.camellia.redis.proxy.upstream.kv.kv.KeyValue; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; -import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; - /** * SISMEMBER key member *

@@ -24,14 +20,6 @@ */ public class SIsMemberCommander extends Set0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('sismember', KEYS[1], ARGV[1]);\n" + - " redis.call('pexpire', KEYS[1], ARGV[2]);\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public SIsMemberCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -91,23 +79,6 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, new byte[][]{member, smembersCacheMillis()})); - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (replies[1] instanceof IntegerReply) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return replies[1]; - } - } - } - } - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); byte[] subKey = keyDesign.setMemberSubKey(keyMeta, key, member); diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SMIsMemberCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SMIsMemberCommander.java index 93b0973bd..a2fd38086 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SMIsMemberCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SMIsMemberCommander.java @@ -8,13 +8,10 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.RedisSet; import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.SetLRUCache; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; -import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.*; /** @@ -24,13 +21,6 @@ */ public class SMIsMemberCommander extends Set0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('smismember', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public SMIsMemberCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -96,31 +86,6 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - byte[][] args = new byte[members.size()][]; - int i = 0; - for (BytesKey member : members) { - args[i] = member.getKey(); - i++; - } - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, args)); - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (replies[1] instanceof MultiBulkReply) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - cacheRedisTemplate.sendPExpire(cacheKey, cacheConfig.smembersCacheMillis()); - return replies[1]; - } - } - } - } - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); Map smismember = smismemberFromKv(keyMeta, key, members); diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SMembersCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SMembersCommander.java index 062dd437b..4f9e3d6aa 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SMembersCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SMembersCommander.java @@ -8,15 +8,10 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.RedisSet; import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.SetLRUCache; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; -import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.List; import java.util.Set; /** @@ -26,14 +21,6 @@ */ public class SMembersCommander extends Set0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('smembers', KEYS[1]);\n" + - " redis.call('pexpire', KEYS[1], ARGV[1]);\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public SMembersCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -81,60 +68,15 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, new byte[][]{smembersCacheMillis()})); - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (replies[1] instanceof MultiBulkReply) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return replies[1]; - } - } - } - } - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); Set set = smembersFromKv(keyMeta, key); + if (cacheConfig.isSetLocalCacheEnable()) { cacheConfig.getSetLRUCache().putAllForRead(key, cacheKey, new RedisSet(set)); } - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - Reply reply = buildCache(cacheKey, set); - if (reply != null) { - return reply; - } - } - return toReply(set); - } - private Reply buildCache(byte[] cacheKey, Set set) { - byte[][] cmd = new byte[set.size() + 2][]; - cmd[0] = RedisCommand.SADD.raw(); - cmd[1] = cacheKey; - int i = 2; - for (BytesKey bytesKey : set) { - cmd[i] = bytesKey.getKey(); - i++; - } - Command saddCmd = new Command(cmd); - Command pexpireCmd = new Command(new byte[][]{RedisCommand.PEXPIRE.raw(), cacheKey, smembersCacheMillis()}); - List commands = new ArrayList<>(2); - commands.add(saddCmd); - commands.add(pexpireCmd); - List replyList = sync(cacheRedisTemplate.sendCommand(commands)); - for (Reply reply : replyList) { - if (reply instanceof ErrorReply) { - return reply; - } - } - return null; + return toReply(set); } private Reply toReply(Set set) { @@ -147,5 +89,4 @@ private Reply toReply(Set set) { return new MultiBulkReply(replies); } - } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SPopCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SPopCommander.java index 4f39a0265..ca723b991 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SPopCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SPopCommander.java @@ -16,7 +16,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Set; @@ -27,13 +26,6 @@ */ public class SPopCommander extends Set0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('spop', KEYS[1], ARGV[1]);\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public SPopCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -126,25 +118,6 @@ protected Reply execute(Command command) { EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (spop == null) { - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - spop = spopFromCache(cacheKey, count); - if (spop != null) { - if (type != null) { - type = KvCacheMonitor.Type.redis_cache; - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } - } - } else { - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - Reply reply = srem(cacheKey, spop); - if (reply != null) { - return reply; - } - } - } - if (type == null) { KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); } @@ -155,55 +128,13 @@ protected Reply execute(Command command) { removeMembers(keyMeta, key, cacheKey, spop, result); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { updateKeyMeta(keyMeta, key, spop.size() * -1); } return toReply(spop, batch); } - private Reply srem(byte[] cacheKey, Set spop) { - byte[][] cmd = new byte[spop.size() + 2][]; - cmd[0] = RedisCommand.SREM.raw(); - cmd[1] = cacheKey; - int i = 2; - for (BytesKey bytesKey : spop) { - cmd[i] = bytesKey.getKey(); - i++; - } - Reply reply = sync(cacheRedisTemplate.sendCommand(new Command(cmd))); - if (reply instanceof ErrorReply) { - return reply; - } - return null; - } - - private Set spopFromCache(byte[] cacheKey, int count) { - byte[][] args = new byte[2][]; - args[0] = Utils.stringToBytes(String.valueOf(count)); - args[1] = smembersCacheMillis(); - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, args)); - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (replies[1] instanceof MultiBulkReply) { - Reply[] replies1 = ((MultiBulkReply) replies[1]).getReplies(); - Set spop = new HashSet<>(); - for (Reply reply1 : replies1) { - if (reply1 instanceof BulkReply) { - spop.add(new BytesKey(((BulkReply) reply1).getRaw())); - } - } - return spop; - } - } - } - } - return null; - } - private Reply toReply(Set spop, boolean batch) { if (!batch) { if (spop.isEmpty()) { diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SRandMemberCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SRandMemberCommander.java index 4621640ae..150d0e00b 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SRandMemberCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SRandMemberCommander.java @@ -8,13 +8,11 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.RedisSet; import com.netease.nim.camellia.redis.proxy.upstream.kv.cache.SetLRUCache; import com.netease.nim.camellia.redis.proxy.upstream.kv.command.CommanderConfig; -import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.EncodeVersion; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.Set; /** @@ -24,22 +22,6 @@ */ public class SRandMemberCommander extends Set0Commander { - private static final byte[] script1 = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('srandmember', KEYS[1], ARGV[1]);\n" + - " redis.call('pexpire', KEYS[1], ARGV[2]);\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - - private static final byte[] script2 = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('srandmember', KEYS[1]);\n" + - " redis.call('pexpire', KEYS[1], ARGV[1]);\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public SRandMemberCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -109,32 +91,6 @@ protected Reply execute(Command command) { } } - EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - byte[][] args; - Reply reply; - if (batch) { - args = new byte[2][]; - args[0] = Utils.stringToBytes(String.valueOf(count)); - args[1] = smembersCacheMillis(); - reply = sync(cacheRedisTemplate.sendLua(script1, new byte[][]{cacheKey}, args)); - } else { - args = new byte[1][]; - args[0] = smembersCacheMillis(); - reply = sync(cacheRedisTemplate.sendLua(script2, new byte[][]{cacheKey}, args)); - } - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return replies[1]; - } - } - } - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); Set set = srandmemberFromKv(keyMeta, key, count); diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SRemCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SRemCommander.java index 9223348b8..3ce042037 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SRemCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/set/SRemCommander.java @@ -16,7 +16,6 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; import com.netease.nim.camellia.tools.utils.BytesKey; -import com.netease.nim.camellia.tools.utils.Pair; import java.util.*; @@ -120,30 +119,12 @@ protected Reply execute(Command command) { members = removedMembers; } - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { - if (!members.isEmpty()) { - Pair pair = updateCache(cacheKey, members); - if (pair != null) { - if (pair.getFirst() != null) { - return pair.getFirst(); - } - if (pair.getSecond() != null && pair.getSecond() >= 0) { - if (type == null) { - type = KvCacheMonitor.Type.redis_cache; - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - removeSize = pair.getSecond(); - } - } - } - } - if (type == null) { KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); } if (removeSize < 0) { - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { Map smismember = smismemberFromKv(keyMeta, key, members); removeSize = 0; members = new HashSet<>(); @@ -158,7 +139,7 @@ protected Reply execute(Command command) { removeMembers(keyMeta, key, cacheKey, members, result); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { if (removeSize > 0) { updateKeyMeta(keyMeta, key, removeSize * -1); } @@ -167,27 +148,4 @@ protected Reply execute(Command command) { return IntegerReply.parse(size); } } - - private Pair updateCache(byte[] cacheKey, Set members) { - byte[][] cmd = new byte[members.size() + 2][]; - cmd[0] = RedisCommand.SREM.raw(); - cmd[1] = cacheKey; - int i = 2; - for (BytesKey member : members) { - cmd[i] = member.getKey(); - i++; - } - Reply reply = sync(cacheRedisTemplate.sendCommand(new Command(cmd))); - if (reply instanceof ErrorReply) { - return new Pair<>(reply, -1); - } - if (reply instanceof IntegerReply) { - Long integer = ((IntegerReply) reply).getInteger(); - if (integer > 0) { - int removeSize = integer.intValue(); - return new Pair<>(null, removeSize); - } - } - return null; - } } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZAddCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZAddCommander.java index 40547519a..efd33b747 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZAddCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZAddCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -32,14 +31,6 @@ */ public class ZAddCommander extends ZSet0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zadd', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - - public ZAddCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -72,7 +63,7 @@ protected Reply execute(Command command) { EncodeVersion encodeVersion; if (keyMeta == null) { encodeVersion = keyDesign.zsetKeyMetaVersion(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { byte[] extra = BytesUtils.toBytes(memberSize); keyMeta = new KeyMeta(encodeVersion, KeyType.zset, System.currentTimeMillis(), -1, extra); } else { @@ -164,13 +155,7 @@ protected Reply execute(Command command) { return zaddVersion0(keyMeta, key, cacheKey, first, memberSize, memberMap, existsMap, result, type); } if (encodeVersion == EncodeVersion.version_1) { - return zaddVersion1(keyMeta, key, cacheKey, first, memberSize, memberMap, existsMap, result, type); - } - if (encodeVersion == EncodeVersion.version_2) { - return zaddVersion2(keyMeta, key, cacheKey, first, memberSize, memberMap, existsMap, result, type); - } - if (encodeVersion == EncodeVersion.version_3) { - return zaddVersion3(keyMeta, key, cacheKey, memberSize, memberMap, result, type); + return zaddVersion1(keyMeta, key, cacheKey, memberSize, memberMap, result, type); } return ErrorReply.INTERNAL_ERROR; } @@ -259,209 +244,7 @@ private Reply zaddVersion0(KeyMeta keyMeta, byte[] key, byte[] cacheKey, boolean } } - private Reply zaddVersion1(KeyMeta keyMeta, byte[] key, byte[] cacheKey, boolean first, int memberSize, - Map memberMap, Map existsMap, Result result, KvCacheMonitor.Type type) { - if (first) { - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - List list = new ArrayList<>(memberSize); - for (Map.Entry entry : memberMap.entrySet()) { - byte[] member = entry.getKey().getKey(); - Double score = entry.getValue(); - byte[] subKey1 = keyDesign.zsetMemberSubKey1(keyMeta, key, member); - KeyValue keyValue1 = new KeyValue(subKey1, Utils.doubleToBytes(score)); - list.add(keyValue1); - } - if (result.isKvWriteDelayEnable()) { - submitAsyncWriteTask(cacheKey, result, () -> kvClient.batchPut(list)); - } else { - kvClient.batchPut(list); - } - return IntegerReply.parse(memberSize); - } else { - byte[][] args = new byte[memberSize * 2][]; - int i = 0; - for (Map.Entry entry : memberMap.entrySet()) { - args[i] = Utils.doubleToBytes(entry.getValue()); - args[i+1] = entry.getKey().getKey(); - i+=2; - } - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, args)); - int add = -1; - - if (existsMap != null) { - add = memberSize - existsMap.size(); - } - if (add < 0) { - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (replies[1] instanceof IntegerReply) { - add = (((IntegerReply) replies[1]).getInteger()).intValue(); - } - } - } - } - } - List list = new ArrayList<>(memberSize); - if (add < 0) { - byte[][] existsKeys = new byte[memberSize][]; - int j = 0; - for (Map.Entry entry : memberMap.entrySet()) { - byte[] member = entry.getKey().getKey(); - Double score = entry.getValue(); - byte[] subKey1 = keyDesign.zsetMemberSubKey1(keyMeta, key, member); - KeyValue keyValue1 = new KeyValue(subKey1, Utils.doubleToBytes(score)); - list.add(keyValue1); - existsKeys[j] = subKey1; - j++; - } - boolean[] exists = kvClient.exists(existsKeys); - int existsCount = Utils.count(exists); - add = memberSize - existsCount; - // - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } else { - for (Map.Entry entry : memberMap.entrySet()) { - byte[] member = entry.getKey().getKey(); - Double score = entry.getValue(); - byte[] subKey1 = keyDesign.zsetMemberSubKey1(keyMeta, key, member); - KeyValue keyValue1 = new KeyValue(subKey1, Utils.doubleToBytes(score)); - list.add(keyValue1); - } - // - if (type == null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } - if (result.isKvWriteDelayEnable()) { - submitAsyncWriteTask(cacheKey, result, () -> kvClient.batchPut(list)); - } else { - kvClient.batchPut(list); - } - updateKeyMeta(keyMeta, key, add); - if (reply instanceof ErrorReply) { - return reply; - } - return IntegerReply.parse(add); - } - } - - private Reply zaddVersion2(KeyMeta keyMeta, byte[] key, byte[] cacheKey, boolean first, int memberSize, - Map memberMap, Map existsMap, Result result, KvCacheMonitor.Type type) { - List list = new ArrayList<>(memberSize*2); - if (first) { - // - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - for (Map.Entry entry : memberMap.entrySet()) { - byte[] member = entry.getKey().getKey(); - Double score = entry.getValue(); - byte[] subKey1 = keyDesign.zsetMemberSubKey1(keyMeta, key, member); - KeyValue keyValue1 = new KeyValue(subKey1, Utils.doubleToBytes(score)); - list.add(keyValue1); - Index index = Index.fromRaw(member); - if (index.isIndex()) { - byte[] subKey2 = keyDesign.zsetIndexSubKey(keyMeta, key, index); - KeyValue keyValue2 = new KeyValue(subKey2, member); - list.add(keyValue2); - } - } - if (result.isKvWriteDelayEnable()) { - submitAsyncWriteTask(cacheKey, result, () -> kvClient.batchPut(list)); - } else { - kvClient.batchPut(list); - } - return IntegerReply.parse(memberSize); - } else { - List cmdList = new ArrayList<>(); - byte[][] zsetIndexCmd = new byte[memberSize*2][]; - int i=0; - for (Map.Entry entry : memberMap.entrySet()) { - byte[] member = entry.getKey().getKey(); - Double score = entry.getValue(); - byte[] subKey1 = keyDesign.zsetMemberSubKey1(keyMeta, key, member); - KeyValue keyValue1 = new KeyValue(subKey1, Utils.doubleToBytes(score)); - list.add(keyValue1); - Index index = Index.fromRaw(member); - if (index.isIndex()) { - byte[] subKey2 = keyDesign.zsetIndexSubKey(keyMeta, key, index); - KeyValue keyValue2 = new KeyValue(subKey2, member); - list.add(keyValue2); - byte[] zsetMemberIndexCacheKey = keyDesign.zsetMemberIndexCacheKey(keyMeta, key, index); - cmdList.add(new Command(new byte[][]{RedisCommand.PSETEX.raw(), zsetMemberIndexCacheKey, zsetMemberCacheMillis(), member})); - } - zsetIndexCmd[i] = Utils.doubleToBytes(score); - zsetIndexCmd[i+1] = index.getRef(); - i+=2; - } - - Command zsetIndexLuaCmd = cacheRedisTemplate.luaCommand(script, new byte[][]{cacheKey}, zsetIndexCmd); - List commands = new ArrayList<>(cmdList.size() + 1); - commands.add(zsetIndexLuaCmd); - commands.addAll(cmdList); - List replyList = sync(cacheRedisTemplate.sendCommand(commands)); - Reply reply = replyList.get(0); - - int add = -1; - if (existsMap != null) { - add = memberSize - existsMap.size(); - } - if (add < 0) { - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (replies[1] instanceof IntegerReply) { - add = ((IntegerReply) replies[1]).getInteger().intValue(); - } - } - } - } - if (add < 0) { - byte[][] existsKeys = new byte[memberSize][]; - int j = 0; - for (Map.Entry entry : memberMap.entrySet()) { - byte[] member = entry.getKey().getKey(); - byte[] subKey1 = keyDesign.zsetMemberSubKey1(keyMeta, key, member); - existsKeys[j] = subKey1; - j++; - } - boolean[] exists = kvClient.exists(existsKeys); - int existsCount = Utils.count(exists); - add = memberSize - existsCount; - // - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } else { - // - if (type == null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } - if (result.isKvWriteDelayEnable()) { - submitAsyncWriteTask(cacheKey, result, () -> kvClient.batchPut(list)); - } else { - kvClient.batchPut(list); - } - updateKeyMeta(keyMeta, key, add); - for (Reply reply1 : replyList) { - if (reply1 instanceof ErrorReply) { - return reply1; - } - } - return IntegerReply.parse(add); - } - } - - private Reply zaddVersion3(KeyMeta keyMeta, byte[] key, byte[] cacheKey, int memberSize, Map memberMap, Result result, KvCacheMonitor.Type type) { + private Reply zaddVersion1(KeyMeta keyMeta, byte[] key, byte[] cacheKey, int memberSize, Map memberMap, Result result, KvCacheMonitor.Type type) { if (type == null) { KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); } @@ -496,14 +279,14 @@ private Reply zaddVersion3(KeyMeta keyMeta, byte[] key, byte[] cacheKey, int mem } } if (!memberIndexCacheWriteCommands.isEmpty()) { - List replyList = sync(cacheRedisTemplate.sendCommand(memberIndexCacheWriteCommands)); + List replyList = sync(redisTemplate.sendCommand(memberIndexCacheWriteCommands)); for (Reply reply : replyList) { if (reply instanceof ErrorReply) { return reply; } } } - return sync(storeRedisTemplate.sendCommand(new Command(rewriteCmd))); + return sync(redisTemplate.sendCommand(new Command(rewriteCmd))); } private void updateKeyMeta(KeyMeta keyMeta, byte[] key, int add) { diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZCardCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZCardCommander.java index 04c2143d4..7c4c89aa5 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZCardCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZCardCommander.java @@ -67,9 +67,9 @@ protected Reply execute(Command command) { } EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return sync(storeRedisTemplate.sendCommand(new Command(new byte[][]{RedisCommand.ZCARD.raw(), cacheKey}))); + return sync(redisTemplate.sendCommand(new Command(new byte[][]{RedisCommand.ZCARD.raw(), cacheKey}))); } else { return IntegerReply.parse(BytesUtils.toInt(keyMeta.getExtra())); } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZCountCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZCountCommander.java index ff1d3e5ea..28ac9b32e 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZCountCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZCountCommander.java @@ -16,7 +16,6 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; import com.netease.nim.camellia.redis.proxy.upstream.kv.utils.BytesUtils; -import com.netease.nim.camellia.redis.proxy.upstream.kv.utils.ScriptReplyUtils; import com.netease.nim.camellia.redis.proxy.util.ErrorLogCollector; import java.nio.charset.StandardCharsets; @@ -121,21 +120,9 @@ protected Reply execute(Command command) { return IntegerReply.parse(count); } - if (encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_2) { - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, new byte[][]{objects[2], objects[3]})); - reply = ScriptReplyUtils.check(reply); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - int count = zcountFromKv(keyMeta, key, minScore, maxScore); - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - return IntegerReply.parse(count); - } - - if (encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return sync(storeRedisTemplate.sendCommand(new Command(new byte[][]{RedisCommand.ZCOUNT.raw(), cacheKey, objects[2], objects[3]}))); + return sync(redisTemplate.sendCommand(new Command(new byte[][]{RedisCommand.ZCOUNT.raw(), cacheKey, objects[2], objects[3]}))); } return ErrorReply.INTERNAL_ERROR; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZLexCountCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZLexCountCommander.java index 99009ba4e..4189e1a16 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZLexCountCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZLexCountCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.utils.ScriptReplyUtils; import com.netease.nim.camellia.redis.proxy.util.ErrorLogCollector; -import java.nio.charset.StandardCharsets; import java.util.List; /** @@ -29,13 +28,6 @@ */ public class ZLexCountCommander extends ZSet0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zlexcount', KEYS[1], ARGV[1], ARGV[2]);\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZLexCountCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -64,7 +56,7 @@ protected Reply execute(Command command) { } EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { return ErrorReply.COMMAND_NOT_SUPPORT_IN_CURRENT_KV_ENCODE_VERSION; } @@ -122,18 +114,7 @@ protected Reply execute(Command command) { } } - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - return IntegerReply.parse(zrangeByLexFromKv(keyMeta, key, minLex, maxLex)); - } - - if (encodeVersion == EncodeVersion.version_1) { - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, new byte[][]{objects[2], objects[3]})); - reply = ScriptReplyUtils.check(reply); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } + if (encodeVersion == EncodeVersion.version_0) { KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); return IntegerReply.parse(zrangeByLexFromKv(keyMeta, key, minLex, maxLex)); } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZMScoreCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZMScoreCommander.java index 7d19f5bf2..4e6b657c8 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZMScoreCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZMScoreCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -32,14 +31,6 @@ */ public class ZMScoreCommander extends ZSet0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zmscore', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - - public ZMScoreCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -110,34 +101,6 @@ protected Reply execute(Command command) { } if (encodeVersion == EncodeVersion.version_1) { - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - Reply reply = checkCache(script, cacheKey, args); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - return zmscoreFromKv(keyMeta, key, members); - } - - if (encodeVersion == EncodeVersion.version_2) { - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - for (int i=0; i tuples = zrangeAllFromKv(keyMeta, key); - - byte[][] cmd = new byte[tuples.size() * 2 + 2][]; - cmd[0] = RedisCommand.ZADD.raw(); - cmd[1] = cacheKey; - int i = 2; - for (ZSetTuple tuple : tuples) { - cmd[i] = Utils.doubleToBytes(tuple.getScore()); - cmd[i + 1] = tuple.getMember().getKey(); - i += 2; - } - Command zaddCmd = new Command(cmd); - Command pexireCmd = new Command(new byte[][]{RedisCommand.PEXPIRE.raw(), cacheKey, zsetRangeCacheMillis()}); - List list = new ArrayList<>(2); - list.add(zaddCmd); - list.add(pexireCmd); - List replyList = sync(cacheRedisTemplate.sendCommand(list)); - for (Reply reply1 : replyList) { - if (reply1 instanceof ErrorReply) { - return reply1; - } - } - reply = zrangeFromRedis(cacheKey, script, args, false); - if (reply != null) { - return reply; - } - return ErrorReply.INTERNAL_ERROR; - } - - protected final Reply zrangeVersion2(KeyMeta keyMeta, byte[] key, byte[] cacheKey, byte[][] args, boolean withScores, byte[] script, boolean forRead) { - Reply reply = zrangeFromRedis(cacheKey, script, args, forRead); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - if (reply instanceof MultiBulkReply) { - return checkReplyWithIndex(keyMeta, key, (MultiBulkReply) reply, withScores); - } - return reply; - } - - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - - List tuples = zrangeAllFromKv(keyMeta, key); - byte[][] cmd = new byte[tuples.size() * 2 + 2][]; - cmd[0] = RedisCommand.ZADD.raw(); - cmd[1] = cacheKey; - List refCommands = new ArrayList<>(); - int i = 2; - for (ZSetTuple tuple : tuples) { - cmd[i] = Utils.doubleToBytes(tuple.getScore()); - byte[] member = tuple.getMember().getKey(); - Index index = Index.fromRaw(member); - cmd[i + 1] = index.getRef(); - if (index.isIndex()) { - if (forRead) { - byte[] zsetMemberIndexCacheKey = keyDesign.zsetMemberIndexCacheKey(keyMeta, key, index); - refCommands.add(new Command(new byte[][]{RedisCommand.PSETEX.raw(), zsetMemberIndexCacheKey, zsetMemberCacheMillis(), member})); - } - } - i += 2; - } - Command zaddCmd = new Command(cmd); - Command pexireCmd = new Command(new byte[][]{RedisCommand.PEXPIRE.raw(), cacheKey, zsetRangeCacheMillis()}); - List list = new ArrayList<>(2+refCommands.size()); - list.add(zaddCmd); - list.add(pexireCmd); - list.addAll(refCommands); - List replyList = sync(cacheRedisTemplate.sendCommand(list)); - for (Reply reply1 : replyList) { - if (reply1 instanceof ErrorReply) { - return reply1; - } - } - reply = zrangeFromRedis(cacheKey, script, args, false); - if (reply != null) { - if (reply instanceof MultiBulkReply) { - return checkReplyWithIndex(keyMeta, key, (MultiBulkReply) reply, withScores); - } - return reply; - } - return ErrorReply.INTERNAL_ERROR; - } - - protected final Reply zrangeVersion3(KeyMeta keyMeta, byte[] key, byte[] cacheKey, byte[][] objects, boolean withScores) { + protected final Reply zrangeVersion1(KeyMeta keyMeta, byte[] key, byte[] cacheKey, byte[][] objects, boolean withScores) { byte[][] cmd = new byte[objects.length][]; System.arraycopy(objects, 0, cmd, 0, objects.length); cmd[1] = cacheKey; - Reply reply = sync(storeRedisTemplate.sendCommand(new Command(cmd))); + Reply reply = sync(redisTemplate.sendCommand(new Command(cmd))); if (reply instanceof ErrorReply) { return reply; } @@ -139,30 +48,6 @@ protected final byte[] zsetMemberCacheMillis() { return Utils.stringToBytes(String.valueOf(cacheConfig.zsetMemberCacheMillis())); } - protected final byte[] zsetRangeCacheMillis() { - return Utils.stringToBytes(String.valueOf(cacheConfig.zsetRangeCacheMillis())); - } - - protected final Reply zrangeFromRedis(byte[] cacheKey, byte[] script, byte[][] args, boolean delayTtl) { - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, args)); - if (reply instanceof ErrorReply) { - return reply; - } - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (delayTtl) { - cacheRedisTemplate.sendPExpire(cacheKey, cacheConfig.zsetRangeCacheMillis()); - } - return replies[1]; - } - } - } - return null; - } - protected final Reply checkReplyWithIndex(KeyMeta keyMeta, byte[] key, MultiBulkReply reply, boolean withScores) { Reply[] replies = reply.getReplies(); int step = withScores ? 2: 1; @@ -195,7 +80,7 @@ protected final Reply checkReplyWithIndex(KeyMeta keyMeta, byte[] key, MultiBulk commandList.add(cmd1); commandList.add(cmd2); } - List replyList = sync(cacheRedisTemplate.sendCommand(commandList)); + List replyList = sync(redisTemplate.sendCommand(commandList)); for (int i = 0; i < replyList.size(); i++) { Reply subReply = replyList.get(i); if (subReply instanceof ErrorReply) { @@ -241,7 +126,7 @@ protected final Reply checkReplyWithIndex(KeyMeta keyMeta, byte[] key, MultiBulk missingMemberMap.remove(bytesKey); } if (!buildCacheCommands.isEmpty()) { - List replyList = sync(cacheRedisTemplate.sendCommand(buildCacheCommands)); + List replyList = sync(redisTemplate.sendCommand(buildCacheCommands)); for (Reply reply1 : replyList) { if (reply1 instanceof ErrorReply) { return reply1; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeByLexCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeByLexCommander.java index c78f4c18d..1f6ec49ef 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeByLexCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeByLexCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.util.ErrorLogCollector; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -30,13 +29,6 @@ */ public class ZRangeByLexCommander extends ZRange0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrangebylex', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRangeByLexCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -66,7 +58,7 @@ protected Reply execute(Command command) { EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { return ErrorReply.COMMAND_NOT_SUPPORT_IN_CURRENT_KV_ENCODE_VERSION; } @@ -125,18 +117,11 @@ protected Reply execute(Command command) { } } - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); return zrangeByLexVersion0OrVersion2(keyMeta, key, minLex, maxLex, limit); } - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - - if (encodeVersion == EncodeVersion.version_1) { - return zrangeVersion1(keyMeta, key, cacheKey, args, script, true); - } - return ErrorReply.INTERNAL_ERROR; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeByScoreCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeByScoreCommander.java index f188ed4ef..110be2834 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeByScoreCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeByScoreCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.util.ErrorLogCollector; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -30,13 +29,6 @@ */ public class ZRangeByScoreCommander extends ZRange0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrangebyscore', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRangeByScoreCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -124,20 +116,11 @@ protected Reply execute(Command command) { return zrangeByScoreVersion0(keyMeta, key, minScore, maxScore, limit, withScores); } - if (encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return zrangeVersion3(keyMeta, key, cacheKey, objects, withScores); + return zrangeVersion1(keyMeta, key, cacheKey, objects, withScores); } - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - - if (encodeVersion == EncodeVersion.version_1) { - return zrangeVersion1(keyMeta, key, cacheKey, args, script, true); - } - if (encodeVersion == EncodeVersion.version_2) { - return zrangeVersion2(keyMeta, key, cacheKey, args, withScores, script, true); - } return ErrorReply.INTERNAL_ERROR; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeCommander.java index b63036ef4..37a39dd96 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRangeCommander.java @@ -20,7 +20,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -31,13 +30,6 @@ */ public class ZRangeCommander extends ZRange0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrange', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRangeCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -118,19 +110,9 @@ protected Reply execute(Command command) { return zrangeVersion0(keyMeta, key, start, stop, withScores); } - if (encodeVersion == EncodeVersion.version_3) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return zrangeVersion3(keyMeta, key, cacheKey, objects, withScores); - } - - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - if (encodeVersion == EncodeVersion.version_1) { - return zrangeVersion1(keyMeta, key, cacheKey, args, script, true); - } - if (encodeVersion == EncodeVersion.version_2) { - return zrangeVersion2(keyMeta, key, cacheKey, args, withScores, script, true); + KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); + return zrangeVersion1(keyMeta, key, cacheKey, objects, withScores); } return ErrorReply.INTERNAL_ERROR; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRankCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRankCommander.java index 2382c617f..bf81d15b1 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRankCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRankCommander.java @@ -18,7 +18,6 @@ import com.netease.nim.camellia.tools.utils.BytesKey; import com.netease.nim.camellia.tools.utils.Pair; -import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; @@ -29,13 +28,6 @@ */ public class ZRankCommander extends ZSet0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrank', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRankCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -109,41 +101,13 @@ protected Reply execute(Command command) { } if (encodeVersion == EncodeVersion.version_1) { - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - Reply reply = checkCache(script, cacheKey, args); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - Pair zrank = zrankFromKv(keyMeta, key, member); - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - return toReply(zrank, withScores); - } - - if (encodeVersion == EncodeVersion.version_2) { - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - Index index = Index.fromRaw(args[0]); - args[0] = index.getRef(); - Reply reply = checkCache(script, cacheKey, args); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - Pair zrank = zrankFromKv(keyMeta, key, member); - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - return toReply(zrank, withScores); - } - - if (encodeVersion == EncodeVersion.version_3) { byte[][] cmd = new byte[objects.length][]; System.arraycopy(objects, 0, cmd, 0, cmd.length); cmd[1] = cacheKey; Index index = Index.fromRaw(cmd[2]); cmd[2] = index.getRef(); KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return sync(storeRedisTemplate.sendCommand(new Command(cmd))); + return sync(redisTemplate.sendCommand(new Command(cmd))); } return ErrorReply.INTERNAL_ERROR; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemCommander.java index c69e9eecd..575a326d1 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemCommander.java @@ -16,10 +16,8 @@ import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyMeta; import com.netease.nim.camellia.redis.proxy.upstream.kv.meta.KeyType; import com.netease.nim.camellia.redis.proxy.upstream.kv.utils.BytesUtils; -import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -30,13 +28,6 @@ */ public class ZRemCommander extends ZSet0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrem', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRemCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -137,15 +128,11 @@ protected Reply execute(Command command) { if (encodeVersion == EncodeVersion.version_0) { return zremVersion0(keyMeta, key, cacheKey, members, localCacheResult, result, type); } + if (encodeVersion == EncodeVersion.version_1) { - return zremVersion1(keyMeta, key, cacheKey, members, localCacheResult, result, type); - } - if (encodeVersion == EncodeVersion.version_2) { - return zremVersion2(keyMeta, key, cacheKey, members, localCacheResult, result, type); - } - if (encodeVersion == EncodeVersion.version_3) { - return zremVersion3(keyMeta, key, cacheKey, members, result, type); + return zremVersion1(keyMeta, key, cacheKey, members, result, type); } + return ErrorReply.INTERNAL_ERROR; } @@ -200,159 +187,7 @@ private Reply zremVersion0(KeyMeta keyMeta, byte[] key, byte[] cacheKey, Set members, Map localCacheResult, Result result, KvCacheMonitor.Type type) { - byte[][] args = new byte[members.size()][]; - int i = 0; - for (BytesKey member : members) { - args[i] = member.getKey(); - i++; - } - Reply reply = sync(cacheRedisTemplate.sendLua(script, new byte[][]{cacheKey}, args)); - - int deleteCount = -1; - - if (localCacheResult != null) { - deleteCount = localCacheResult.size(); - } - - if (deleteCount < 0) { - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (replies[1] instanceof IntegerReply) { - deleteCount = (((IntegerReply) replies[1]).getInteger()).intValue(); - type = KvCacheMonitor.Type.redis_cache; - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } - } - } - } - - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - - byte[][] storeKeys = new byte[members.size()][]; - int j=0; - for (BytesKey member : members) { - storeKeys[j] = keyDesign.zsetMemberSubKey1(keyMeta, key, member.getKey()); - j++; - } - - if (deleteCount < 0) { - List existsStoreKeys = new ArrayList<>(args.length); - List keyValues = kvClient.batchGet(storeKeys); - for (KeyValue keyValue : keyValues) { - if (keyValue == null || keyValue.getValue() == null) { - continue; - } - existsStoreKeys.add(keyValue.getKey()); - } - deleteCount = existsStoreKeys.size(); - kvClient.batchDelete(existsStoreKeys.toArray(new byte[0][0])); - } else { - if (result.isKvWriteDelayEnable()) { - submitAsyncWriteTask(cacheKey, result, () -> kvClient.batchDelete(storeKeys)); - } else { - kvClient.batchDelete(storeKeys); - } - } - - updateKeyMeta(keyMeta, key, deleteCount); - - if (reply instanceof ErrorReply) { - return reply; - } - return IntegerReply.parse(deleteCount); - } - - private Reply zremVersion2(KeyMeta keyMeta, byte[] key, byte[] cacheKey, Set members, Map localCacheResult, Result result, KvCacheMonitor.Type type) { - byte[][] args = new byte[members.size()][]; - - List indexCacheDeleteCmd = new ArrayList<>(members.size() + 1); - indexCacheDeleteCmd.add(RedisCommand.DEL.raw()); - - List deleteStoreKeys = new ArrayList<>(members.size()); - List subKeys = new ArrayList<>(members.size()); - int i=0; - for (BytesKey member : members) { - Index index = Index.fromRaw(member.getKey()); - if (index.isIndex()) { - indexCacheDeleteCmd.add(keyDesign.zsetMemberIndexCacheKey(keyMeta, key, index)); - deleteStoreKeys.add(keyDesign.zsetIndexSubKey(keyMeta, key, index)); - } - args[i] = index.getRef(); - - byte[] zsetMemberSubKey1 = keyDesign.zsetMemberSubKey1(keyMeta, key, member.getKey()); - subKeys.add(zsetMemberSubKey1); - deleteStoreKeys.add(zsetMemberSubKey1); - i++; - } - - List commandList = new ArrayList<>(2); - commandList.add(cacheRedisTemplate.luaCommand(script, new byte[][]{cacheKey}, args)); - if (indexCacheDeleteCmd.size() > 1) { - commandList.add(new Command(indexCacheDeleteCmd.toArray(new byte[0][0]))); - } - - List replyList = sync(cacheRedisTemplate.sendCommand(commandList)); - Reply reply = replyList.get(0); - int deleteCount = -1; - if (localCacheResult != null) { - deleteCount = localCacheResult.size(); - } - - if (deleteCount < 0) { - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies[0] instanceof BulkReply) { - byte[] raw = ((BulkReply) replies[0]).getRaw(); - if (Utils.bytesToString(raw).equalsIgnoreCase("1")) { - if (replies[1] instanceof IntegerReply) { - deleteCount = (((IntegerReply) replies[1]).getInteger()).intValue(); - type = KvCacheMonitor.Type.redis_cache; - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - } - } - } - } - - if (type == null) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - } - - if (deleteCount < 0) { - deleteCount = 0; - List keyValues = kvClient.batchGet(subKeys.toArray(new byte[0][0])); - for (KeyValue keyValue : keyValues) { - if (keyValue == null || keyValue.getValue() == null) { - continue; - } - deleteCount ++; - } - } - - if (result.isKvWriteDelayEnable()) { - submitAsyncWriteTask(cacheKey, result, () -> kvClient.batchDelete(deleteStoreKeys.toArray(new byte[0][0]))); - } else { - kvClient.batchDelete(deleteStoreKeys.toArray(new byte[0][0])); - } - - updateKeyMeta(keyMeta, key, deleteCount); - - for (Reply reply1 : replyList) { - if (reply1 instanceof ErrorReply) { - return reply1; - } - } - return IntegerReply.parse(deleteCount); - } - - private Reply zremVersion3(KeyMeta keyMeta, byte[] key, byte[] cacheKey, Set members, Result result, KvCacheMonitor.Type type) { + private Reply zremVersion1(KeyMeta keyMeta, byte[] key, byte[] cacheKey, Set members, Result result, KvCacheMonitor.Type type) { if (type == null) { KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); } @@ -384,7 +219,7 @@ private Reply zremVersion3(KeyMeta keyMeta, byte[] key, byte[] cacheKey, Set> futures = cacheRedisTemplate.sendCommand(commandList); + List> futures = redisTemplate.sendCommand(commandList); if (result.isKvWriteDelayEnable()) { submitAsyncWriteTask(cacheKey, result, () -> { diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRange0Commander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRange0Commander.java index 0552d53a3..8f3cea0d2 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRange0Commander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRange0Commander.java @@ -24,186 +24,7 @@ public ZRemRange0Commander(CommanderConfig commanderConfig) { super(commanderConfig); } - protected final Reply zremrangeVersion1(KeyMeta keyMeta, byte[] key, byte[] cacheKey, byte[][] args, byte[] script, - Map localCacheResult, Result result) { - if (localCacheResult != null) { - byte[][] zremCmd = new byte[localCacheResult.size() + 2][]; - zremCmd[0] = RedisCommand.ZREM.raw(); - zremCmd[1] = cacheKey; - int i = 2; - byte[][] delKeys = new byte[localCacheResult.size()][]; - for (Map.Entry entry : localCacheResult.entrySet()) { - byte[] member = entry.getKey().getKey(); - zremCmd[i] = member; - delKeys[i-2] = keyDesign.zsetMemberSubKey1(keyMeta, key, member); - i ++; - } - - CompletableFuture future = cacheRedisTemplate.sendCommand(new Command(zremCmd)); - if (result.isKvWriteDelayEnable()) { - submitAsyncWriteTask(cacheKey, result, () -> kvClient.batchDelete(delKeys)); - } else { - kvClient.batchDelete(delKeys); - } - - int count = BytesUtils.toInt(keyMeta.getExtra()) - localCacheResult.size(); - updateKeyMeta(keyMeta, key, count); - - Reply reply = sync(future); - if (reply instanceof ErrorReply) { - return reply; - } - return IntegerReply.parse(localCacheResult.size()); - } - Reply reply = zrangeVersion1(keyMeta, key, cacheKey, args, script, false); - if (reply instanceof ErrorReply) { - return reply; - } - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies.length == 0) { - return IntegerReply.REPLY_0; - } - byte[][] zremCmd = new byte[replies.length + 2][]; - zremCmd[0] = RedisCommand.ZREM.raw(); - zremCmd[1] = cacheKey; - int i = 2; - byte[][] delKeys = new byte[replies.length][]; - for (Reply reply1 : replies) { - if (reply1 instanceof BulkReply) { - byte[] member = ((BulkReply) reply1).getRaw(); - zremCmd[i] = member; - delKeys[i-2] = keyDesign.zsetMemberSubKey1(keyMeta, key, member); - } else { - return ErrorReply.INTERNAL_ERROR; - } - i++; - } - List commandList = new ArrayList<>(2); - commandList.add(new Command(zremCmd)); - commandList.add(new Command(new byte[][]{RedisCommand.ZCARD.raw(), cacheKey})); - List> futures = cacheRedisTemplate.sendCommand(commandList); - kvClient.batchDelete(delKeys); - List replyList = sync(futures); - for (Reply reply1 : replyList) { - if (reply1 instanceof ErrorReply) { - return reply1; - } - } - Reply reply1 = replyList.get(1); - if (reply1 instanceof IntegerReply) { - Long size = ((IntegerReply) reply1).getInteger(); - updateKeyMeta(keyMeta, key, size.intValue()); - } - return IntegerReply.parse(replies.length); - } - return ErrorReply.INTERNAL_ERROR; - } - - protected final Reply zremrangeVersion2(KeyMeta keyMeta, byte[] key, byte[] cacheKey, byte[][] args, byte[] script, - Map localCacheResult, Result result) { - if (localCacheResult != null) { - byte[][] zremCmd = new byte[localCacheResult.size() + 2][]; - zremCmd[0] = RedisCommand.ZREM.raw(); - zremCmd[1] = cacheKey; - int i = 2; - List delCacheKeys = new ArrayList<>(localCacheResult.size() * 2); - List delStoreKeys = new ArrayList<>(localCacheResult.size() * 2); - for (Map.Entry entry : localCacheResult.entrySet()) { - byte[] member = entry.getKey().getKey(); - Index index = Index.fromRaw(member); - delStoreKeys.add(keyDesign.zsetMemberSubKey1(keyMeta, key, member)); - if (index.isIndex()) { - delStoreKeys.add(keyDesign.zsetIndexSubKey(keyMeta, key, index)); - delCacheKeys.add(keyDesign.zsetMemberIndexCacheKey(keyMeta, key, index)); - } - zremCmd[i] = index.getRef(); - i ++; - } - List commands = new ArrayList<>(2); - commands.add(new Command(zremCmd)); - if (!delCacheKeys.isEmpty()) { - List delCmd = new ArrayList<>(delCacheKeys.size() + 1); - delCmd.add(RedisCommand.DEL.raw()); - delCmd.addAll(delCacheKeys); - commands.add(new Command(delCmd.toArray(new byte[0][0]))); - } - List> futures = cacheRedisTemplate.sendCommand(commands); - - if (result.isKvWriteDelayEnable()) { - submitAsyncWriteTask(cacheKey, result, () -> kvClient.batchDelete(delStoreKeys.toArray(new byte[0][0]))); - } else { - kvClient.batchDelete(delStoreKeys.toArray(new byte[0][0])); - } - - int count = BytesUtils.toInt(keyMeta.getExtra()) - localCacheResult.size(); - updateKeyMeta(keyMeta, key, count); - - List replyList = sync(futures); - for (Reply reply : replyList) { - if (reply instanceof ErrorReply) { - return reply; - } - } - return IntegerReply.parse(localCacheResult.size()); - } - - Reply reply = zrangeVersion2(keyMeta, key, cacheKey, args, false, script, false); - if (reply instanceof ErrorReply) { - return reply; - } - if (reply instanceof MultiBulkReply) { - Reply[] replies = ((MultiBulkReply) reply).getReplies(); - if (replies.length == 0) { - return IntegerReply.REPLY_0; - } - byte[][] zremCmd = new byte[replies.length + 2][]; - zremCmd[0] = RedisCommand.ZREM.raw(); - zremCmd[1] = cacheKey; - int i = 2; - List delCacheKeys = new ArrayList<>(replies.length + 1); - delCacheKeys.add(RedisCommand.DEL.raw()); - List delStoreKeys = new ArrayList<>(replies.length * 2); - for (Reply reply1 : replies) { - if (reply1 instanceof BulkReply) { - byte[] member = ((BulkReply) reply1).getRaw(); - Index index = Index.fromRaw(member); - zremCmd[i] = index.getRef(); - delStoreKeys.add(keyDesign.zsetMemberSubKey1(keyMeta, key, member)); - if (index.isIndex()) { - delStoreKeys.add(keyDesign.zsetIndexSubKey(keyMeta, key, index)); - delCacheKeys.add(keyDesign.zsetMemberIndexCacheKey(keyMeta, key, index)); - } - } else { - return ErrorReply.INTERNAL_ERROR; - } - i++; - } - List cmds = new ArrayList<>(2); - cmds.add(new Command(zremCmd)); - cmds.add(new Command(new byte[][]{RedisCommand.ZCARD.raw(), cacheKey})); - if (delCacheKeys.size() > 1) { - cmds.add(new Command(delCacheKeys.toArray(new byte[0][0]))); - } - List> futures = cacheRedisTemplate.sendCommand(cmds); - kvClient.batchDelete(delStoreKeys.toArray(new byte[0][0])); - List replyList = sync(futures); - for (Reply reply1 : replyList) { - if (reply1 instanceof ErrorReply) { - return reply1; - } - } - Reply reply1 = replyList.get(1); - if (reply1 instanceof IntegerReply) { - Long size = ((IntegerReply) reply1).getInteger(); - updateKeyMeta(keyMeta, key, size.intValue()); - } - return IntegerReply.parse(replies.length); - } - return ErrorReply.INTERNAL_ERROR; - } - - protected final Reply zremrangeVersion3(KeyMeta keyMeta, byte[] key, byte[] cacheKey, byte[][] objects, RedisCommand redisCommand, + protected final Reply zremrangeVersion1(KeyMeta keyMeta, byte[] key, byte[] cacheKey, byte[][] objects, RedisCommand redisCommand, Map localCacheResult, Result result) { if (localCacheResult != null) { byte[][] zremCmd = new byte[localCacheResult.size() + 2][]; @@ -223,13 +44,13 @@ protected final Reply zremrangeVersion3(KeyMeta keyMeta, byte[] key, byte[] cach zremCmd[i] = index.getRef(); i ++; } - CompletableFuture future1 = storeRedisTemplate.sendCommand(new Command(zremCmd)); + CompletableFuture future1 = redisTemplate.sendCommand(new Command(zremCmd)); CompletableFuture future2 = null; if (!delCacheKeys.isEmpty()) { List delCmd = new ArrayList<>(delCacheKeys.size() + 1); delCmd.add(RedisCommand.DEL.raw()); delCmd.addAll(delCacheKeys); - future2 = cacheRedisTemplate.sendCommand(new Command(delCmd.toArray(new byte[0][0]))); + future2 = redisTemplate.sendCommand(new Command(delCmd.toArray(new byte[0][0]))); } if (result.isKvWriteDelayEnable()) { @@ -261,7 +82,7 @@ protected final Reply zremrangeVersion3(KeyMeta keyMeta, byte[] key, byte[] cach return ErrorReply.INTERNAL_ERROR; } cmd[1] = cacheKey; - Reply reply = sync(storeRedisTemplate.sendCommand(new Command(cmd))); + Reply reply = sync(redisTemplate.sendCommand(new Command(cmd))); if (reply instanceof ErrorReply) { return reply; } @@ -297,7 +118,7 @@ protected final Reply zremrangeVersion3(KeyMeta keyMeta, byte[] key, byte[] cach if (delCacheKeys.size() > 1) { cmds.add(new Command(delCacheKeys.toArray(new byte[0][0]))); } - List> futures = cacheRedisTemplate.sendCommand(cmds); + List> futures = redisTemplate.sendCommand(cmds); if (!delStoreKeys.isEmpty()) { kvClient.batchDelete(delStoreKeys.toArray(new byte[0][0])); } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByLexCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByLexCommander.java index 697d54ae0..cbfada4c6 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByLexCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByLexCommander.java @@ -24,7 +24,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -38,13 +37,6 @@ */ public class ZRemRangeByLexCommander extends ZRemRange0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrangebylex', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRemRangeByLexCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -74,7 +66,7 @@ protected Reply execute(Command command) { EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { return ErrorReply.COMMAND_NOT_SUPPORT_IN_CURRENT_KV_ENCODE_VERSION; } @@ -164,22 +156,15 @@ protected Reply execute(Command command) { KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); } - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { - return zremrangeByLexVersion0OrVersion2(keyMeta, key, cacheKey, minLex, maxLex, localCacheResult, result); - } - - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - - if (encodeVersion == EncodeVersion.version_1) { - return zremrangeVersion1(keyMeta, key, cacheKey, args, script, localCacheResult, result); + if (encodeVersion == EncodeVersion.version_0) { + return zremrangeByLex(keyMeta, key, cacheKey, minLex, maxLex, localCacheResult, result); } return ErrorReply.INTERNAL_ERROR; } - private Reply zremrangeByLexVersion0OrVersion2(KeyMeta keyMeta, byte[] key, byte[] cacheKey, ZSetLex minLex, ZSetLex maxLex, - Map localCacheResult, Result result) { + private Reply zremrangeByLex(KeyMeta keyMeta, byte[] key, byte[] cacheKey, ZSetLex minLex, ZSetLex maxLex, + Map localCacheResult, Result result) { EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); Map toRemoveMembers = localCacheResult; @@ -233,7 +218,7 @@ private Reply zremrangeByLexVersion0OrVersion2(KeyMeta keyMeta, byte[] key, byte commands.add(new Command(deleteCmd.toArray(new byte[0][0]))); } - List> futures = cacheRedisTemplate.sendCommand(commands); + List> futures = redisTemplate.sendCommand(commands); if (result.isKvWriteDelayEnable()) { submitAsyncWriteTask(cacheKey, result, () -> kvClient.batchDelete(deleteStoreKeys.toArray(new byte[0][0]))); diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByRankCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByRankCommander.java index 04e42d72e..408bb1dd3 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByRankCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByRankCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -31,12 +30,6 @@ */ public class ZRemRangeByRankCommander extends ZRemRange0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrange', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); public ZRemRangeByRankCommander(CommanderConfig commanderConfig) { super(commanderConfig); @@ -142,18 +135,8 @@ protected Reply execute(Command command) { return zremrangeByRankVersion0(keyMeta, key, cacheKey, start, stop, localCacheResult, result); } - if (encodeVersion == EncodeVersion.version_3) { - return zremrangeVersion3(keyMeta, key, cacheKey, objects, redisCommand(), localCacheResult, result); - } - - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - if (encodeVersion == EncodeVersion.version_1) { - return zremrangeVersion1(keyMeta, key, cacheKey, args, script, localCacheResult, result); - } - if (encodeVersion == EncodeVersion.version_2) { - return zremrangeVersion2(keyMeta, key, cacheKey, args, script, localCacheResult, result); + return zremrangeVersion1(keyMeta, key, cacheKey, objects, redisCommand(), localCacheResult, result); } return ErrorReply.INTERNAL_ERROR; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByScoreCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByScoreCommander.java index bf4ff07b8..73082f080 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByScoreCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRemRangeByScoreCommander.java @@ -21,7 +21,6 @@ import com.netease.nim.camellia.redis.proxy.util.ErrorLogCollector; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -33,12 +32,6 @@ */ public class ZRemRangeByScoreCommander extends ZRemRange0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrangebyscore', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); public ZRemRangeByScoreCommander(CommanderConfig commanderConfig) { super(commanderConfig); @@ -155,18 +148,8 @@ protected Reply execute(Command command) { return zremrangeByScore(keyMeta, key, cacheKey, minScore, maxScore, localCacheResult, result); } - if (encodeVersion == EncodeVersion.version_3) { - return zremrangeVersion3(keyMeta, key, cacheKey, objects, redisCommand(), localCacheResult, result); - } - - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - if (encodeVersion == EncodeVersion.version_1) { - return zremrangeVersion1(keyMeta, key, cacheKey, args, script, localCacheResult, result); - } - if (encodeVersion == EncodeVersion.version_2) { - return zremrangeVersion2(keyMeta, key, cacheKey, args, script, localCacheResult, result); + return zremrangeVersion1(keyMeta, key, cacheKey, objects, redisCommand(), localCacheResult, result); } return ErrorReply.INTERNAL_ERROR; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeByLexCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeByLexCommander.java index d768f1905..01bd2e110 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeByLexCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeByLexCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.util.ErrorLogCollector; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -30,13 +29,6 @@ */ public class ZRevRangeByLexCommander extends ZRange0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrevrangebylex', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRevRangeByLexCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -66,7 +58,7 @@ protected Reply execute(Command command) { EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { return ErrorReply.COMMAND_NOT_SUPPORT_IN_CURRENT_KV_ENCODE_VERSION; } @@ -126,7 +118,7 @@ protected Reply execute(Command command) { } } - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); if (!kvClient.supportReverseScan()) { return zrevrangeByLexVersion0NotSupportReverseScan(keyMeta, key, cacheKey, minLex, maxLex, limit); @@ -134,13 +126,6 @@ protected Reply execute(Command command) { return zrevrangeByLexVersion0OrVersion2(keyMeta, key, minLex, maxLex, limit); } - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - - if (encodeVersion == EncodeVersion.version_1) { - return zrangeVersion1(keyMeta, key, cacheKey, args, script, true); - } - return ErrorReply.INTERNAL_ERROR; } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeByScoreCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeByScoreCommander.java index 915e6464a..ad76f15a9 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeByScoreCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeByScoreCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.redis.proxy.util.ErrorLogCollector; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -30,13 +29,6 @@ */ public class ZRevRangeByScoreCommander extends ZRange0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrevrangebyscore', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRevRangeByScoreCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -127,19 +119,9 @@ protected Reply execute(Command command) { return zrevrangeByScoreVersion0(keyMeta, key, minScore, maxScore, limit, withScores); } - if (encodeVersion == EncodeVersion.version_3) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return zrangeVersion3(keyMeta, key, cacheKey, objects, withScores); - } - - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - if (encodeVersion == EncodeVersion.version_1) { - return zrangeVersion1(keyMeta, key, cacheKey, args , script, true); - } - if (encodeVersion == EncodeVersion.version_2) { - return zrangeVersion2(keyMeta, key, cacheKey, args, withScores, script, true); + KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); + return zrangeVersion1(keyMeta, key, cacheKey, objects, withScores); } return ErrorReply.INTERNAL_ERROR; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeCommander.java index b9261a14e..e818b3786 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRangeCommander.java @@ -20,7 +20,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -31,13 +30,6 @@ */ public class ZRevRangeCommander extends ZRange0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrevrange', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRevRangeCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -121,19 +113,9 @@ protected Reply execute(Command command) { return zrevrangeVersion0(keyMeta, key, start, stop, withScores); } - if (encodeVersion == EncodeVersion.version_3) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return zrangeVersion3(keyMeta, key, cacheKey, objects, withScores); - } - - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - if (encodeVersion == EncodeVersion.version_1) { - return zrangeVersion1(keyMeta, key, cacheKey, args, script, true); - } - if (encodeVersion == EncodeVersion.version_2) { - return zrangeVersion2(keyMeta, key, cacheKey, args, withScores, script, true); + KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); + return zrangeVersion1(keyMeta, key, cacheKey, objects, withScores); } return ErrorReply.INTERNAL_ERROR; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRankCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRankCommander.java index 9dd69e962..ccd7e6304 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRankCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZRevRankCommander.java @@ -19,7 +19,6 @@ import com.netease.nim.camellia.tools.utils.BytesKey; import com.netease.nim.camellia.tools.utils.Pair; -import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; @@ -30,13 +29,6 @@ */ public class ZRevRankCommander extends ZSet0Commander { - private static final byte[] script = ("local ret1 = redis.call('exists', KEYS[1]);\n" + - "if tonumber(ret1) == 1 then\n" + - " local ret = redis.call('zrevrank', KEYS[1], unpack(ARGV));\n" + - " return {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZRevRankCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -107,39 +99,13 @@ protected Reply execute(Command command) { } if (encodeVersion == EncodeVersion.version_1) { - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - Reply reply = checkCache(script, cacheKey, args); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - return zrevrank(keyMeta, key, cacheKey, member, withScores); - } - - if (encodeVersion == EncodeVersion.version_2) { - byte[][] args = new byte[objects.length - 2][]; - System.arraycopy(objects, 2, args, 0, args.length); - Index index = Index.fromRaw(args[0]); - args[0] = index.getRef(); - Reply reply = checkCache(script, cacheKey, args); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - return zrevrank(keyMeta, key, cacheKey, member, withScores); - } - - if (encodeVersion == EncodeVersion.version_3) { byte[][] cmd = new byte[objects.length][]; System.arraycopy(objects, 0, cmd, 0, cmd.length); cmd[1] = cacheKey; Index index = Index.fromRaw(cmd[2]); cmd[2] = index.getRef(); KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return sync(storeRedisTemplate.sendCommand(new Command(cmd))); + return sync(redisTemplate.sendCommand(new Command(cmd))); } return ErrorReply.INTERNAL_ERROR; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZScoreCommander.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZScoreCommander.java index 3aae4b032..7e4e8ca7b 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZScoreCommander.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/command/zset/ZScoreCommander.java @@ -18,7 +18,6 @@ import com.netease.nim.camellia.redis.proxy.util.Utils; import com.netease.nim.camellia.tools.utils.BytesKey; -import java.nio.charset.StandardCharsets; /** * ZSCORE key member @@ -27,14 +26,6 @@ */ public class ZScoreCommander extends ZSet0Commander { - private static final byte[] script = ("local arg = redis.call('exists', KEYS[1]);\n" + - "if tonumber(arg) == 1 then\n" + - "\tlocal ret = redis.call('zscore', KEYS[1], ARG[1]);\n" + - "\tredis.call('pexpire', KEYS[1], ARGV[2]);\n" + - "\treturn {'1', ret};\n" + - "end\n" + - "return {'2'};").getBytes(StandardCharsets.UTF_8); - public ZScoreCommander(CommanderConfig commanderConfig) { super(commanderConfig); } @@ -118,30 +109,9 @@ protected Reply execute(Command command) { } if (encodeVersion == EncodeVersion.version_1) { - Reply reply = checkCache(script, cacheKey, new byte[][]{member, zsetRangeCacheMillis()}); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - return zscoreFromKv(keyMeta, key, member); - } - - if (encodeVersion == EncodeVersion.version_2) { - Index index = Index.fromRaw(member); - Reply reply = checkCache(script, cacheKey, new byte[][]{index.getRef(), zsetRangeCacheMillis()}); - if (reply != null) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return reply; - } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), redisCommand().strRaw()); - return zscoreFromKv(keyMeta, key, member); - } - - if (encodeVersion == EncodeVersion.version_3) { Index index = Index.fromRaw(member); KvCacheMonitor.redisCache(cacheConfig.getNamespace(), redisCommand().strRaw()); - return sync(storeRedisTemplate.sendCommand(new Command(new byte[][]{RedisCommand.ZSCORE.raw(), cacheKey, index.getRef()}))); + return sync(redisTemplate.sendCommand(new Command(new byte[][]{RedisCommand.ZSCORE.raw(), cacheKey, index.getRef()}))); } return ErrorReply.INTERNAL_ERROR; @@ -156,7 +126,4 @@ private Reply zscoreFromKv(KeyMeta keyMeta, byte[] key, byte[] member) { return new BulkReply(keyValue.getValue()); } - protected final byte[] zsetRangeCacheMillis() { - return Utils.stringToBytes(String.valueOf(cacheConfig.zsetRangeCacheMillis())); - } } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/domain/KeyDesign.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/domain/KeyDesign.java index 3f5d62300..f256feede 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/domain/KeyDesign.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/domain/KeyDesign.java @@ -247,10 +247,6 @@ public EncodeVersion hashKeyMetaVersion() { return EncodeVersion.version_0; } else if (version == 1) { return EncodeVersion.version_1; - } else if (version == 2) { - return EncodeVersion.version_2; - } else if (version == 3) { - return EncodeVersion.version_3; } else { throw new KvException("ERR illegal key meta version"); } @@ -262,10 +258,6 @@ public EncodeVersion zsetKeyMetaVersion() { return EncodeVersion.version_0; } else if (version == 1) { return EncodeVersion.version_1; - } else if (version == 2) { - return EncodeVersion.version_2; - } else if (version == 3) { - return EncodeVersion.version_3; } else { throw new KvException("ERR illegal key meta version"); } @@ -277,10 +269,6 @@ public EncodeVersion setKeyMetaVersion() { return EncodeVersion.version_0; } else if (version == 1) { return EncodeVersion.version_1; - } else if (version == 2) { - return EncodeVersion.version_2; - } else if (version == 3) { - return EncodeVersion.version_3; } else { throw new KvException("ERR illegal key meta version"); } diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/gc/KvGcExecutor.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/gc/KvGcExecutor.java index cbf13a8b4..22863a91a 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/gc/KvGcExecutor.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/gc/KvGcExecutor.java @@ -409,13 +409,13 @@ private int clearSetSubKeys() { private int clearZSetSubKeys() { int count = 0; EncodeVersion encodeVersion = keyMeta.getEncodeVersion(); - if (encodeVersion == EncodeVersion.version_0 || encodeVersion == EncodeVersion.version_1 || encodeVersion == EncodeVersion.version_2) { + if (encodeVersion == EncodeVersion.version_0) { count += clearByPrefix(keyDesign.subKeyPrefix(keyMeta, key)); } if (encodeVersion == EncodeVersion.version_0) { count += clearByPrefix(keyDesign.subKeyPrefix2(keyMeta, key)); } - if (encodeVersion == EncodeVersion.version_2 || encodeVersion == EncodeVersion.version_3) { + if (encodeVersion == EncodeVersion.version_1) { count += clearByPrefix(keyDesign.subIndexKeyPrefix(keyMeta, key)); } return count; diff --git a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/meta/DefaultKeyMetaServer.java b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/meta/DefaultKeyMetaServer.java index 3536dbfeb..69416c29d 100644 --- a/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/meta/DefaultKeyMetaServer.java +++ b/camellia-redis-proxy/camellia-redis-proxy-core/src/main/java/com/netease/nim/camellia/redis/proxy/upstream/kv/meta/DefaultKeyMetaServer.java @@ -31,23 +31,16 @@ public class DefaultKeyMetaServer implements KeyMetaServer { private final KeyMetaLRUCache keyMetaLRUCache; private final WriteBuffer writeBuffer; private final MpscSlotHashExecutor asyncWriteExecutor; - private final ConcurrentLinkedHashMap delayCacheKeyMap; private final KVClient kvClient; - private final RedisTemplate redisTemplate; private final KeyDesign keyDesign; private final KvGcExecutor gcExecutor; private final CacheConfig cacheConfig; - public DefaultKeyMetaServer(KVClient kvClient, RedisTemplate redisTemplate, KeyDesign keyDesign, KvGcExecutor gcExecutor, CacheConfig cacheConfig) { + public DefaultKeyMetaServer(KVClient kvClient, KeyDesign keyDesign, KvGcExecutor gcExecutor, CacheConfig cacheConfig) { this.kvClient = kvClient; - this.redisTemplate = redisTemplate; this.keyDesign = keyDesign; this.gcExecutor = gcExecutor; this.cacheConfig = cacheConfig; - this.delayCacheKeyMap = new ConcurrentLinkedHashMap.Builder() - .initialCapacity(cacheConfig.keyMetaCacheDelayMapSize()) - .maximumWeightedCapacity(cacheConfig.keyMetaCacheDelayMapSize()) - .build(); this.asyncWriteExecutor = KvExecutors.getInstance().getAsyncWriteExecutor(); this.keyMetaLRUCache = cacheConfig.getKeyMetaLRUCache(); this.writeBuffer = WriteBuffer.newWriteBuffer(cacheConfig.getNamespace(), "key.meta"); @@ -90,100 +83,27 @@ public KeyMeta getKeyMeta(byte[] key) { byte[] metaKey = keyDesign.metaKey(key); - if (!cacheConfig.isMetaCacheEnable()) { - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), "getKeyMeta"); - KeyValue keyValue = kvClient.get(metaKey); - if (keyValue == null || keyValue.getValue() == null) { - keyMetaLRUCache.setNull(key); - return null; - } - KeyMeta keyMeta = KeyMeta.fromBytes(keyValue.getValue()); - if (keyMeta == null || keyMeta.isExpire()) { - kvClient.delete(metaKey); - KvGcMonitor.deleteMetaKeys(cacheConfig.getNamespace(), 1); - keyMetaLRUCache.setNull(key); - return null; - } - if (cacheConfig.isMetaLocalCacheEnable()) { - keyMetaLRUCache.put(key, keyMeta); - } - return keyMeta; - } - - Reply reply = sync(redisTemplate.sendGet(metaKey)); - if (reply instanceof ErrorReply) { - throw new KvException(((ErrorReply) reply).getError()); + KvCacheMonitor.kvStore(cacheConfig.getNamespace(), "getKeyMeta"); + KeyValue keyValue = kvClient.get(metaKey); + if (keyValue == null || keyValue.getValue() == null) { + keyMetaLRUCache.setNull(key); + return null; } - if (reply instanceof BulkReply) { - byte[] raw = ((BulkReply) reply).getRaw(); - KeyMeta keyMeta = null; - if (raw != null) { - keyMeta = KeyMeta.fromBytes(raw); - } + KeyMeta keyMeta = KeyMeta.fromBytes(keyValue.getValue()); + if (keyMeta == null || keyMeta.isExpire()) { + kvClient.delete(metaKey); + KvGcMonitor.deleteMetaKeys(cacheConfig.getNamespace(), 1); + keyMetaLRUCache.setNull(key); if (keyMeta != null) { - BytesKey bytesKey = new BytesKey(key); - Long lastDelayTime = delayCacheKeyMap.get(bytesKey); - if (lastDelayTime == null || System.currentTimeMillis() - lastDelayTime > cacheConfig.keyMetaCacheKeyDelayMinIntervalSeconds()*1000L) { - long redisExpireMillis = redisExpireMillis(keyMeta); - if (redisExpireMillis > 0) { - redisTemplate.sendPSetEx(metaKey, redisExpireMillis, keyMeta.toBytes()); - delayCacheKeyMap.put(bytesKey, System.currentTimeMillis()); - } - } - if (cacheConfig.isMetaLocalCacheEnable()) { - keyMetaLRUCache.put(key, keyMeta); - } - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), "getKeyMeta"); - return keyMeta; + gcExecutor.submitSubKeyDeleteTask(key, keyMeta); } - KvCacheMonitor.kvStore(cacheConfig.getNamespace(), "getKeyMeta"); - - KeyValue keyValue = kvClient.get(metaKey); - if (keyValue == null || keyValue.getValue() == null) { - keyMetaLRUCache.setNull(key); - return null; - } - keyMeta = KeyMeta.fromBytes(keyValue.getValue()); - if (keyMeta == null || keyMeta.isExpire()) { - kvClient.delete(metaKey); - KvGcMonitor.deleteMetaKeys(cacheConfig.getNamespace(), 1); - if (keyMeta != null) { - gcExecutor.submitSubKeyDeleteTask(key, keyMeta); - } - keyMetaLRUCache.setNull(key); - return null; - } - - long redisExpireMillis = redisExpireMillis(keyMeta); - - if (redisExpireMillis > 0) { - Reply reply1 = sync(redisTemplate.sendPSetEx(metaKey, redisExpireMillis, keyMeta.toBytes())); - if (reply1 instanceof ErrorReply) { - throw new KvException(((ErrorReply) reply1).getError()); - } - delayCacheKeyMap.put(new BytesKey(key), System.currentTimeMillis()); - } - if (cacheConfig.isMetaLocalCacheEnable()) { - keyMetaLRUCache.put(key, keyMeta); - } - return keyMeta; + return null; } - ErrorLogCollector.collect(DefaultKeyMetaServer.class, "reply = " + reply); - throw new KvException("ERR key meta error"); - } - private long redisExpireMillis(KeyMeta keyMeta) { - long redisExpireMillis; - if (keyMeta.getExpireTime() < 0) { - redisExpireMillis = cacheConfig.metaCacheMillis(); - } else { - redisExpireMillis = keyMeta.getExpireTime() - System.currentTimeMillis(); - redisExpireMillis = Math.min(redisExpireMillis, cacheConfig.metaCacheMillis()); - } - if (redisExpireMillis <= 0) { - redisExpireMillis = 1; + if (cacheConfig.isMetaLocalCacheEnable()) { + keyMetaLRUCache.put(key, keyMeta); } - return redisExpireMillis; + return keyMeta; } @Override @@ -194,16 +114,6 @@ public void createOrUpdateKeyMeta(byte[] key, KeyMeta keyMeta) { if (cacheConfig.isMetaLocalCacheEnable()) { keyMetaLRUCache.put(key, keyMeta); } - if (cacheConfig.isMetaCacheEnable()) { - Reply reply; - long redisExpireMillis = redisExpireMillis(keyMeta); - reply = sync(redisTemplate.sendPSetEx(metaKey, redisExpireMillis, keyMeta.toBytes())); - delayCacheKeyMap.put(new BytesKey(key), System.currentTimeMillis()); - - if (reply instanceof ErrorReply) { - throw new KvException(((ErrorReply) reply).getError()); - } - } if (!result.isKvWriteDelayEnable()) { put(metaKey, keyMeta); } else { @@ -228,13 +138,6 @@ public void deleteKeyMeta(byte[] key) { if (cacheConfig.isMetaLocalCacheEnable()) { keyMetaLRUCache.remove(key); } - if (cacheConfig.isMetaCacheEnable()) { - Reply reply = sync(redisTemplate.sendDel(metaKey)); - if (reply instanceof ErrorReply) { - throw new KvException(((ErrorReply) reply).getError()); - } - delayCacheKeyMap.remove(new BytesKey(key)); - } if (result.isKvWriteDelayEnable()) { submitAsyncWriteTask(key, result, () -> { kvClient.delete(metaKey); @@ -282,18 +185,6 @@ public boolean existsKeyMeta(byte[] key) { } byte[] metaKey = keyDesign.metaKey(key); - if (cacheConfig.isMetaCacheEnable()) { - Reply reply = sync(redisTemplate.sendExists(metaKey)); - if (reply instanceof ErrorReply) { - throw new KvException(((ErrorReply) reply).getError()); - } - if (reply instanceof IntegerReply) { - if (((IntegerReply) reply).getInteger().intValue() > 0) { - KvCacheMonitor.redisCache(cacheConfig.getNamespace(), "existsKeyMeta"); - return true; - } - } - } KvCacheMonitor.kvStore(cacheConfig.getNamespace(), "existsKeyMeta"); KeyValue keyValue = kvClient.get(metaKey); if (keyValue == null || keyValue.getValue() == null) { @@ -321,19 +212,9 @@ public void checkKeyMetaExpired(byte[] key) { if (cacheConfig.isMetaLocalCacheEnable()) { keyMetaLRUCache.remove(key); } - if (cacheConfig.isMetaCacheEnable()) { - Reply reply = sync(redisTemplate.sendDel(metaKey)); - if (reply instanceof ErrorReply) { - ErrorLogCollector.collect(DefaultKeyMetaServer.class, "checkKeyMetaExpired error, error = " + ((ErrorReply) reply).getError()); - } - } } } - private Reply sync(CompletableFuture future) { - return redisTemplate.sync(future, cacheConfig.keyMetaTimeoutMillis()); - } - private void submitAsyncWriteTask(byte[] key, Result result, Runnable runnable) { try { asyncWriteExecutor.submit(key, () -> { diff --git a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/MiscTest.java b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/MiscTest.java index c01c55883..34bfb61cd 100644 --- a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/MiscTest.java +++ b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/MiscTest.java @@ -33,10 +33,10 @@ public static void main(String[] args) { for (int i = 0; i { while (true) { - if (hashVersion == 0 || hashVersion == 2) { - TestHashV0V2.testHash(template); - } else if (hashVersion == 1 || hashVersion == 3){ - TestHashV1V3.testHash(template); + if (hashVersion == 0) { + TestHashV0.testHash(template); + } else if (hashVersion == 1){ + TestHashV1.testHash(template); } sleep(100); } @@ -44,10 +44,10 @@ public static void main(String[] args) { new Thread(() -> { while (true) { - if (zsetVersion == 0 || zsetVersion == 1 || zsetVersion == 2) { - TestZSetV0V1V2.testZSet(template); - } else if (zsetVersion == 3) { - TestZSetV3.testZSet(template); + if (zsetVersion == 0) { + TestZSetV0.testZSet(template); + } else if (zsetVersion == 1) { + TestZSetV1.testZSet(template); } sleep(100); } @@ -64,10 +64,10 @@ public static void main(String[] args) { new Thread(() -> { while (true) { - if (setVersion == 0 || setVersion == 2) { - TestSetV0V2.testSet(template); - } else if (setVersion == 1 || setVersion == 3) { - TestSetV1V3.testSet(template); + if (setVersion == 0) { + TestSetV0.testSet(template); + } else if (setVersion == 1) { + TestSetV1.testSet(template); } sleep(100); } diff --git a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV0V2.java b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV0.java similarity index 99% rename from camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV0V2.java rename to camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV0.java index 47e2e348c..be426181a 100644 --- a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV0V2.java +++ b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV0.java @@ -13,7 +13,7 @@ /** * Created by caojiajun on 2024/4/12 */ -public class TestHashV0V2 { +public class TestHashV0 { private static final ThreadLocal dataFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")); diff --git a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV1V3.java b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV1.java similarity index 99% rename from camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV1V3.java rename to camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV1.java index 3d3d6066a..98ff062fe 100644 --- a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV1V3.java +++ b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestHashV1.java @@ -13,7 +13,7 @@ /** * Created by caojiajun on 2024/4/12 */ -public class TestHashV1V3 { +public class TestHashV1 { private static final ThreadLocal dataFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")); diff --git a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV0V2.java b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV0.java similarity index 99% rename from camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV0V2.java rename to camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV0.java index 05fdbb9d2..e9cbd6c18 100644 --- a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV0V2.java +++ b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV0.java @@ -13,7 +13,7 @@ /** * Created by caojiajun on 2024/8/6 */ -public class TestSetV0V2 { +public class TestSetV0 { private static final ThreadLocal dataFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")); diff --git a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV1V3.java b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV1.java similarity index 99% rename from camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV1V3.java rename to camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV1.java index 64ee46270..694ef91dd 100644 --- a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV1V3.java +++ b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestSetV1.java @@ -13,7 +13,7 @@ /** * Created by caojiajun on 2024/8/6 */ -public class TestSetV1V3 { +public class TestSetV1 { private static final ThreadLocal dataFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")); diff --git a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV0V1V2.java b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV0.java similarity index 99% rename from camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV0V1V2.java rename to camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV0.java index f0744f6ff..1ef9ce51a 100644 --- a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV0V1V2.java +++ b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV0.java @@ -14,7 +14,7 @@ /** * Created by caojiajun on 2024/5/16 */ -public class TestZSetV0V1V2 { +public class TestZSetV0 { private static final ThreadLocal dataFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")); diff --git a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV3.java b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV1.java similarity index 99% rename from camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV3.java rename to camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV1.java index 28a08b51f..eb8030cd6 100644 --- a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV3.java +++ b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/java/com/netease/nim/camellia/redis/proxy/kv/samples/TestZSetV1.java @@ -14,7 +14,7 @@ /** * Created by caojiajun on 2024/5/16 */ -public class TestZSetV3 { +public class TestZSetV1 { private static final ThreadLocal dataFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")); diff --git a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/resources/camellia-redis-proxy.properties b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/resources/camellia-redis-proxy.properties index 00a1ed179..78da18407 100644 --- a/camellia-samples/camellia-redis-proxy-kv-samples/src/main/resources/camellia-redis-proxy.properties +++ b/camellia-samples/camellia-redis-proxy-kv-samples/src/main/resources/camellia-redis-proxy.properties @@ -12,7 +12,6 @@ kv.client.class.name=com.netease.nim.camellia.redis.proxy.kv.hbase.HBaseKVClient #kv.client.class.name=com.netease.nim.camellia.redis.proxy.kv.tikv.TiKVClient kv.redis.cache.url=redis://@127.0.0.1:6379 -kv.redis.store.url=redis://@127.0.0.1:6379 kv.hash.key.meta.version=0 kv.zset.key.meta.version=0