From 1f5f969d2057a89d8ec5b6bb80783a9f6a5c5ce0 Mon Sep 17 00:00:00 2001
From: AprilWind <2100166581@qq.com>
Date: Tue, 3 Mar 2026 17:53:38 +0800
Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96redis=20=E5=B7=A5?=
=?UTF-8?q?=E5=85=B7=E7=B1=BB=E4=BD=BF=E7=94=A8=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/redis/utils/RedisUtils.java | 48 +++++++++++++++----
1 file changed, 38 insertions(+), 10 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java
index c433bffad..74deff6a5 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java
@@ -269,7 +269,7 @@ public class RedisUtils {
*
* @param key 缓存的键值
* @param dataList 待缓存的List数据
- * @return 缓存的对象
+ * @return 操作是否成功
*/
public static boolean setCacheList(final String key, final List dataList) {
RList rList = CLIENT.getList(key);
@@ -281,13 +281,43 @@ public class RedisUtils {
*
* @param key 缓存的键值
* @param data 待缓存的数据
- * @return 缓存的对象
+ * @return 操作是否成功
*/
public static boolean addCacheList(final String key, final T data) {
RList rList = CLIENT.getList(key);
return rList.add(data);
}
+ /**
+ * 向缓存List首部插入数据
+ *
+ * @param key 缓存的键值
+ * @param data 待插入到列表首部的最新数据
+ */
+ public static void addCacheListToFirst(final String key, final T data) {
+ RList rList = CLIENT.getList(key);
+ rList.addFirst(data);
+ }
+
+ /**
+ * 向缓存List首部插入数据并限制列表最大长度
+ * (超出长度时自动删除列表末尾最旧的数据,保证列表只保留最新的N条)
+ *
+ * @param key 缓存的键值
+ * @param data 待插入到列表首部的最新数据
+ * @param maxSize 列表允许的最大长度(超出该长度则删除末尾数据)
+ */
+ public static void addCacheListToFirst(final String key, final T data, int maxSize) {
+ RList rList = CLIENT.getList(key);
+ rList.addFirst(data);
+ // 若列表长度超出最大限制,删除末尾最旧的数据
+ // 注:remove(index)会删除指定索引的元素,此处删除maxSize索引(即第maxSize+1条)
+ while (rList.size() > maxSize) {
+ // 循环删除直到列表长度符合限制(防止并发场景下多次插入导致长度超限)
+ rList.remove(maxSize);
+ }
+ }
+
/**
* 注册List监听器
*
@@ -536,24 +566,22 @@ public class RedisUtils {
* chunkSize-设置每次扫描的块大小(默认为0,本方法设置为1000)
* type-设置键的类型(默认为null,查询全部类型)
*
- * @see KeysScanOptions
* @param pattern 字符串前缀
* @return 对象列表
*/
public static Collection keys(final String pattern) {
- return keys(KeysScanOptions.defaults().pattern(pattern).chunkSize(1000));
+ return keys(KeysScanOptions.defaults().pattern(pattern).chunkSize(1000));
}
/**
* 通过扫描参数获取缓存的基本对象列表
* @param keysScanOptions 扫描参数
*
- * limit-设置扫描的限制数量(默认为0,查询全部)
- * pattern-设置键的匹配模式(默认为null)
- * chunkSize-设置每次扫描的块大小(默认为0)
- * type-设置键的类型(默认为null,查询全部类型)
- *
- * @see KeysScanOptions
+ * limit-设置扫描的限制数量(默认为0,查询全部)
+ * pattern-设置键的匹配模式(默认为null)
+ * chunkSize-设置每次扫描的块大小(默认为0)
+ * type-设置键的类型(默认为null,查询全部类型)
+ *
*/
public static Collection keys(final KeysScanOptions keysScanOptions) {
Stream keysStream = CLIENT.getKeys().getKeysStream(keysScanOptions);