Redis lua教程

Redis lua教程看这个文章之前请确认自己已经掌握了 lua 的基本语法 如果不会先去看看 lua 的教程 很简单 在基本的操作 redis 中 看一下的目录就知道了 看完前面的部分就暂时够用了 菜鸟教程 https www runoob com lua lua tables htm

看这个文章之前请确认自己已经掌握了lua 的基本语法 , 如果不会先去看看lua的教程, 很简单, 在基本的操作redis中, 看一下的目录就知道了, 看完前面的部分就暂时够用了:

                                                            Redis lua教程

菜鸟教程 https://www.runoob.com/lua/lua-tables.html

 

如果你觉得学lua太难了, 可能这个文章不适合您. 请出门左转去看敖厂长屠龙.

 

先说下使用Lua脚本的好处:

  • 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延。
  • 原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。
  • 复用。客户端发送的脚本会永久存在redis中,这样,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑。

 

调用的通用形式如下:

EVAL script numkeys key [key ...] arg [arg ...]

eval的语法格式,其中:

   <1> script:     你的lua脚本

   <2> numkeys:  key的个数

   <3> key:         redis中各种数据结构的替代符号

   <4> arg:         你的自定义参数

注意:必须是 KEYS[1]   大小写敏感, KEYS是键 ,  ARGV 是值

示例:

eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 zk zk2 1 50

当然了还可以这么用, 这是不规范的用法,只是说说, 尽量写成键值对的形式

Redis lua教程

 

在Lua脚本中使用两个不同的Lua函数来调用Redis的命令的例子:

redis.call() redis.pcall() 

redis.call() 与 redis.pcall()很类似, 他们唯一的区别是当redis命令执行结果返回错误时, redis.call()将返回给调用者一个错误,而redis.pcall()会将捕获的错误以Lua表的形式返回

redis.call() 和 redis.pcall() 两个函数的参数可以是任意的 Redis 命令

eval "return redis.call('set','foo','bar')" 0

不过一般不这么写, 不把参数写在里面, 把参数放在外面. 这样写

eval "return redis.call('set',KEYS[1],'bar')" 1 foo

 

redis是使用C语言实现的, 而lua的数据类型和C有一些区别,这就涉及到两者之间的类型转换:

浮点数和nil将怎么样处理:

> eval "return {1,2,3.3333,'foo',nil,'bar'}" 0 1) (integer) 1 2) (integer) 2 3) (integer) 3 4) "foo" 

正如你看到的 3.333 被转换成了3,并且 nil后面的字符串bar没有被返回回来。

 

示例:

for i=1,10000 do redis.call("set","key"..i,"value"..i) end

写一个a.lua的脚本,插入1W条数据到redis中,只需要使用lua执行此脚本就行了.

redis-cli --eval a.lua (linux) redis-cli.exe --eval a.lua (window) 假设你都已经配置到了环境变量

 

一个很简单的程序, 输入key 获取value

local key=KEYS[1] local value = redis.call("get",key) return value

执行脚本, 就能够获取到get 的值了

redis-cli.exe --eval 2.lua  name2

注意了,这里直接执行lua脚本的时候,如果里面有参数,就不需要写参数的数量了,直接写参数

 

获取list 的值

local key=KEYS[1] local startNum=KEYS[2] local endNum=KEYS[3] local list=redis.call("lrange",key,startNum,endNum) return list
redis-cli.exe --eval 3.lua  mylist  0 -1

Redis lua教程

好了, 就写这么多了, 自己多实践.

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179318.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:52
下一篇 2026年3月26日 下午3:52


相关推荐

  • qt lineedit_个人总结学生

    qt lineedit_个人总结学生QLineEdit是一个单行文本编辑控件。使用者可以通过很多函数,输入和编辑单行文本,比如撤销、恢复、剪切、粘贴以及拖放等。通过改变QLineEdit的 echoMode() ,可以设置其属性,比如以密码的形式输入。文本的长度可以由 maxLength() 限制,可以通过使用 validator() 或者 inputMask() 可以限制它只能输入数字。在对同一个QLineEdit的validat…

    2022年10月6日
    4
  • Windows net start mysql 启动MySQL服务报错 发生系统错误 5 解决方法

    Windows net start mysql 启动MySQL服务报错 发生系统错误 5 解决方法netstartmysql启动MySQL服务报错发生系统错误5解决方法

    2022年7月14日
    36
  • vscode前端插件简单配置

    vscode前端插件简单配置AutoCloseTaghtml标签自动闭合Chinese(Simplified)(简体中文)LanguagePackforVisualStudioCodevscode中文插件儿EasyLESS项目无框架无webpack时可以使用的一个less转换插件settings.json配置”less.compile”:{ “out”:false,//是否输出css文件,false为不输出 “compress”:false,//是否压缩 “sour..

    2022年7月25日
    8
  • 2021前端面试题及答案_前端开发面试题2021

    2021前端面试题及答案_前端开发面试题2021废话不多说直接上干货1.js运行机制JavaScript单线程,任务需要排队执行 同步任务进入主线程排队,异步任务进入事件队列排队等待被推入主线程执行 定时器的延迟时间为0并不是立刻执行,只是代表相比于其他定时器更早的被执行 以宏任务和微任务进一步理解js执行机制 整段代码作为宏任务开始执行,执行过程中宏任务和微任务进入相应的队列中 整段代码执行结束,看微任务队列中是否有任务等待执行,如果有则执行所有的微任务,直到微任务队列中的任务执行完毕,如果没有则继续执行新的宏任务 执行新的宏…

    2022年8月27日
    8
  • python 列表的基本操作

    python 列表的基本操作列表常用方法:name=['zhangsan','lisi','wangwu','xieqi']name2=[1,2,3,4]

    2022年7月5日
    28
  • vue怎么实现分页_vue实现表格

    vue怎么实现分页_vue实现表格今天有人问我怎么用vue实现分页功能,我开始觉得这不是后端的事吗?怎么我们前端也要干了,而且现在怎么多UI库,比如Element-ui,我觉得这是个很好的前端UI库啊。不过既然有人问了,我就写写吧。这是我的HTML代码<template><ul><!–上一页按钮–><li><buttonclass=”el-icon-arrow-left”@click=”getPageGo(-1)”:disabled=”isAc.

    2022年10月1日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号