首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

玩转 lua in Redis

从今天开始讲写一些redislua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大多数语言当中,来扩展其功能。...四、redislua整合详解 1、调用Lua脚本的语法: $ redis-cli --eval path/to/redis.lua KEYS[1] KEYS[2] ,...--eval,告诉redis-cli读取并运行后面的lua脚本 path/to/redis.lua,是lua脚本的位置 KEYS[1] KEYS...Lua的false) redis返回值类型和Lua数据类型转换规则 redis返回值类型 Lua数据类型 整数回复 数字类型 字符串回复 字符串类型 多行字符串回复 table类型(数组形式) 状态回复...在脚本中可以使用return语句将值返回给客户端,如果没有执行return语句则默认返回nil Lua数据类型和redis返回值类型转换规则 Lua数据类型 redis

58530
您找到你想要的搜索结果了吗?
是的
没有找到

redis中的lua

前言 最近在看redislua,看了官网资料和网上一些文章,整理了lua的相关内容,希望对大家有帮助。...目录 0. redis中运行lua的流程的正常流程 1.redis中的lua概要信息     1.1 lua中调用redis命令     1.2 redis数据结构与lua数据结构对应关系     ...(脚本影响复制Redis 3.2以后支持)     2.3 lua脚本中的可选复制命令 3. redislua脚本的debug     3.1 lua脚本中记录日志     3.2 Lua debugger...1.redis中的lua概要信息 1.1lua中调用redis命令    在lua脚本中以2种方式调用redis的命令 lua中调用redis的方式 对异常处理的方式 redis.call 遇到异常将抛出...3. redislua脚本的debug 3.1lua脚本中记录日志 redis.log(loglevel,message) loglevel 如下: redis.LOG_DEBUG redis.LOG_VERBOSE

1.7K60

Redis进阶-lua脚本

---- Pre Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行。...---- 语法 从Redis2.6.0版本开始,通过内置的Lua解释器,可以使用EVAL命令对Lua脚本进行求值。...script参数是一段Lua脚本程序,它会被运行在Redis服务器上下文中,这段脚本不必(也不应该)定义为一个Lua函数。...替代redis的事务功能 redis自带的事务功能很鸡肋,报错不支持回滚,而redislua脚本几乎实现了常规的事务功能,支持报错回滚操作,官方推荐如果要使用redis的事务功能可以用redis lua...---- lua实战 高并发-【抢红包案例】之四:使用Redis+Lua脚本实现抢红包并异步持久化到数据库 ---- 注意事项 注意,不要在Lua脚本中出现死循环和耗时的运算,否则redis会阻塞,将不接受其他的命令

71630

Redis Lua脚本大学教程

前面我们已经把Redis Lua相关的基础都介绍过了,如果你可以编写一些简单的Lua脚本,恭喜你已经可以从Lua中学毕业了。...在大学课程中,我们主要学习Lua脚本调试和RedisLua执行原理两部分内容两部分。 Lua脚本调试 Redis从3.2版本开始支持Lua脚本调试,调试器的名字叫做LDB。...支持步进式执行 支持静态和动态断点 支持从脚本中向调试控制台打印调试日志 检查Lua变量 追踪Redis命令的执行 很好的支持打印RedisLua的值 无限循环和长执行检测,模拟断点 Lua脚本调试实战...我们可以使用redis-cli —eval命令来运行这个脚本,而要调试的话,可以加上—ldb参数,因此我们先执行下面的命令: redis-cli --ldb --eval script.lua foo...上面就是脚本执行的整个过程,这个过程之后,Redis还会处理一些脚本同步的问题。这个前文我们也介绍过了《Redis Lua脚本中学教程(上)》 总结 到这里,Redis Lua脚本系列就全部结束了。

98820

Redis Lua脚本原理

4 替换随机函数 5 创建排序辅助函数 6 创建redis.pcall函数 7 全局环境保护 8 修改后的Lua环境保存到服务器状态的Lua属性,等待脚本执行 Redis中带有不确定性的命令: SINTER...由于Redis使用串行化的方式执行,因此某一特定时间,只有一个脚本能被放进Lua环境里面运行。 环境协作组件 环境组件: 一个是用于执行Lua脚本的伪客户端 一个用于保存Lua脚本的字典。...执行Lua脚本的伪客户端 使用redis.call或者redis.pcall执行Redis命令: 1 将redis.call或者redis.pcall传给伪客户端 2 伪客户端将执行的命令传给执行器 3...执行器执行命令,返回给伪客户端 4 伪客户端把结果返回给Lua环境 5 Lua环境把结果返回给redis.call或者redis.pcall函数 6 redis.call或者redis.pcall返回结果给调用者...lua_scripts字典 保存Lua脚本的SHA1【校验和】checksum,值是对应的脚本。Redis会把EVAL命令执行过的脚本,或者SCRIPT LOAD加载的脚本都保存在字典中。 ?

1.5K60

Redis Lua脚本的使用

中执行 Lua 脚本 Lua脚本功能为Redis开发和运维人员带来如下三个好处: Lua脚本在Redis中是原子执行的,执行过程中间不会插入其他命令。...以下列出的是详细的转换规则: 从 Redis 转换到 LuaRedis 整数转换成 Lua numbers Redis bulk 回复转换成 Lua strings Redis 多条 bulk 回复转换成...Lua numbers 转换成 Redis 整数 Lua strings 换成 Redis bulk 回复 Lua tables (array) 转换成 Redis 多条 bulk 回复 一个带单个 ok...域的 Lua tables,转换成 Redis 状态回复 一个带单个 err 域的 Lua tables ,转换成 Redis 错误回复 Lua 的 booleans false 转换成 Redis...的 Nil bulk 回复 从 Lua 转换到 Redis 有一条额外的规则,这条规则没有和它对应的从 Redis 转换到 Lua 的规则: Lua booleans true 转换成 Redis 整数回复中的

1.5K10

redis之初识lua脚本

3.6、Lua脚本Lua脚本特性的出现给Redis带来了很大的变化,其中最重要的就是使得用户可以按需对Redis服务器的功能进行扩展:在Lua脚本特性出现之前,用户如果想要给Redis服务器增加新功能,...Lua脚本带来的第二个变化与它的执行机制有关:Redis服务器以原子方式执行Lua脚本,在执行完整个Lua脚本及其包含的Redis命令之前,Redis服务器不会执行其他客户端发送的命令或脚本,因此被执行的...因为Redis目前内置的是Lua 5.1版本的解释器,所以用户在脚本中也只能使用Lua 5.1版本的语法。...但是随着EVAL命令以及Lua解释器的出现,使得Redis服务器中同时出现了两种不同的环境:一种是Redis命令执行器所处的环境,而另一种则是Lua解释器所处的环境。...3) 当Lua脚本执行完毕并向EVAL命令的调用者返回结果时,Lua值将被转换为Redis协议值。

2K30

Redis Lua脚本小学教程

Redis怎么执行Lua脚本 EVAL命令 Redis中可以使用EVAL命令执行相应的Lua脚本 > EVAL 'local val="Hello Jackey" return val' 0 "Hello...上面例子中的两个点是Lua脚本中字符串连接的操作符 现在我们已经知道怎么在Redis中执行Lua脚本了,可是这样的脚本和Redis没有关系啊,怎么才能操作Redis中的数据呢?...所以Redis又提供了一种方法。 redis-cli --eval 我们可以先写一个Lua文件,然后使用redis-cli命令来执行。...> redis-cli --eval hello.lua my_name , Hello "Hello Jackey" 这样,我们就可以先写一个.lua文件,然后再使用redis-cli命令来执行了...如果都掌握了,那么恭喜你已经从Lua小学毕业了。在Lua中学你会学到Redis关于Lua命令的更详细介绍。

1.1K40

Lua定制Redis命令

---- 内嵌Lua的执行 万幸 Redis 内嵌了 Lua 执行环境,支持 Lua 脚本的执行,通过执行 Lua 脚本,我们可以把多个命令复合为一个 Lua 脚本,通过 Lua 脚本来实现上文中提到的...执行步骤 Redis 在 2.6 版本后,启动时会创建 Lua 环境、载入 Lua 库、定义 Redis 全局表格、存储 redis.pcall 等 Redis 命令,以准备 Lua 脚本的执行。...---- 一些思考 实现之外,还要一些东西要思考: 使用场景 首先来总结一下 RedisLua 的使用场景: 可以使用 Lua 脚本实现原子性操作,避免不同客户端访问 Redis 服务器造成的数据冲突...要注意 Lua 脚本的时间复杂度,Redis 的单线程同样会阻塞在 Lua 脚本的执行中。 使用 Lua 脚本实现原子操作时,要注意如果 Lua 脚本报错,之前的命令同样无法回滚。...参考: Redis 设计与实现 » Lua 脚本 RedisLua 脚本 RedisLua脚本编程的实现和应用

1.4K70

Redis 事务与 Redis Lua 脚本的编写

6. redis 事务缺陷的解决 — Lua Lua 是一个小巧的脚本语言,有标准 C 编写,几乎在所有操作系统和平台上都可以编译运行。...一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的,这一切都决定了Lua是作为嵌入式脚本的最佳选择。...redis 2.6版本之后也内嵌了一个 Lua 解释器,可以用于一些简单的事务与逻辑运算。 7. Redis 内嵌 Lua 的优势 7.1....原子性 由于 Lua 脚本是提交到 Redis server 进行一次性执行的,整个执行过程中不会被其他任何工作打断,其它任何脚本或者命令都无法执行,也就不会引起竞争条件,从而本身就实现了事务的原子性。...通过 Lua 脚本执行 redis 命令 在 Lua 脚本中,只要使用 redis.call 传入 redis 命令就可以直接执行。

81110

如何使用Redis执行Lua脚本

但是使用lua在执行几百行代码的情况下都不需要考虑高并发所带来的问题。 lua基础 创建lua脚本 就像创建其他的文件一样,新建一个以.lua为后缀的文件,比如说test.lua –单行注释。...redis执行lua脚本 在脚本中如何与redis进行交互 local value = redis.call('GET',key);redis.call('SET',key,value+2);redis.call...如何执行脚本呢 redis-cli --eval redis-ratelimiter-counter.lua key limit , value1 value2 上方这段命令的意思呢,其实就是告诉redis...:请你启动客户端的时候帮我执行一下redis-ratelimiter-counter.lua这个文件,然后呢,执行文件的话有这么几个参数,key、limit 、 value1、value2 细心小伙伴可能会有疑问了...如何在Java程序中执行lua呢 你只需要这样的一段代码就可以调用redis执行脚本redis-ratelimiter-tokenBucket.lua了 @Autowired

3.9K01

Redis常用技术-----使用Lua语言

Redis命令的计算能力并不算很强大,使用Lua语言则可以在很大程度上弥补Redis的这个不足。...在Redis中,执行Lua语言是原子性,也就是说Redis执行Lua的时候是不会被中断的,具备原子性,这个特性有助于Redis对并发数据一致性的支持。...Redis支持两种方法运行脚本,一种是直接输入一些Lua语言的程序代码,另一种是将Lua语言编写成文件。在实际应用中,一些简单的脚本可以采取第一种方式,对于有一定逻辑的一般采用第二种。...eval "redis.call('set',KEYS[0],ARGV[1])" 1 lua-key lua-value 设置一个键值对,在Lua语言中采用redis.call(command,key[...保存为test.lua。 在linux中执行下面的命令 redis-cli --eval test.lua key1 key2 , 2 4 注意逗号的左右两边的都有一个空格。 ?

78520

Redis系列之使用Lua脚本

lua语法简单,小巧,源码一共才200多K,本身不会有太强的功能,很多的语言也支持lua语言,比如redis、Nginx redis语言中完美嵌入了lua脚本功能,redis可以调用lua脚本中的api...,lua脚本也可以调用redis中的命令 redis调用lua脚本 在redis中调用lua脚本,需要使用eval指令 127.0.0.1:6379>eval "return 'hello'" 0 "hello...脚本调用redis命令 使用lua调用redis的命令,需要使用redis.call调用 # key为0表示能获取到锁 127.0.0.1:6379>eval "local key = redis.call...1 写个lua脚本,来实现一个简单的分布锁锁 private static final String LOCK_LUA_SCRIPT = "local lockParam = redis.call('exists...脚本实现,主要是保证原子性 private String UNLOCK_LUA_SCRIPT = "if redis.call('get', KEYS[1]) == ARGV[1] then return

13910

主从架构&lua脚本-Redis(四)

redis Src/redis-cli -p 6380 从我搭建的结果可以看到: 6379redis写入数据,在6380里是可以看到的,并且因为配置了只读,所以我在6380redis里操作set命令不能成功...三、Redis LUA脚本 1、减少网络开销。(多个命令一起发送,所以开销少) 2、原子性。 3、事务特性。...脚本意思是返回两个key和value,其中key1前面的2代表key的个数 那我们用lua脚本模拟如何实现事务的回滚以及原子性呢?...Lua脚本不会执行,则product_stock_10016为15 因为redis是单线程,前面也说了不能有大key,获取key不能用keys命令。...这里则不能再lua脚本出现死循环和耗时运算,因为他是单线程,如果因为lua脚本耗时太长甚至死循环,则整个redis会阻塞。

13540
领券