Login
网站首页 > 文章中心 > 其它

Redis 通过key前缀获取所有匹配的key的值

作者:小编 更新时间:2023-10-20 18:50:44 浏览量:334人看过

最近工作中,遇到一个不太难的问题,但是一般情况下 通常,我们使用redis要求的都是key不能相同,但是这次的问题是 值相等的key? 不能存在多个.解决的时候,看到redis可以写正则表达式获取匹配的key,所有给自己没有规律的key,加了一个前缀,毕竟一个系统 ,缓存的数据还是很多的,避免拿到别人的key.此时此刻呢,我们来看看代码怎么写的.

首先写了一个测试用例,测试自己写的正则能匹配到值.

Redis 通过key前缀获取所有匹配的key的值-图1

import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * @ClassName: RegexMatches
 * @Description: 测试正则表达式无误   但是redis  不需要加一点 '.'
 * @Author youli
 * @date 2020年12月7日
 */
public class RegexMatches {

public static void main(String args[]) {
    String str = "card_key51e5f269-aef9-446a-8c86-2f19cae2bc";
    String pattern = "card_key.*";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(str);
}

}

Redis 通过key前缀获取所有匹配的key的值

测试返回正确,就说明能匹配.然后我们看下redis里边的写法

public void getRedis(String cardId) {
    // 获取所有的key
    Set keys = redisTemplate.keys("card_key.*");
    for (String key : keys) {
        // 获取key对应值
        Object value = redisTemplate.opsForValue().get(key);
        if (value.equals(cardId)) {
}

这么写之后,我看正则没问题,也就没测试了,后来上服务器一看,嘛呀,还是那么多.于是乎,赶紧测试了下,发现

public void getRedis(String cardId) {
    // 获取所有的key
    Set keys = redisTemplate.keys("card_key*");
    for (String key : keys) {
        // 获取key对应值
        Object value = redisTemplate.opsForValue().get(key);
        if (value.equals(cardId)) {
}

Redis 通过key前缀获取所有匹配的key的值

Redis 通过key前缀获取所有匹配的key的值

两个不同的key,但是相同的值.

执行后的结果

Redis 通过key前缀获取所有匹配的key的值

结果相同的key就只有一个了.

代码调试可以看到获取的key

Redis 通过key前缀获取所有匹配的key的值

以上就是土嘎嘎小编为大家整理的Redis 通过key前缀获取所有匹配的key的值相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章