redis 使用 lua 的时候,怎么导入外部库
def get_cookie(hkey: str) -> str | None: from core.redis.models import client # Use Lua scripting to get a random field from the hash set lua_script = """ local os = require("os") math.randomseed(os.time()) local fields = redis.call('HKEYS', KEYS[1]) if #fields == 0 then return nil end local random_index = math.random(1, #fields) local field = fields[random_index] return random_index """ return client.eval(lua_script, 1, hkey)
我要导入 os 重置时间种子
运行会报错
result = context.run(func, *args) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/pon/code/work/vobile/vt/account_console/api.py", line 75, in get_cookie_by_parser_name return {"cookie": get_cookie(hkey)} ^^^^^^^^^^^^^^^^ File "/home/pon/code/work/vobile/vt/account_console/api.py", line 45, in get_cookie return client.eval(lua_script, 1, hkey) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/pon/.local/share/virtualenvs/account_console-Tc5w3Cdm/lib/python3.11/site-packages/redis/client.py", line 3131, in eval return self.execute_command('EVAL', script, numkeys, *keys_and_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/pon/.local/share/virtualenvs/account_console-Tc5w3Cdm/lib/python3.11/site-packages/redis/client.py", line 901, in execute_command return self.parse_response(conn, command_name, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/pon/.local/share/virtualenvs/account_console-Tc5w3Cdm/lib/python3.11/site-packages/redis/client.py", line 915, in parse_response response = connection.read_response() ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/pon/.local/share/virtualenvs/account_console-Tc5w3Cdm/lib/python3.11/site-packages/redis/connection.py", line 756, in read_response raise responseredis.exceptions.ResponseError: user_script:2: Script attempted to access nonexistent global variable 'require' script: 1243ed7643e4b791767acb3602ad454e6b9098a3, on @user_script:2.
看起来你在 Lua 脚本中使用了 require
,这是 Node.js 的模块加载方式,而不是 Lua 的。在 Lua 中,如果你想使用外部库,你需要使用 require
的方式来加载。
然而,Redis 的 Lua 脚本环境并没有提供 require
函数来加载外部库。因此,你不能直接在 Redis 的 Lua 脚本中导入外部库。
如果你需要在 Redis 的 Lua 脚本中使用一些 Lua 库的功能,你需要做的是将这些功能集成到你的 Lua 脚本中,而不是尝试导入外部库。
在你的特定情况中,如果你需要使用 os
库的 time
函数来设置随机种子,你可以直接在 Lua 脚本中使用 os.time()
,而不需要使用 require
。你的代码应该像这样:
math.randomseed(os.time())
请注意,这需要在你的 Lua 环境中已经定义了 os
库。如果你在执行 Lua 脚本时遇到了问题,可能是因为你的 Lua 环境没有正确配置。在这种情况下,你可能需要检查你的 Lua 环境配置,或者考虑使用一个已经正确配置了 os
库的 Lua 环境。
问题内容: Redis使用哪个版本的Lua或如何找到它? 那图书馆呢?cjson,cmsgpack,bitop等。 问题答案: a 从Redis 2.6.0到2.6.12的Lua 5.1.4 从Redis 2.6.13开始的Lua 5.1.5 似乎没有进一步升级Lua的计划。 可以在antirez / redis 的Lua.h文件中验证Lua版本。 luajit 对数字进行按位运算。API 自Re
本文向大家介绍L1不可导的时候该怎么办?相关面试题,主要包含被问及L1不可导的时候该怎么办?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 当损失函数不可导,梯度下降不再有效,可以使用坐标轴下降法,梯度下降是沿着当前点的负梯度方向进行参数更新,而坐标轴下降法是沿着坐标轴的方向,假设有m个特征个数,坐标轴下降法进参数更新的时候,先固定m-1个值,然后再求另外一个的局部最优解,从而避免损失函数
我正在学习Vue JS,发现有时我们导入{},有时我们导入时没有{}。请问有什么区别? 非常感谢。
问题内容: 我想知道什么时候应该包括外部脚本或将它们与html代码内联,以提高性能和简化维护。 一般做法是什么? 真实场景-我有几个需要客户端表单验证的html页面。为此,我使用了所有这些页面中都包含的jQuery插件。但是问题是,我是否: 编写代码位以内联方式配置此脚本? 在所有这些html页面之间共享的一个文件中包含所有位? 将每个位都包含在一个单独的外部文件中,每个html页面一个? 谢谢。
问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制
问题内容: 与 那两个工作正常。 使用连接池背后的想法是什么?什么时候使用? 问题答案: 从redis-py docs: 在后台,redis- py使用连接池来管理与Redis服务器的连接。默认情况下,您创建的每个Redis实例将依次创建自己的连接池。通过将已创建的连接池实例传递给Redis类的connection_pool参数,可以覆盖此行为并使用现有的连接池。您可以选择执行此操作,以实现客户端