Redis-在springboot环境下执行lua脚本

文章目录

  • 1、什么lua
  • 2、创建SpringBoot工程
  • 3、引入相关依赖
  • 4、创建LUA脚本
  • 5、创建配置类
  • 6、创建启动类
  • 7、创建测试类

1、什么lua

“Lua”的英文全称是“Lightweight Userdata Abstraction Layer”,意思是“轻量级用户数据抽象层”。

2、创建SpringBoot工程

在这里插入图片描述

3、引入相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version><relativePath/> <!-- lookup parent from repository --></parent><!-- Generated by https://start.springboot.io --><!-- 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn --><groupId>com.atguigu</groupId><artifactId>springboot-lua</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-lua</name><description>springboot-lua</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

4、创建LUA脚本

local current = redis.call('GET',KEYS[1])
if current == ARGV[1]then redis.call('SET',KEYS[1],ARGV[2])return true
elseredis.call('SET',KEYS[1],ARGV[3])return true
end
return false

5、创建配置类

package com.atguigu.lua.config;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
@Component
public class AppRedisConfiguration {//简单序列化@Beanpublic RedisTemplate<String,String> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String,String> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(factory);// 设置键序列化方式redisTemplate.setKeySerializer(new StringRedisSerializer());// 设置简单类型值的序列化方式redisTemplate.setValueSerializer(new StringRedisSerializer());// 设置默认序列化方式redisTemplate.setDefaultSerializer(new StringRedisSerializer());redisTemplate.afterPropertiesSet();return redisTemplate;}//加载lua脚本,设置返回值类型@Beanpublic RedisScript<Boolean> script() {Resource scriptSource = new ClassPathResource("lua/test.lua");return RedisScript.of(scriptSource, Boolean.class);}}

6、创建启动类

package com.atguigu.lua;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;// Generated by https://start.springboot.io
// 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn
@SpringBootApplication
public class SpringbootLuaApplication {public static void main(String[] args) {SpringApplication.run(SpringbootLuaApplication.class, args);}}

7、创建测试类

package com.atguigu.lua;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.RedisScript;
import java.util.List;@SpringBootTest
class SpringbootLuaApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate RedisScript redisScript;@Testvoid contextLoads() {redisTemplate.execute(redisScript, List.of("str"),"spring","mybatis","springboot");}}
127.0.0.1:6379> keys *
1) "balance"
2) "str"
127.0.0.1:6379> get str
"springboot"
127.0.0.1:6379> 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新能源汽车CAN总线故障定位与干扰排除的几个方法

CAN总线是目前最受欢迎的现场总线之一,在新能源车中有广泛应用。新能源车的CAN总线故障和隐患将影响驾驶体验甚至行车安全,如何进行CAN总线故障定位及干扰排除呢? 目前,国内机动车保有量已经突破三亿大关。由于大量的燃油车带来严峻的环境问题,因此全面禁售燃油车的日程在…

汽车租赁系统

摘 要 随着汽车租赁市场的快速发展&#xff0c;为了提高汽车租赁服务的效率和用户体验&#xff0c;本论文设计与实现了一款基于Java的汽车租赁系统。 该系统采用B/S架构&#xff0c;利用JavaWeb技术和MySQL数据库实现了车辆信息管理、在线车辆租赁、门店出车模块、租赁订单信息…

1. Tensorrt-llm 基础

1.Tensorrt-llm安装 os: ubuntu 22.04 1.1搭建docker 环境 切换到 root 用户 sodu passwd root 更新apt sudo apt-get update --fix-missing 更新docker sudo apt-get upgrade docker-ce 安装nvidia 容器运行时&#xff0c;避免如下错误 Error response from daemon…

Android Kotlin 中的闭包函数

闭包函数是现代编程语言中一个重要的概念&#xff0c;Kotlin 作为一种现代的 JVM 语言&#xff0c;自然也支持闭包函数。本文将详细介绍闭包函数的概念、在Kotlin 中的使用方法&#xff0c;以及一些常见的应用场景。 什么是闭包函数&#xff1f; 闭包函数&#xff0c;也称为闭…

每天一个项目管理概念之WBS

项目管理中的工作分解结构&#xff08;Work Breakdown Structure&#xff0c;简称WBS&#xff09;是规划和管理项目的核心工具之一&#xff0c;它通过将复杂的项目任务细分为更小、更易管理的部分来提高项目执行的效率与效果。WBS不仅有助于明确项目范围&#xff0c;还为时间管…

[RPI] istoreos安装esphome

esphome可以提供了一个集成的编译环境,同时他又可以通过无线方式更新firmware,这无疑方便了我们的开发工作。 istoreos商店没有提供esphome,所以我们需要自己用‘类似’命令行的方式来安装, 1. 拉取esphome镜像 依次点击左侧边栏Docker -> 镜像,输入esphome/esphome…

【LeetCode面试经典150题】117. 填充每个节点的下一个右侧节点指针 II

一、题目 117. 填充每个节点的下一个右侧节点指针 II - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个…

React@16.x(42)路由v5.x(7)常见应用场景(4)- 路由切换动画

目录 1&#xff0c;实现路由切换基础样式 2&#xff0c;使用 CSSTransition 添加动画1&#xff0c;自定义动画组件 *TransitionRoute.jsx*2&#xff0c;*App.jsx*3&#xff0c;样式改动 3&#xff0c;注意点 通过一个例子来说明如何实现。 1&#xff0c;实现路由切换 基础样式…

[DDD] 领域驱动设计简介

领域驱动设计 Domain Driven Design 1 DDD简介 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;简称DDD&#xff09;是一种软件开发方法论&#xff0c;它强调软件设计应紧密围绕业务领域模型进行。DDD的核心思想是将实现与业务逻辑分离&#xff0c;通过深入理解和…

亿发进销存管理系统+:多终端无缝协同,实现经营销售场景全覆盖

亿发软件凭借产品、市场、业务的深入理解&#xff0c;在进销存基础上进行了延伸&#xff0c;推出多终端、一体化的“进销存管理系统”多元产品矩阵。对企业经营中进货、出货、销售、付款等进行全程跟踪管理。有效辅助企业解决业务管理、销售管理、库存管理、财务管理等一系列问…

Java路径操纵漏洞示例与解决赏析之一

示例代码 public static List<File> findClassesInPackage(String codePath,String packageName, boolean recursive) {List<File> classFiles = new ArrayList<>();String packagePath = packageName.replace(., /);File directory = new File(codePath + &…

【大数据】—量化交易实战案例双均线策略(移动平均线)

声明&#xff1a;股市有风险&#xff0c;投资需谨慎&#xff01;本人没有系统学过金融知识&#xff0c;对股票有敬畏之心没有踏入其大门&#xff0c;今天用另外一种方法模拟炒股&#xff0c;后面的模拟的实战全部用同样的数据&#xff0c;最后比较哪种方法赚的钱多。 量化交易…

【项目实训】各种反爬策略及爬虫困难点总结

在这里&#xff0c;我总结了本次项目的数据收集过程中遇到的反爬虫策略以及一些爬虫过程中容易出现问题的地方。 user-agent 简单的设置user-agent头部为浏览器即可&#xff1a; 爬取标签中带href属性的网页 对于显示岗位列表的页面&#xff0c;通常检查其源代码就会发现&…

深入理解链表:基础概念、操作及应用

前言 链表&#xff08;Linked List&#xff09;是一种重要的数据结构&#xff0c;广泛应用于各种算法和系统设计中。本文将详细介绍链表的基本概念、类型、基本操作及其在实际编程中的应用&#xff0c;并使用C语言代码示例进行说明。 链表的基本概念 链表是一种线性数据结构…

【数据结构】(C语言):动态数组

动态数组&#xff1a; 内存区域连续&#xff0c;即每个元素的内存地址连续。可用索引查看元素&#xff0c;数组[索引号]。指定位置删除元素&#xff0c;该位置之后的元素全部往前移动一位。指定位置添加元素&#xff0c;从最后到该位置的元素全部往后移动一位。物理大小&#…

【保姆级讲解ECMAScript和JavaScript之间的区别】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

mysql 升级到8.0

MySQL :: MySQL 8.0 Reference Manual :: 3.7 Upgrading MySQL Binary or Package-based Installations on Unix/Linux 2种升级方式&#xff1a; In-Place Upgrade &#xff1a; data目录替换 Logical Upgrade&#xff1a; 通过 mysqldump 导出为sql文本后&#xff0c;导入…

全面国产化信创适配改造方案说明

一、概叙 系统的全面国产化适配改造需要从多个方面进行考虑&#xff0c;改造前需要进行充分的论证&#xff0c;在满足具体业务场景的前提下&#xff0c;以确保系统的稳定性和安全性&#xff0c;同时还要考虑技术的发展&#xff0c;不断优化和更新。因此全面国产化适配改造也面临…

Redis集群安装(三主三从一哨兵)

Redis集群安装&#xff08;三主三从一哨兵&#xff09; 一&#xff0c;搭建环境 ​ 在三台服务器上分别搭建redis并测试是否能启动&#xff08;搭建方法&#xff09; 二&#xff0c;Redis cluster三主三从 配置环境变量 vim /etc/profile #添加如下内容 export REDIS_HOME…

AI 开发平台(Coze)搭建《AI女友(多功能版本)》

前言 本文讲解如何从零开始&#xff0c;使用扣子平台去搭建《AI女友&#xff08;多功能版本&#xff09;》 bot直达&#xff1a;AI女友&#xff08;多功能版&#xff09; - 扣子 AI Bot (coze.cn) 欢迎大家前去体验&#xff01;&#xff01;&#xff01; 正文 功能介绍 …