From fbc03cba1688e6b8b7b18ecea3d87d0157e1e8d8 Mon Sep 17 00:00:00 2001 From: "464455798@qq.com" Date: Mon, 1 Jul 2024 22:41:00 +0800 Subject: [PATCH 1/2] =?UTF-8?q?findListByColumns=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=BB=8Estart=20=E5=BC=80=E5=A7=8B=E5=8F=96count=E6=9D=A1?= =?UTF-8?q?=E6=96=B9=E6=B3=95=20=E5=8D=B3=20limit=20=3F,=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/io/jboot/db/model/JbootModel.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/jboot/db/model/JbootModel.java b/src/main/java/io/jboot/db/model/JbootModel.java index 5b5645eb..47e3ba34 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) { -- Gitee From 76a2ecafc51fc250977d3781e8a13b365a6a9108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E5=BF=97=E9=B9=8F?= <464455798@qq.com> Date: Thu, 15 Aug 2024 22:56:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbrpop=20blpop=20=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E5=8F=96=E5=87=BAkey=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/jboot/support/redis/JbootRedis.java | 5 +++++ .../io/jboot/support/redis/JbootRedisBase.java | 14 +++++++++++++- .../redis/jedis/JbootJedisClusterImpl.java | 16 ++++------------ .../support/redis/jedis/JbootJedisImpl.java | 17 ++++------------- .../support/redis/lettuce/JbootLettuceImpl.java | 10 ++++++++++ .../redis/redisson/JbootRedissonImpl.java | 10 ++++++++++ 6 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/main/java/io/jboot/support/redis/JbootRedis.java b/src/main/java/io/jboot/support/redis/JbootRedis.java index 33c03ff7..b6081a3d 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 c2a55dbc..3b45a99d 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 1ce3c616..80de1c91 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 cc58035e..42a9c4c6 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 a9177729..bf603b37 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 7957c604..9db5d4a6 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; -- Gitee