首页 > 编程知识 正文

redis多条件组合查询,redis多条件查询

时间:2023-05-05 03:00:37 阅读:201985 作者:3260

在实际工作中,我们有需要获取某一个前缀开头的Redis key的集合

若使用 RedisTemplate 的 keys(String prefix); 方法查询时Redis版本不支持时可以使用如下代码查询:

import java.io.IOException;import java.nio.charset.StandardCharsets;import java.util.ArrayList;import java.util.List;import java.util.function.Consumer;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.core.Cursor;import org.springframework.data.redis.core.ScanOptions;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.stereotype.Component;@Componentpublic class RedisHelper { @Autowired private StringRedisTemplate stringRedisTemplate; /** * scan 实现 * @param pattern 表达式 * @param consumer 对迭代到的key进行操作 */ private void scan(String pattern, Consumer<byte[]> consumer) { this.stringRedisTemplate.execute((RedisConnection connection) -> { try (Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().count(Long.MAX_VALUE).match(pattern).build())) { cursor.forEachRemaining(consumer); return null; } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } }); } /** * 获取符合条件的key * @param prefix 表达式 * @return */ public List<String> keys(String prefix) { List<String> keys = new ArrayList<>(); this.scan(prefix, item -> { //符合条件的key String key = new String(item, StandardCharsets.UTF_8); keys.add(key); }); return keys; }}

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。