当前位置: 首页 > 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());
    }

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

相关文章:

  • 深度学习技术文章质量提升指南(基于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版本)
  • 宇数科技王兴兴:第一桶金来自上海,欢迎上海的年轻人加入
  • 巴基斯坦空袭印度多地空军基地,巴战机进入印领空
  • 中俄弘扬正确二战史观:缅怀历史,重拾初心,阻止悲剧重演
  • 澎湃研究所“营商环境研究伙伴计划”启动
  • 上海发布大风黄警:预计未来24小时内将出现8-10级大风
  • 明星站台“胖都来”背后:百元起录视频,20万可请顶流