知识点

  • Lua
  • 相关文章

    更多

    最近更新

    更多

    Redis Lua脚本操作

    2019-04-18 00:16|来源: 网路

    Redis 脚本使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

    语法

    Eval 命令的基本语法如下:

    redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]


    实例

    以下实例演示了 redis 脚本工作过程:

    redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
    
    1) "key1"
    2) "key2"
    3) "first"
    4) "second"



    Redis 脚本命令

    下表列出了 redis 脚本常用命令:

    序号 命令及描述
    1 EVAL script numkeys key [key ...] arg [arg ...]
    执行 Lua 脚本。
    2 EVALSHA sha1 numkeys key [key ...] arg [arg ...]
    执行 Lua 脚本。
    3 SCRIPT EXISTS script [script ...]
    查看指定的脚本是否已经被保存在缓存当中。
    4 SCRIPT FLUSH
    从脚本缓存中移除所有脚本。
    5 SCRIPT KILL
    杀死当前正在运行的 Lua 脚本。
    6 SCRIPT LOAD script
    将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。

    redis知识点

    redis快速入门

    reids常用命令

    redis数据结构

    java_API_客户端

    Jedis

    Tlcache

    redis_持久化

    AOF

    RDB

    发布订阅(pub/sub)

    redis_事件

    redis事务

    redis通讯协议

    RESP(Redis Serialization Protocol)

    redis高可用

    redis哨兵

    监控(Monitoring) 提醒(Notification) 自动故障迁移(Automatic failover)

    redis主从复制

    • 复制模式

      1. 主从复制
      2. 从从复制
    • 复制过程

      • slave向master发送sync命令;
      • master开启子进程执行bgsave写入rdb文件;
      • master发送缓存和RDB文件给slave;
      • master发送数据发送给slave完成复制;

    redis集群(Redis_Cluster)

    相关问答

    更多
    • 主要用途是: (1)描述界面:WOW和剑网三的界面都是用LUA写的; (2)沟通引擎:游戏图形引擎提供了一些接口库,可以在LUA中调用; (3)服务器端:有些游戏,例如剑网三,在服务器端也会大量使用LUA。
    • 主要用途是: (1)描述界面:WOW和剑网三的界面都是用LUA写的; (2)沟通引擎:游戏图形引擎提供了一些接口库,可以在LUA中调用; (3)服务器端:有些游戏,例如剑网三,在服务器端也会大量使用LUA。
    • 对redis.call的响应返回一个如下所示的表: {"ok": "string"} (如果类型是一个字符串) 因此,为了正确检查,您应该将代码更改为: local keyType = redis.call("TYPE", KEYS[1]).ok 其余的代码将正常工作。 问题是:TYPE命令是返回“简单字符串”或“状态”redis回复的少数命令之一(请参阅响应类型的redis协议规范 )。 在redis lua文档中,它声明: Redis状态回复 - > Lua表,其中包含一个包含状态的ok字段 这是发生 ...
    • 是的, LUA脚本是EVALSHA呼叫时的最佳解决方案: 你工作的是redis异步。 因此LUA可以帮助您减少代码数量和代码可读性。 由于减少网络通信, LUA案例更快。 我认为你可以用2个命令编写你的代码。 您的代码中不需要exists 。 local path = KEYS[1] local resourcesPrefix = ARGV[1] local collectionsPrefix = ARGV[2] local ret set ret = redis.call('get',resources ...
    • 先阅读: 在做了这个并且用这个脚本打了将近一个星期后,我决定尝试使用其中一个java库来代替脚本。 我已经在其中创建了一个包含该项目的公共回购。 好处是你不仅限于一个~8000字符的输入变量,它的运行速度要快得多。 我将把批处理脚本留给那些绝对需要这样做的人,但我强烈建议使用java代码: Redis脚本项目 实际答案: 使用批处理文件,我能够从该文章复制bash脚本。 @echo off setlocal EnableDelayedExpansion echo Starting removal of k ...
    • 欢迎来到Redis :) aeCreateTimeEvent是一个内部Redis服务器功能,不会公开暴露。 此外,没有本地方式的ATM让Redis以用户可配置的cron式方式调用Lua脚本(或其他任何命令)。 一个简单的解决方案是使用您选择的语言设置一个工作进程,该进程按照您指定的时间间隔唤醒并将命令发送给Redis。 然而,这在维护该过程方面存在管理和运营开销。 从v4开始的另一种可能是为此使用模块。 事实上,这只是一个小问题: https : //gist.github.com/itamarhaber/ ...
    • 如果你在一个if语句中定义一个Local变量,它只存在于if语句中。 在手册中查看本地变量作用域。 尝试 local ckid = redis.pcall('get',KEYS[1]) local meta if ckid ~= nil then meta = redis.call('hgetall', ckid) else meta = 'none' ckid = 'none' end return {ckid, meta} If you define a L ...
    • 重要通知:请参阅下面的Josiah的回答。 我的回答结果证明是错误的,或者至少是不完整的 。 这让我非常高兴,它让Redis变得更加灵活。 我的错误/不完整答案: 我很确定这是不可能的。 您不能使用全局变量(读取文档 ),并且脚本本身由Redis Lua引擎获取本地和临时范围。 如果Lua函数执行任何写操作,它们会在幕后自动设置“写入”标志。 这会启动一个事务。 如果您级联Lua调用,Redis中的簿记将变得非常麻烦,尤其是在Redis从站上执行级联时。 这就是EVAL和EVALSHA故意无法在Lua脚本中 ...
    • 按字面意思,文本按预期存储。 如果要存储格式化的字符串,则需要执行此操作 redis.call("set", "text", string.format("First line\nSecond line") ); The text is being stored as expected, literally. If you want to store the formatted string you need to do just that redis.call("set", "text", string ...
    • Redis本身支持cjson。 要从Lua脚本计算SHA1,您可以使用redis.sha1hex 。 你会在这里找到文档。 cjson is supported natively in Redis. To compute a SHA1 from a Lua script you can use redis.sha1hex. You will find the documentation here.