From 9c2b84d7612551f229d27cc92c1d8af193f07862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E5=90=91=E6=AC=A3?= Date: Fri, 29 Jan 2021 15:09:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BE=9Bredis=20scan()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/redis/service/RedisService.java | 77 +++++++++++-------- 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java index 4bf7f708..c1f6577c 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java @@ -1,24 +1,18 @@ package com.ruoyi.common.redis.service; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.BoundSetOperations; -import org.springframework.data.redis.core.HashOperations; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ValueOperations; +import org.springframework.data.redis.core.*; import org.springframework.stereotype.Component; +import java.io.IOException; +import java.util.*; +import java.util.concurrent.TimeUnit; + /** * spring redis 工具类 - * + * * @author ruoyi **/ -@SuppressWarnings(value = { "unchecked", "rawtypes" }) @Component public class RedisService { @@ -31,7 +25,7 @@ public class RedisService * @param key 缓存的键值 * @param value 缓存的值 */ - public void setCacheObject(final String key, final T value) + public void setCacheObject(String key, T value) { redisTemplate.opsForValue().set(key, value); } @@ -44,7 +38,7 @@ public class RedisService * @param timeout 时间 * @param timeUnit 时间颗粒度 */ - public void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) + public void setCacheObject(String key, T value, Long timeout, TimeUnit timeUnit) { redisTemplate.opsForValue().set(key, value, timeout, timeUnit); } @@ -56,7 +50,7 @@ public class RedisService * @param timeout 超时时间 * @return true=设置成功;false=设置失败 */ - public boolean expire(final String key, final long timeout) + public boolean expire(String key, long timeout) { return expire(key, timeout, TimeUnit.SECONDS); } @@ -69,7 +63,7 @@ public class RedisService * @param unit 时间单位 * @return true=设置成功;false=设置失败 */ - public boolean expire(final String key, final long timeout, final TimeUnit unit) + public boolean expire(String key, long timeout, TimeUnit unit) { return redisTemplate.expire(key, timeout, unit); } @@ -80,7 +74,7 @@ public class RedisService * @param key 缓存键值 * @return 缓存键值对应的数据 */ - public T getCacheObject(final String key) + public T getCacheObject(String key) { ValueOperations operation = redisTemplate.opsForValue(); return operation.get(key); @@ -91,7 +85,7 @@ public class RedisService * * @param key */ - public boolean deleteObject(final String key) + public boolean deleteObject(String key) { return redisTemplate.delete(key); } @@ -102,7 +96,7 @@ public class RedisService * @param collection 多个对象 * @return */ - public long deleteObject(final Collection collection) + public long deleteObject(Collection collection) { return redisTemplate.delete(collection); } @@ -114,7 +108,7 @@ public class RedisService * @param dataList 待缓存的List数据 * @return 缓存的对象 */ - public long setCacheList(final String key, final List dataList) + public long setCacheList(String key, List dataList) { Long count = redisTemplate.opsForList().rightPushAll(key, dataList); return count == null ? 0 : count; @@ -126,7 +120,7 @@ public class RedisService * @param key 缓存的键值 * @return 缓存键值对应的数据 */ - public List getCacheList(final String key) + public List getCacheList(String key) { return redisTemplate.opsForList().range(key, 0, -1); } @@ -138,7 +132,7 @@ public class RedisService * @param dataSet 缓存的数据 * @return 缓存数据的对象 */ - public BoundSetOperations setCacheSet(final String key, final Set dataSet) + public BoundSetOperations setCacheSet(String key, Set dataSet) { BoundSetOperations setOperation = redisTemplate.boundSetOps(key); Iterator it = dataSet.iterator(); @@ -155,7 +149,7 @@ public class RedisService * @param key * @return */ - public Set getCacheSet(final String key) + public Set getCacheSet(String key) { return redisTemplate.opsForSet().members(key); } @@ -166,7 +160,7 @@ public class RedisService * @param key * @param dataMap */ - public void setCacheMap(final String key, final Map dataMap) + public void setCacheMap(String key, Map dataMap) { if (dataMap != null) { redisTemplate.opsForHash().putAll(key, dataMap); @@ -179,7 +173,7 @@ public class RedisService * @param key * @return */ - public Map getCacheMap(final String key) + public Map getCacheMap(String key) { return redisTemplate.opsForHash().entries(key); } @@ -191,7 +185,7 @@ public class RedisService * @param hKey Hash键 * @param value 值 */ - public void setCacheMapValue(final String key, final String hKey, final T value) + public void setCacheMapValue(String key, String hKey, T value) { redisTemplate.opsForHash().put(key, hKey, value); } @@ -203,7 +197,7 @@ public class RedisService * @param hKey Hash键 * @return Hash中的对象 */ - public T getCacheMapValue(final String key, final String hKey) + public T getCacheMapValue(String key, String hKey) { HashOperations opsForHash = redisTemplate.opsForHash(); return opsForHash.get(key, hKey); @@ -216,19 +210,42 @@ public class RedisService * @param hKeys Hash键集合 * @return Hash对象集合 */ - public List getMultiCacheMapValue(final String key, final Collection hKeys) + public List getMultiCacheMapValue(String key, Collection hKeys) { return redisTemplate.opsForHash().multiGet(key, hKeys); } /** * 获得缓存的基本对象列表 - * + * * @param pattern 字符串前缀 * @return 对象列表 */ - public Collection keys(final String pattern) + @Deprecated + public Collection keys(String pattern) { return redisTemplate.keys(pattern); } + + /** + * 非阻塞方式模糊匹配keys + * + * @param matchKey + * @return + */ + public Set scan(String matchKey) { + Set keys = (Set) redisTemplate.execute((RedisCallback>) connection -> { + Set keysTmp = new HashSet<>(); + Cursor cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(matchKey).count(1000).build()); + while (cursor.hasNext()) { + keysTmp.add(new String(cursor.next())); + } + try { + cursor.close(); + } catch (IOException e) { + } + return keysTmp; + }); + return keys; + } }