检测到您已登录华为云国际站账号,为了您更好的体验,建议您访问国际站服务网站 https://www.huaweicloud.com/intl/zh-cn
不再显示此消息
Cluster集群实例支持内置key且跨slot的Lua脚本: 内置key:将Key写入lua脚本中,不作为参数传入。 跨slot:Lua脚本中涉及的所有slot属于一个分片。
hashtag的原理、规则及用法示例 hashtag原理 单实例上的mset、lua脚本等处理多key时,是一个原子性(atomic)操作,所有给定key都会在同一时间内被执行。
执行lua脚本失败。 例如报错:ERR unknown command 'EVAL' ,说明您的Redis实例属早期创建的低版本Redis实例,不支持lua脚本,这种情况请提工单联系技术支持,升级您的Redis实例。 执行setname和getname失败。
使用EVAL命令时: 建议使用前先了解Redis的lua脚本特性,具体可参考Lua脚本。 lua脚本的执行超时时间为5秒钟,建议不要在lua脚本中使用比较耗时的代码,比如长时间的sleep、大的循环等语句。
脚本涉及到缓存实例连接,则采用交互式输入密码。如果需要自动化执行脚本,可使用其他用户管理脚本,以sudo方式授权执行。 应用程序中使用加密模块对Redis密码加密配置。 约束与限制 只有处于“运行中”状态的Redis缓存实例支持修改或重置密码。
在加锁阶段,需要在lua脚本中执行exists、hset、pexpire、hexists、hincrby、pexpire、pttl命令。 在解锁阶段,需要在lua脚本中执行exists、publish、hexists、pexpire、del命令。
以下步骤以命令行模式进行示例(也可以将命令写入python脚本中再执行): 执行python命令,进入命令行模式。 在命令行中执行以下命令,连接Redis实例。
/configure --enable-sasl make make install 新建build.sh文件,将如下代码复制到build.sh文件。
禁用脚本通过sudo方式执行 安全问题: redis-cli访问参数带密码敏感信息,会被ps出来,也容易被系统记录操作日志。 解决方案:改为通过API方式(Python可以使用redis-py)来安全访问,禁止通过sudo方式切换到dbuser账号使用redis-cli。
npm install ioredis 编辑连接Redis实例的示例脚本。 编辑连接示例脚本ioredisdemo.js。示例脚本中增加以下内容,包括连接以及数据读取。
0~1,000 128 auto-kill-timeout-lua-process 开启该参数时,执行超时的lua脚本进程会被自动kill。如果lua脚本执行了写操作无法kill,并且实例开启了持久化时,则该lua脚本所在的节点会自动重启,lua脚本执行的写操作将不被保存。
Scripting(脚本) EVAL Proxy集群实例要求传入的key都在同一个slot中。 Proxy集群开启多DB时,KEYS参数会被修改,Lua脚本中使用到KEYS的地方需要注意。
通过如下lua脚本完成扣量。
LUA脚本中不支持多DB。 RANDOMKEY命令不支持。 不支持在lua脚本中使用publish。 DB数支持范围为0 ~ 255。 性能约束: flushdb命令采用逐个key删除的方式执行,耗时久,慢于开源原生实现,速度与SCAN命令相同(需要客户实际测试)。
本章节主要介绍DCS Redis 3.0命令的兼容性,包括支持命令列表,禁用命令列表,以及不支持的高版本Redis脚本和命令列表,以及命令使用限制说明。 DCS Redis 3.0已下线,暂停售卖,建议使用Redis 4.0及以上版本。
0~1,000 128 auto-kill-timeout-lua-process 开启该参数时,执行超时的lua脚本进程会被自动kill。如果lua脚本执行了写操作无法kill,并且实例开启了持久化时,则该lua脚本所在的节点会自动重启,lua脚本执行的写操作将不被保存。
0~1,000 128 auto-kill-timeout-lua-process 开启该参数时,执行超时的lua脚本进程会被自动kill。如果lua脚本执行了写操作无法kill,并且实例开启了持久化时,则该lua脚本所在的节点会自动重启,lua脚本执行的写操作将不被保存。
lua脚本受限使用,所有的key必须在同一个slot,建议使用hashtag技术。 需要客户端SDK支持redis cluster协议,需要能够处理"-MOVED"响应。
Cluster集群实例使用内置key且跨slot的Lua脚本时迁移失败 迁移故障处理 数据迁移失败问题排查 Memcached如何迁移? 是否支持Memcached和Redis之间实例数据的迁移?
避免在lua脚本中使用耗时代码 lua脚本的执行超时时间为5秒钟,建议不要在lua脚本中使用比较耗时的代码。 比如长时间的sleep、大的循环等语句。