Redis使用lua脚本

用lua脚本使用redis是为了保证其原子性和线程安全。

step1:编写lua脚本,放在resource中

step2:创建脚本对象,这里因为脚本对象是静态的所以在静态代码块中进行构造

  • setLocation: 这里的 ClassPathResource 会从类路径(通常是 resources 文件夹)读取文件。

  • setResultType(Long.class): 对应 Lua 脚本最后的 return

step3:执行lua脚本

复制代码
RedisScript<T> script脚本对像
Keys 输入Key数组参数
args 输入args数组参数
java 复制代码
private static final DefaultRedisScript<Long> UNLOCK_SCRIPT;
static {
    UNLOCK_SCRIPT = new DefaultRedisScript<>();
    UNLOCK_SCRIPT.setLocation(new ClassPathResource("unlock.lua"));
    UNLOCK_SCRIPT.setResultType(Long.class);
}

public void unlock() {
    // 调用lua脚本
    stringRedisTemplate.execute(
            UNLOCK_SCRIPT,
            Collections.singletonList(KEY_PREFIX + name),
            ID_PREFIX + Thread.currentThread().getId());
}
相关推荐
多彩电脑14 小时前
Lua中的元表里的__index和__newindex
开发语言·lua
折哥的程序人生 · 物流技术专研20 小时前
【电商多平台电子面单对接实战|第二篇】抖音代发电子面单对接:从“面条代码”到整洁架构的涅槃之路
设计模式·架构·系统架构·单元测试·代码规范·单一职责原则
zfoo-framework20 小时前
通过redis-cli+lua脚本查询redis数据
数据库·redis·lua
kiss strong20 小时前
自制请求工具
开发语言·python·lua
闪电悠米21 小时前
黑马点评-秒杀优化-04_lua_and_db_fallback
服务器·开发语言·网络·数据库·缓存·junit·lua
无忧.芙桃1 天前
vibe coding之opencode的使用
ai·单元测试·opencode
闪电悠米1 天前
黑马点评-秒杀优化-03_blocking_queue_async_order
数据库·分布式·oracle·junit·wpf·lua
闪电悠米2 天前
黑马点评-秒杀优化-02_lua_precheck
开发语言·redis·分布式·缓存·junit·wpf·lua
迷藏4942 天前
双阶段动态权重匹配系统:高效精准的工业级解决方案
java·junit
程序员二叉2 天前
【Redis】 高性能核心:IO多路复用+多线程+Pipeline+Lua脚本(面试终极版)
redis·面试·lua