Redis Lua脚本写入成功后出现错误。
2015-2-27 12:27:37
收藏:0
阅读:106
评论:3
根据 Redis 文档,Lua 脚本具有原子性执行。我认为这也意味着脚本作为事务运行,也就是说,脚本中的所有写入命令要么成功,要么失败。但是,我注意到,即使脚本后来返回错误,写入命令的更改仍会持久化。
例如,在从 redis cli 运行以下命令后,“k” 键的值仍为“1”,尽管脚本本身返回关于全局变量访问的错误:
eval "redis.call(\"set\",KEYS[1],1) return x>1" 1 "k"
这是预期的吗?我错过了什么吗?我在 Windows 上运行 2.8.12 版本。
点赞
用户5094838
据我所知,Redis没有回滚功能。所有更改都在 RAM 中完成,而在 Lua 脚本完成后将写入磁盘,但无论是完成 Ok 还是出错,数据都将被写入。如果要在 NoSQL 数据库中使用真正的事务,请尝试使用 Tarantool:http://tarantool.org/doc/book/box/atomic.html。
2015-07-08 23:31:05
用户6243725
你可以在 Lua 错误时停止 Redis 服务器。例如:
local status, res = pcall(function()
--在这里写你的代码
end);
if not status then redis.call("SHUTDOWN", "NOSAVE"); end;
return res;
但实际上,我不知道 Redis 是否能够将发生错误前执行的命令记录到 AOF 文件中(我猜不能,因为 Redis 只能在脚本执行完后记录命令)。
此外,你可以添加 usedWriteCommands 变量,并仅在有更改数据的命令时调用 SHUTDOWN NOSAVE。
2016-06-18 22:46:33
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
他们所说的“原子性”实际上更接近隔离而非原子性:Lua 脚本永远不会与其他 Lua 脚本或命令同时运行。
确切的措辞如下: