我在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"的值,这是我们在传入密钥"1234567890"中获得的"num"的最佳匹配。
一种方法是对REDIS服务器进行多次查询,直到得到值为止。
GET key_1234567890_11
GET key_123456789_11
GET key_12345678_11
GET key_1234567_11
.
.但是我认为这是一个代价很高的解决方案,因为我一秒钟就能得到大约2000个输入的密钥。所以想要有优化的解决方案。有人能帮上忙吗,因为我是红系的新手
注意:我正在用C代码做以上所有的工作
发布于 2014-01-14 08:00:01
一种可以在对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脚本更快,但它可能更快。
https://stackoverflow.com/questions/21091968
复制相似问题