《Spring Boot 3实战案例合集》现已囊括超过50篇精选实战文章,并且此合集承诺将永久持续更新,为您带来最前沿的技术资讯与实践经验。欢迎积极订阅,享受不断升级的知识盛宴!订阅用户将特别获赠合集内所有文章的最终版MD文档(详尽学习笔记),以及完整的项目源码,助您在学习道路上畅通无阻。
环境:SpringBoot3.2.5
1. 简介
Redis 2.6 及更高版本支持通过 eval 和 evalsha 命令运行 Lua 脚本。 Spring Data Redis 为运行脚本提供了高级抽象,可处理序列化并自动使用 Redis 脚本缓存。
可以通过调用 RedisTemplate 和 ReactiveRedisTemplate 的 execute 方法来运行脚本。这两者都使用一个可配置的 ScriptExecutor(或 ReactiveScriptExecutor)来运行提供的脚本。默认情况下,ScriptExecutor(或 ReactiveScriptExecutor)负责序列化提供的键和参数,并反序列化脚本结果。这是通过模板的键和值序列化器来完成的。还有一个重载版本允许你为脚本参数和结果传递自定义序列化器。
默认的 ScriptExecutor 通过获取脚本的 SHA1 值来优化性能,首先尝试运行 evalsha,如果脚本尚未存在于 Redis 脚本缓存中,则回退到 eval。
在Spring Boot中使用Redis时,引入Lua脚本可以极大地增强操作的原子性和灵活性。Lua脚本允许将多个Redis命令组合成一个原子操作,确保在执行过程中不会被其他命令打断。这在处理需要原子操作的场景时尤为重要,如分布式锁、库存增减等。通过Spring Boot的Redis客户端,开发者可以方便地调用Lua脚本,实现对Redis数据的复杂操作,从而提升了系统的性能和可靠性。因此,在Spring Boot与Redis结合的应用中,引入Lua脚本成为了一种高效且实用的做法。
2. LUA简介&基本使用
2.1 数据类型
Lua 是动态类型语言,变量无需类型定义,只需赋值即可。如下8种级别类型:
数据类型 | 描述 |
nil | 表示无效值(在条件判断相当于false) |
boolean | true | false |
number | 双精度浮点数 |
string | 字符串 |
function | 函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 线程 |
table | 类数组索引可以是数字、字符串类型 |
定义变量
-- 全局变量
a = 5
-- 局部变量
local b = 5
-- 函数定义
function calc()
-- 全局变量
c = 5
-- 局部变量
local d = 6
print(c + d)
end
2.2 运算符
操作符 | 描述 | 实例 |
---|---|---|
+ | 加法 | A + B 输出结果 30 |
- | 减法 | A - B 输出结果 -10 |
* | 乘法 | A * B 输出结果 200 |
/ | 除法 | B / A 输出结果 2 |
% | 取余 | B % A 输出结果 0 |
^ | 乘幂 | A^2 输出结果 100 |
- | 负号 | -A 输出结果 -10 |
// | 整除运算符(>=lua5.3) | 5//2 输出结果 2 |
2.3 条件判断
语法:
if(condition1) then
-- TODO
elseif(condition2) then
-- TODO
elseif(condition3) then
-- TODO
else
-- TODO
end
示例:
function calc(a)
if (a == 5) then
print('5') ;
elseif(a==6) then
print('6') ;
else
print('error')
end;
end ;
上面的分号';' 可以没有。
2.4 字符串操作
下面列出字符串常用的一些操作