有什么方法可以将Redis配置为对Key不区分大小写吗?

问题描述 投票:0回答:4

举个例子:

Foo : Bar

也可以查找为 FOO、foo、fOO 等?

redis
4个回答
24
投票

不。如果您愿意,您应该小写/大写所有键。


7
投票

redis 键区分大小写,我的解决方案是: 键-->Foo:Bar 关键字-->f

键(“[fF]*”) 或者 关键字-->foo

键(“[fF][oO][oO]*”) 你必须将普通字符串转换为这种格式 '[Ff][Oo]';

我为此写了一个方法:

public static String toIgnoreCasePattern(String str){
    StringBuilder sb = new StringBuilder();
    char []chars = str.toCharArray();
    char upperCaseC;
    for(char c : chars){
        boolean isLowerCase = Character.isLowerCase(c);
        upperCaseC = isLowerCase ? Character.toUpperCase(c) : c;
        sb.append("[").append(c).append(upperCaseC).append("]");
    }
    return sb.toString();
}

希望这个回答可以帮助到你。


2
投票

在 C# 中

public static String toIgnoreCasePattern(String str)
{
    StringBuilder sb = new StringBuilder();
    char[] chars = str.ToCharArray();
    char upperCaseC;
    foreach (var c in chars)
    {
        bool isLowerCase = char.IsLower(c);
        upperCaseC = isLowerCase ? char.ToUpper(c) : c;
        sb.Append("[").Append(c).Append(upperCaseC).Append("]");
    }
    return sb.ToString();
}

0
投票

Python(继续示例)


def nocase(s):
    key = ''
    for c in s:
        if c.isalpha():
            key += f"[{c.upper()}{c.lower()}]"
        else:
            key += c
    return key

# equivalent to 

nocase = lambda s: ''.join([f"[{c.upper()}{c.lower()}]" if c.isalpha() else c for c in s])

这适用于混合通配符。

>>> print(nocase('test'))
[Tt][Ee][Ss][Tt]

>>> print(nocase('*Tester1*'))
*[Tt][Ee][Ss][Tt][Ee][Rr]1*

感谢最初的想法

© www.soinside.com 2019 - 2024. All rights reserved.