我有以下设置:
*:collections:*
,*:resources:*
exists
我决定最终得到哪个数据结构。现在我必须决定是以lua脚本还是单个命令执行此操作。
我提出的lua脚本:
local path = KEYS[1]
local resourcesPrefix = ARGV[1]
local collectionsPrefix = ARGV[2]
if redis.call('exists',resourcesPrefix..path) == 1 then
return redis.call('get',resourcesPrefix..path)
elseif redis.call('exists',collectionsPrefix..path) == 1 then
return redis.call('smembers',collectionsPrefix..path)
else
return "notFound"
end
单个电话或lua脚本是否有任何优缺点?
答案 0 :(得分:0)
看起来我很好地使用了Redis LUA脚本。执行时间很短(要阻止长脚本)。它避免了多次呼叫,因此减少了总的网络通信时间。所以我认为,如果你打了很多这样的电话,它比单个电话更好。特别是如果您使用EVALSHA将脚本缓存在Redis中。
答案 1 :(得分:0)
是的,LUA
脚本是EVALSHA
调用的最佳解决方案:
LUA
可帮助您减少代码数量和代码可读性。LUA
由于减少网络通信,情况更快。我认为你可以用2个命令编写代码。您的代码中不需要exists
。
local path = KEYS[1]
local resourcesPrefix = ARGV[1]
local collectionsPrefix = ARGV[2]
local ret
set ret = redis.call('get',resourcesPrefix..path)
if ret then
return ret
end
set ret = redis.call('smembers',collectionsPrefix..path)
if ret then
return ret
end
return "notFound"