当前位置: 首页 > news >正文

redis中的Lua脚本,redis的事务机制

 lua脚本的特点

lua脚本可以操作redis数据库,并且脚本中的代码满足原子性,要么全部被执行,要么全部不执行

lua脚本的语法

脚本示例

lua脚本的草稿:

 最终的lua脚本

lua脚本在java里调用的方法 

RedisTemplete类里有一个方法,接收参数为

RedisScript类(储存lua脚本内容),List类型的 KEYS[]数组,Object类型的ARGY[]数组

1.编写lua脚本文件

保存文件名为unlock.lua

if (redis.call('get', KEYS[1]) == ARGV[1]) then
    -- 一致则释放锁
    return redis.call('del', KEYS[1])
end
return 0

2.把lua文件读取为redis的lua脚本,也就是DefaultRedisScript类型的对象

private static final DefaultRedisScript<Long> UNLOCK_SCRIPT;

static {
    UNLOCK_SCRIPT = new DefaultRedisScript();
    UNLOCK_SCRIPT.setLocation(new ClassPathResource("unlock.lua"));
    UNLOCK_SCRIPT.setResultType(Long.class);
}

3.在java里执行lua脚本

    @Override
    public void unlock() {
        stringRedisTemplate.execute(UNLOCK_SCRIPT,
                Collections.singletonList(KEY_PREFIX + name),
                ID_PREFIX + Thread.currentThread().getId());
    }

这样就把解锁变为了一个原子性的事务

http://www.dtcms.com/a/32614.html

相关文章:

  • 深度学习技术文章质量提升指南(基于CSDN评分算法优化)
  • http代理IP怎么实现?如何解决代理IP访问不了问题?
  • 【nextJs】官网demo学习
  • REACT--组件通信
  • 长短期记忆网络:从理论到创新应用的深度剖析
  • 链表-基础训练(二)链表 day14
  • HAProxy介绍与编译安装
  • 宝塔扩容——阿里云如何操作
  • ‌最新版DeepSeek保姆级安装教程:本地部署+避坑指南
  • 动态规划01背包问题系列一>01背包
  • Spring Boot 如何保证接口安全
  • 请说明C#中的List是如何扩容的?
  • 10.Docker 仓库管理
  • 《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译
  • 运维基线方案说明
  • AI学习指南HuggingFace篇-Hugging Face 的核心工具
  • windows11那些事
  • 计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)
  • k2路由器登录校园网
  • 如何确定虚函数在虚函数表中的位置3 (Linux x64版本)
  • Python----数据结构(哈希表:哈希表组成,哈希冲突)
  • [漏洞篇]文件上传漏洞详解
  • Nacos学习(一)——基本介绍、安装与负载均衡策略
  • MySQL 面试总结
  • TCP三次握手 四次挥手:一场“确认眼神”与“礼貌告别”的对话
  • Linux中ps -ef命令详解
  • 开源低代码平台与 Vue.js
  • JVM篇:内存分区及作用及各部分可能发生的异常
  • 前端八股——计算机网络+浏览器原理
  • 编程小白冲Kaggle每日打卡(12)--kaggle学堂:<机器学习简介>模型如何工作