我在REDIS服务器中存储了超过500万个键值对。我们需要在REDIS服务器中搜索的传入密钥将类似于“ key_num_id ”格式。
键和值存储在REDIS服务器中,如“ key_pfx_id ”格式。所有键都是唯一键(没有两个键是相同的)。以下是几个例子:
key_1234_11
key_123_12
key_123_11
key_12_11
..
..
其中1234,123,12是传入密钥 key_num_id 中 num 的前缀。
现在,例如,如果我们将 key_1234567890_11 作为传入密钥,那么REDIS应该提供与“key_1234_11”相对应的值,这是最好的匹配“num”,我们在示例中输入了密钥“1234567890”。
这样做的一种方法是多次查询REDIS服务器,直到得到值; e.g。
GET key_1234567890_11
GET key_123456789_11
GET key_12345678_11
GET key_1234567_11
.
.
但我认为这是一个代价高昂的解决方案,因为我在一秒钟内收到大约2000个传入密钥。所以想要有优化的解决方案。任何人都可以帮忙,因为我是REDIS的新手
注意:我在C代码
中执行上述所有操作答案 0 :(得分:0)
在Redis的单次调用中,您可以通过一种方式将迭代逻辑放在Lua脚本中。
local input = KEYS[1]
local key, output
while string.len(input) > 1 do
key = "test_" .. input .. "_11"
output = redis.call("GET", key)
if output then return output end
input = string.sub(input, 1, string.len(input) - 1)
end
return nil
调用(redis.eval(script_body, ["12345678"])
)时,它应该正确返回key_1234_11
的值。显然,这是一个简单的例子,需要根据您的应用进一步定制。
这节省了多次调用redis的开销,但是,我想与C相比,那么Lua本身可能有点开销。在这种情况下,我无法确定Lua脚本是否更快,但它可能是。