diff --git a/src/main/java/io/jboot/db/model/JbootModel.java b/src/main/java/io/jboot/db/model/JbootModel.java index 5b5645ebf2f8bdc0375efb1a70ae3eb8b5cc9e55..47e3ba343e20dceb75d430fd66357bb513e4e68c 100644 --- a/src/main/java/io/jboot/db/model/JbootModel.java +++ b/src/main/java/io/jboot/db/model/JbootModel.java @@ -765,12 +765,23 @@ public class JbootModel> extends Model { } public List findListByColumns(Columns columns, String orderBy, Integer count, String loadColumns) { + return findListByColumns(columns, orderBy,0, count, loadColumns); + } + + public List findListByColumns(Columns columns, String orderBy,Integer start, Integer count, String loadColumns) { processColumns(columns, "findList"); loadColumns = getLoadColumns(loadColumns); - String sql = _getDialect().forFindByColumns(alias, joins, _getTableName(), loadColumns, columns.getList(), orderBy, count); + String limitStr = buildLimitStr(start, count); + String sql = _getDialect().forFindByColumns(alias, joins, _getTableName(), loadColumns, columns.getList(), orderBy, limitStr); return columns.isEmpty() ? find(sql) : find(sql, columns.getValueArray()); } + protected String buildLimitStr(Integer start, Integer count) { + StringBuilder sb = new StringBuilder(); + sb.append(start).append(",").append(count); + return sb.toString(); + } + //方便在某些场景下,对 columns 进行二次加工 protected void processColumns(Columns columns, String action) { diff --git a/src/main/java/io/jboot/support/redis/JbootRedis.java b/src/main/java/io/jboot/support/redis/JbootRedis.java index 33c03ff742b57969155e09cf8402ca8ff3992be3..b6081a3d88198300dc82f5aa97c95cef505c2126 100644 --- a/src/main/java/io/jboot/support/redis/JbootRedis.java +++ b/src/main/java/io/jboot/support/redis/JbootRedis.java @@ -640,6 +640,8 @@ public interface JbootRedis { byte[] keyToBytes(Object key); + Object keyFromBytes(byte[] bytes); + String bytesToKey(byte[] bytes); byte[][] keysToBytesArray(Object... keys); @@ -657,7 +659,10 @@ public interface JbootRedis { List valueListFromBytesList(Collection data); + List keyValueListFromBytesList(List data); + Object eval(String script, int keyCount, String... params); + } diff --git a/src/main/java/io/jboot/support/redis/JbootRedisBase.java b/src/main/java/io/jboot/support/redis/JbootRedisBase.java index c2a55dbca5dd6eb3474009e319330ecc7d8e6043..3b45a99db94a8ed3bb8d525534720cda3f618e75 100644 --- a/src/main/java/io/jboot/support/redis/JbootRedisBase.java +++ b/src/main/java/io/jboot/support/redis/JbootRedisBase.java @@ -20,6 +20,7 @@ import io.jboot.Jboot; import io.jboot.components.serializer.JbootSerializer; import io.jboot.components.serializer.JbootSerializerManager; import io.jboot.utils.StrUtil; +import redis.clients.jedis.util.SafeEncoder; import java.util.ArrayList; import java.util.Collection; @@ -56,7 +57,11 @@ public abstract class JbootRedisBase implements JbootRedis { @Override public byte[] keyToBytes(Object key) { - return key.toString().getBytes(); + return SafeEncoder.encode(key.toString()); + } + + public Object keyFromBytes(byte[] bytes) { + return SafeEncoder.encode(bytes); } @Override @@ -128,6 +133,13 @@ public abstract class JbootRedisBase implements JbootRedis { return result; } + public List keyValueListFromBytesList(List data) { + List result = new ArrayList(); + result.add(keyFromBytes(data.get(0))); + result.add(valueFromBytes(data.get(1))); + return result; + } + } diff --git a/src/main/java/io/jboot/support/redis/jedis/JbootJedisClusterImpl.java b/src/main/java/io/jboot/support/redis/jedis/JbootJedisClusterImpl.java index 1ce3c6168802fb9b7811afa878783035c3fe19dd..80de1c917792a881ed53022bdb280be4d09f4145 100644 --- a/src/main/java/io/jboot/support/redis/jedis/JbootJedisClusterImpl.java +++ b/src/main/java/io/jboot/support/redis/jedis/JbootJedisClusterImpl.java @@ -852,15 +852,7 @@ public class JbootJedisClusterImpl extends JbootRedisBase { // } List data = jedisCluster.blpop(timeout, keysToBytesArray(keys)); - - if (data != null && data.size() == 2) { - List objects = new ArrayList<>(); - objects.add(new String(data.get(0))); - objects.add(valueFromBytes(data.get(1))); - return objects; - } - - return valueListFromBytesList(data); + return keyValueListFromBytesList(data); } @@ -874,7 +866,7 @@ public class JbootJedisClusterImpl extends JbootRedisBase { public List blpop(Integer timeout, Object... keys) { List data = jedisCluster.blpop(timeout, keysToBytesArray(keys)); - return valueListFromBytesList(data); + return keyValueListFromBytesList(data); } @@ -889,7 +881,7 @@ public class JbootJedisClusterImpl extends JbootRedisBase { public List brpop(Object... keys) { List data = jedisCluster.brpop(timeout, keysToBytesArray(keys)); - return valueListFromBytesList(data); + return keyValueListFromBytesList(data); } @@ -904,7 +896,7 @@ public class JbootJedisClusterImpl extends JbootRedisBase { public List brpop(Integer timeout, Object... keys) { List data = jedisCluster.brpop(timeout, keysToBytesArray(keys)); - return valueListFromBytesList(data); + return keyValueListFromBytesList(data); } diff --git a/src/main/java/io/jboot/support/redis/jedis/JbootJedisImpl.java b/src/main/java/io/jboot/support/redis/jedis/JbootJedisImpl.java index cc58035eef3cca0b753c32aaeb0513595e5be930..42a9c4c69b6715409fb3dc1def821baea46045fd 100644 --- a/src/main/java/io/jboot/support/redis/jedis/JbootJedisImpl.java +++ b/src/main/java/io/jboot/support/redis/jedis/JbootJedisImpl.java @@ -997,7 +997,7 @@ public class JbootJedisImpl extends JbootRedisBase { Jedis jedis = getJedis(); try { List data = jedis.blpop(this.config.getTimeout(),keysToBytesArray(keys)); - return valueListFromBytesList(data); + return keyValueListFromBytesList(data); } finally { returnResource(jedis); } @@ -1016,16 +1016,7 @@ public class JbootJedisImpl extends JbootRedisBase { //这里注意:第一个为key,第二个为value List data = jedis.blpop(timeout, keysToBytesArray(keys)); - - if (data != null && data.size() == 2) { - List objects = new ArrayList<>(); - objects.add(new String(data.get(0))); - objects.add(valueFromBytes(data.get(1))); - return objects; - } - - //其他情况 - return null; + return keyValueListFromBytesList(data); } finally { returnResource(jedis); } @@ -1043,7 +1034,7 @@ public class JbootJedisImpl extends JbootRedisBase { Jedis jedis = getJedis(); try { List data = jedis.brpop(this.config.getTimeout(),keysToBytesArray(keys)); - return valueListFromBytesList(data); + return keyValueListFromBytesList(data); } finally { returnResource(jedis); } @@ -1061,7 +1052,7 @@ public class JbootJedisImpl extends JbootRedisBase { Jedis jedis = getJedis(); try { List data = jedis.brpop(timeout, keysToBytesArray(keys)); - return valueListFromBytesList(data); + return keyValueListFromBytesList(data); } finally { returnResource(jedis); } diff --git a/src/main/java/io/jboot/support/redis/lettuce/JbootLettuceImpl.java b/src/main/java/io/jboot/support/redis/lettuce/JbootLettuceImpl.java index a9177729795ad75f7d0648ed3416b373c921f9f0..bf603b37d9d48dd04d77429ce4b7dc50369886ee 100644 --- a/src/main/java/io/jboot/support/redis/lettuce/JbootLettuceImpl.java +++ b/src/main/java/io/jboot/support/redis/lettuce/JbootLettuceImpl.java @@ -486,6 +486,11 @@ public class JbootLettuceImpl implements JbootRedis { return new byte[0]; } + @Override + public Object keyFromBytes(byte[] bytes) { + return null; + } + @Override public String bytesToKey(byte[] bytes) { return null; @@ -526,6 +531,11 @@ public class JbootLettuceImpl implements JbootRedis { return null; } + @Override + public List keyValueListFromBytesList(List data) { + return null; + } + @Override public Object eval(String script, int keyCount, String... params) { return null; diff --git a/src/main/java/io/jboot/support/redis/redisson/JbootRedissonImpl.java b/src/main/java/io/jboot/support/redis/redisson/JbootRedissonImpl.java index 7957c60420f3b7697fe788576cf700f9e48d743b..9db5d4a60588dc2346101343bf2e6608c3a61800 100644 --- a/src/main/java/io/jboot/support/redis/redisson/JbootRedissonImpl.java +++ b/src/main/java/io/jboot/support/redis/redisson/JbootRedissonImpl.java @@ -475,6 +475,11 @@ public class JbootRedissonImpl implements JbootRedis { return new byte[0]; } + @Override + public Object keyFromBytes(byte[] bytes) { + return null; + } + @Override public String bytesToKey(byte[] bytes) { return null; @@ -515,6 +520,11 @@ public class JbootRedissonImpl implements JbootRedis { return null; } + @Override + public List keyValueListFromBytesList(List data) { + return null; + } + @Override public Object eval(String script, int keyCount, String... params) { return null;