redis运维(十九)redis 的扩展应用 lua(一)

一 redis 的扩展应用 lua

redis如何保证原子操作

bash 复制代码
说明:引入'lua脚本',核心解决'原子性'问题

① redis为什么引入lua?

bash 复制代码
lua脚本本身'体积小',启动'速度快'

② redis引入lua的优势

bash 复制代码
小结: 类似'自定义redis命令'

③ redis中如何使用lua

EVAL

bash 复制代码
说明: '内置'的 lua解释器的版本是'5.1','避免'语法'兼容性'问题

注意: 从哪个版本redis引入'对lua'的支持

语法: EVAL script numkeys key [key ...] arg [arg ...]
bash 复制代码
细节: '多个lua语句'之间使用'分号'隔开
bash 复制代码
需求: 在'lua脚本'中获取redis'相关参数'

⑤ call和pcall函数

bash 复制代码
需求'1':查看call和pcall函数'报错'的'差异性'
bash 复制代码
需求'2':call'函数'的使用
bash 复制代码
补充:'()'是pcall函数的参数,里面的参数'类似'在redis-cli客户端中'执行命令','逗号变成空格'

⑥ lua和redis的数据转换

bash 复制代码
思考:'何时发生'数据类型转换?

redis使用的数据类型

Lua 复制代码
--- 获取一个参数
local expire = ARGV[1]

--- 由于lua脚本接收到参数都会'转为String',如果要使用'数字'类型,必须'强转'
tonumber(expire)

⑦ lua类型转redis类型

bash 复制代码
说明:eval命令的'返回值'的类型

强调:lua脚本的'return 返回值'被转换成'redis数据结构'
bash 复制代码
备注:redis数据类型和lua数据类型并'不完全'对应
bash 复制代码
备注: 希望lua返回一个'浮点数',那么应该将它作为一个'字符串',比如'ZSCORE'命令

⑧ redis数据结构转换为lua类型

bash 复制代码
1、lua通过'redis.call()'或者'redis.pcall()'函数执行redis命令

2、者两个函数调用'返回值'被转换成了'lua数据结构'

测试方法:首先在lua脚本中'执行redis命令',然后'type'下查看类型
相关推荐
随风M记忆s1 小时前
Redis支持事务吗?了解Redis的持久化机制吗?
数据库·redis·bootstrap
独行侠影a13 小时前
APScheduler+Redis 分布式定时任务:解决多实例任务重复执行
数据库·redis·分布式
不在逃避q17 小时前
Golang笔记之Redis
redis·笔记·golang
江晓鱼未暖21 小时前
十七、Redis 核心原理与架构详解
大数据·数据库·数据仓库·redis·缓存·架构
红莲凪是21 小时前
Redis有哪些部署方案?了解哨兵机制吗?
java·redis·eureka
小罗水1 天前
第13章 Redis 缓存、幂等锁与任务状态
数据库·redis·缓存
Devin~Y1 天前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
toooooop82 天前
如何用 ss + ps 精准定位本机 Redis 的“隐形”消费者?
linux·数据库·redis·缓存
星空露珠2 天前
迷你世界3.0API,事件监听
开发语言·数据结构·数据库·游戏·lua
veminhe2 天前
redis从6.2.x版本升级到8.8.1
redis