我正在构建我的第一个Redis服务器端脚本( 用于调试 ),而我缺乏Lua经验使我非常困惑。
本质上来说,我有一个K / V对(包含〜1000个值)的数据集,我想从中列出所有与模式匹配的KEYS。例如在redis-cli中:
> KEYS "carlos:*"
1) "carlos:1"
2) "carlos:2"
3) "carlos:3"
4) "carlos:4"
基于上面的输出,我想通过执行Lua脚本来返回这些键的总和。目前,我有以下内容sum.lua
local sum = 0
local matches = redis.call('KEYS', 'carlos:*')
for unpack(matches)
sum = sum + redis.call('GET', matches)
end
return sum
尽管以上脚本可能不正确,但即使单独尝试也会redis.call('KEYS', 'carlos:*')
产生以下错误
root @ carlos:〜#redis-cli EVAL“ $(cat sum.lua)”
(错误)ERR错误的’eval’命令参数数目
我已经尝试了多次语法迭代,但都无济于事。有任何想法吗?
谢谢
EVAL
至少需要两个参数;脚本以及要传递给脚本的键数。在这种情况下,您要传递零键,这意味着可以按以下方式调用脚本:redis-cli EVAL "$(cat sum.lua)" 0
要么:
redis-cli --eval sum.lua
您迭代返回值的循环结构KEYS
不正确;我已经为您修复了。
您需要GET
使用Lua tonumber
函数将字符串返回的值转换为数字。
完成上述更改后,以下脚本将为您工作:
local sum = 0
local matches = redis.call('KEYS', 'carlos:*')
for _,key in ipairs(matches) do
local val = redis.call('GET', key)
sum = sum + tonumber(val)
end
return sum
主要内容:第一个Lua脚本命令,为什么使用Lua脚本,常用脚本命令,基本命令应用从 Redis 2.6 版本开始,Redis 使用内置的 Lua 解释器执行脚本,这意味着我们可以直接在 Redis 客户端执行Lua 脚本 ,于此同时 Redis 还非常贴心地提供了用于编写 Lua 脚本的 命令。 第一个Lua脚本命令 Lua 是一种轻量小巧、开源的脚本语言,用标准 C语言编写。其设计目的就是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它被广泛的应用于:游戏开发
问题内容: 以下是我的lua脚本: 如果第一次调用没有退出键,我将不执行第二次调用。 所以…我不知道None的返回值是什么。在python中,返回值将为None。 所以…我该怎么办lua? 使用零时 问题答案: 如果在if语句中使用定义局部变量,则它仅在if语句中存在。在手册中查看局部变量范围。 尝试
问题内容: 我创建了一个redis lua脚本来执行基于关键数据类型的命令: 每次执行时,它都会返回null。请帮助纠正脚本。 问题答案: 对响应的返回形式如下表:(如果类型为字符串,则返回) 因此,为了正确检查,您应该将代码更改为: 其余代码将正常运行。 问题是这样的:TYPE命令是少数几个返回“简单字符串”或“状态” redis答复的命令之一(有关响应类型,请参见redis协议规范)。在red
主要内容:Redis Lua脚本的引入,开源软件的可扩展性,Redis的扩展性脚本,Redis Lua脚本的基本使用,通过EVAL命令执行Lua脚本,通过脚本与Redis交互,Java中调用Redis Lua脚本,Java调用Lua脚本的方式,Redis Lua脚本的使用建议,脚本缓存,脚本缓存稳定性,脚本参数化,脚本超时处理,Redis集群中Lua脚本的使用,其他限制,Redis 7 Functions,,,Redis Lua脚本的详细介绍以及使用入门。 本次的主要分享主题是:Redis Lu
问题内容: 我正在设置将使用Redis和APCu的PHP标记的缓存实现。由于APC是键值存储,因此我将使用Redis进行键标记关系,并与APC上的每个Web服务器进行同步。 我当前的问题仅涉及Redis。可能您知道实现,但需要明确说明:键可以具有与之关联的标签。在以后的某个时间点,您可以通过某些标签删除缓存的密钥。有很多键,但没有那么多标签,并且键和标签之间存在n对n的关系。 由组成: 因为设置后
Lua 脚本功能是 Reids 2.6 版本的最大亮点, 通过内嵌对 Lua 环境的支持, Redis 解决了长久以来不能高效地处理 CAS (check-and-set)命令的缺点, 并且可以通过组合使用多个命令, 轻松实现以前很难实现或者不能高效实现的模式。 本章先介绍 Lua 环境的初始化步骤, 然后对 Lua 脚本的安全性问题、以及解决这些问题的方法进行说明, 最后对执行 Lua 脚本的两