redis中使用lua脚本

简介: redis中使用lua脚本

一,lua脚本的好处

1.减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时 延。

2.原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。 因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。

3.复用。客户端发送的脚本会永久存在redis中,这样,其他客户端可以复用这一 脚本而不需要使用代码完成相同的逻辑。 变量类型,声明变量。控制语句、循环语句。函数


二,怎么在redis中使用lua脚本?

命令格式

EVAL script numkeys key [key...] arg [arg...]
 eval "" 0 a b c d e f

说明:

1.script是第一个参数,为Lua 5.1脚本。该脚本不需要定义Lua函数(也不应 该)。

2.第二个参数numkeys指定后续参数有几个key。

3.key [key ...],是要操作的键,可以指定多个,在lua脚本中通过KEYS[1], KEYS[2]获取

4.arg [arg ...],参数,在lua脚本中通过ARGV[1], ARGV[2]获取。

三,使用eval命令 简单示例

eval "return ARGV[1]" 0 100
eval "return {ARGV[2],ARGV[1]}" 0 100 101
eval "return {KEYS[1],ARGV[1],ARGV[2]}" 1 10 20 30


上面是使用EVAL命令执行 lua脚本的简单示例,没有和redis结合起来。

下面我们使用redis.call来执行redis的命令。

说明:… 是字符串连接符。local 是声明一个局部变量

eval 'local val = ARGV[1].." "..redis.call("get",KEYS[1]) return val ' 1 age 20

四,如果脚本的内容比较多,通过上面这种方式执行起来很麻烦,我们可以创建一个脚本文件。把脚本内容写入文件中。

注意:

这里执行脚本文件,不是在交互模式下执行的。

先创建一个脚本文件,在/home目录下

# touch test01.lua



通过vi命令,把脚本内容写进去


执行找个脚本,注意,前后的空格

相关文章
|
6月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
1784 7
|
缓存 NoSQL Redis
Redis 脚本
10月更文挑战第18天
162 3
|
10月前
|
缓存 NoSQL 搜索推荐
【📕分布式锁通关指南 03】通过Lua脚本保证redis操作的原子性
本文介绍了如何通过Lua脚本在Redis中实现分布式锁的原子性操作,避免并发问题。首先讲解了Lua脚本的基本概念及其在Redis中的使用方法,包括通过`eval`指令执行Lua脚本和通过`script load`指令缓存脚本。接着详细展示了如何用Lua脚本实现加锁、解锁及可重入锁的功能,确保同一线程可以多次获取锁而不发生死锁。最后,通过代码示例演示了如何在实际业务中调用这些Lua脚本,确保锁操作的原子性和安全性。
558 6
【📕分布式锁通关指南 03】通过Lua脚本保证redis操作的原子性
|
9月前
|
缓存 NoSQL 测试技术
Redis压测脚本及持久化机制
Redis压测脚本及持久化机制简介: Redis性能压测通过`redis-benchmark`工具进行,可评估读写性能。持久化机制包括无持久化、RDB(定期快照)和AOF(操作日志),以及两者的结合。RDB适合快速备份与恢复,但可能丢失数据;AOF更安全,记录每次写操作,适合高数据安全性需求。两者结合能兼顾性能与安全性,建议同时开启并定期备份RDB文件以确保数据安全。
199 9
|
10月前
|
NoSQL Redis 数据库
Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
通过本文的介绍,我们详细讲解了 Lua 脚本在 Redis 中的作用、`eval` 命令的使用方法以及 `redis.call` 和 `redis.pcall` 的区别和用法。通过合理使用 Lua 脚本,可以实现复杂的业务逻辑,确保操作的原子性,并减少网络开销,从而提高系统的性能和可靠性。
599 13
|
监控 安全
公司用什么软件监控电脑:Lua 脚本在监控软件扩展功能的应用
在企业环境中,电脑监控软件对保障信息安全、提升效率至关重要。Lua 脚本在此类软件中用于扩展功能,如收集系统信息、监控软件使用时长及文件操作,向指定服务器发送数据,支持企业管理和运营。
196 6
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
250 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
584 0
|
缓存 分布式计算 NoSQL
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
176 2
|
存储 JSON Ubuntu
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?