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

开通网站需要多少钱网页自动点击软件

开通网站需要多少钱,网页自动点击软件,网站开发分为哪几块,wordpress有没有响应式前言 Redis 是一个高性能的内存数据库,广泛用于缓存、计数器、分布式锁等场景。在某些业务中,我们需要对多个 Redis 操作进行原子性处理,以保证数据一致性,这时就可以使用 Redis 提供的 Lua 脚本功能。 Spring Boot 通过 RedisT…

前言

Redis 是一个高性能的内存数据库,广泛用于缓存、计数器、分布式锁等场景。在某些业务中,我们需要对多个 Redis 操作进行原子性处理,以保证数据一致性,这时就可以使用 Redis 提供的 Lua 脚本功能。

Spring Boot 通过 RedisTemplate 对 Redis 进行了良好的封装,也支持我们方便地调用 Lua 脚本。本文将带你一步步实现 Spring Boot 中如何:

  • 加载 Lua 脚本
  • 调用 Lua 脚本
  • 实现一个实际业务逻辑:获取 key,若不存在则设置默认值并返回

一、项目准备

1. 创建 Spring Boot 项目

你可以使用 Spring Initializr 创建一个新项目,选择以下依赖:

  • Spring Web
  • Spring Data Redis
  • Lettuce(Redis 客户端)

或者手动创建 Maven 项目后添加如下依赖:

<!-- Spring Boot Starter -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency><!-- Web 支持 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><!-- Redis 支持 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><!-- Lettuce 客户端 -->
<dependency><groupId>io.lettuce.core</groupId><artifactId>lettuce-core</artifactId><version>6.2.4</version>
</dependency>

二、编写 Lua 脚本文件

我们将创建一个简单的 Lua 脚本:如果 key 不存在,则设置默认值;存在则直接返回当前值。

脚本内容:get_or_set_default.lua

路径建议为:src/main/resources/lua/get_or_set_default.lua

-- get_or_set_default.lua
local key = KEYS[1]
local defaultVal = ARGV[1]local value = redis.call('GET', key)
if not value thenredis.call('SET', key, defaultVal)value = defaultVal
end
return value

三、加载 Lua 脚本到 Redis

我们可以利用 Spring 的生命周期回调(如 @PostConstruct)来加载 Lua 脚本,并保存其 SHA1 校验码,后续通过 EVALSHA 来调用。

创建脚本加载类:LuaScriptLoader.java

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;@Service
public class LuaScriptLoader {private final RedisTemplate<String, Object> redisTemplate;// 存储脚本的 SHA1 值public static String GET_OR_SET_DEFAULT_SHA;public LuaScriptLoader(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;}@PostConstructpublic void loadScripts() throws IOException {Path scriptPath = Paths.get("src/main/resources/lua/get_or_set_default.lua");String scriptContent = Files.readString(scriptPath);DefaultRedisScript<String> redisScript = new DefaultRedisScript<>();redisScript.setScriptText(scriptContent);redisScript.setResultType(String.class);// 执行 SCRIPT LOAD 命令加载脚本GET_OR_SET_DEFAULT_SHA = redisTemplate.execute(redisScript,Collections.singletonList("dummyKey"),"defaultValue");System.out.println("Lua Script SHA1: " + GET_OR_SET_DEFAULT_SHA);}
}

注意:

  • 我们使用了一个 dummyKey 和 dummyValue 来执行一次脚本,只是为了触发脚本加载。
  • 实际调用时使用的是 EVALSHA 命令。

四、封装 Lua 脚本调用服务

我们创建一个服务类来封装 Lua 脚本的调用逻辑。

创建服务类:RedisLuaService.java

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.Collections;@Service
public class RedisLuaService {private final RedisTemplate<String, Object> redisTemplate;public RedisLuaService(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;}/*** 调用 Lua 脚本:根据 key 获取值,若不存在则设置默认值并返回*/public String getOrSetDefault(String key, String defaultValue) {return (String) redisTemplate.execute(LuaScriptLoader.GET_OR_SET_DEFAULT_SHA,Collections.singletonList(key),defaultValue);}
}

五、创建 REST 接口进行测试

为了方便测试,我们创建一个简单的接口。

创建控制器类:RedisLuaController.java

import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/redis")
public class RedisLuaController {private final RedisLuaService redisLuaService;public RedisLuaController(RedisLuaService redisLuaService) {this.redisLuaService = redisLuaService;}@GetMapping("/get-or-set")public String getOrDefault(@RequestParam String key,@RequestParam(required = false, defaultValue = "default_value") String defaultValue) {return redisLuaService.getOrSetDefault(key, defaultValue);}
}

六、运行测试

1. 启动 Redis 服务

确保你本地或服务器上已经启动了 Redis:

redis-server

2. 启动 Spring Boot 应用

使用 IDE 或命令行启动 Spring Boot 项目:

mvn spring-boot:run

3. 测试访问

访问如下 URL:

http://localhost:8080/redis/get-or-set?key=test_lua&defaultValue=hello_redis
第一次请求:
  • Redis 中没有 test_lua 键,会自动设置为 hello_redis,并返回该值。
第二次请求:
  • 即使不传 defaultValue,也会返回 hello_redis,因为键已存在。

七、注意事项

项目说明
脚本缓存Redis 会缓存加载过的 Lua 脚本,但重启后失效,需重新加载
调试困难Lua 脚本不能输出日志,建议先在 Redis CLI 中测试后再集成
性能考量Lua 脚本是单线程执行的,避免复杂运算
异常处理在 Java 层应对脚本执行失败做容错处理
参数传递KEYS 是数组,ARGV 是参数数组,顺序要对应

八、进阶建议

  • 将所有 Lua 脚本统一管理,使用配置中心或数据库存储
  • 结合 AOP 或拦截器,实现 Lua 脚本调用的自动重试机制
  • 使用 Redisson 等高级库简化 Lua 脚本操作
  • 使用 Spring Cache 抽象层结合 Lua 脚本实现更复杂的缓存策略

示例结构图

src/
├── main/
│   ├── java/
│   │   └── com.example.demo/
│   │       ├── DemoApplication.java
│   │       ├── service/
│   │       │   ├── RedisLuaService.java
│   │       │   └── LuaScriptLoader.java
│   │       └── controller/
│   │           └── RedisLuaController.java
│   └── resources/
│       └── lua/
│           └── get_or_set_default.lua
└── pom.xml

总结

本文详细介绍了如何在 Spring Boot 中调用 Redis 的 Lua 脚本,包括:

  • 添加必要的依赖
  • 编写 Lua 脚本
  • 使用 RedisTemplate 加载和调用脚本
  • 构建完整的调用流程与接口测试

Lua 脚本非常适合用来实现一些需要原子性的 Redis 操作,是构建高并发系统的重要工具之一。


文章转载自:

http://KIwOXalp.xprzq.cn
http://eYEtghoe.xprzq.cn
http://ZdfrcUDZ.xprzq.cn
http://1ApENZHm.xprzq.cn
http://GQVNqTOJ.xprzq.cn
http://tA9q0RY9.xprzq.cn
http://nQC3Wvmi.xprzq.cn
http://7t5GuRHz.xprzq.cn
http://WNSDdbC8.xprzq.cn
http://kPNddLIV.xprzq.cn
http://hwLF3Pef.xprzq.cn
http://ppNz0ecK.xprzq.cn
http://9MxvnlRU.xprzq.cn
http://68UOlm1D.xprzq.cn
http://3JTK8fYE.xprzq.cn
http://8fUcry8W.xprzq.cn
http://mHnThxYb.xprzq.cn
http://Tw703m7E.xprzq.cn
http://3gglTYqL.xprzq.cn
http://YEUyWIn9.xprzq.cn
http://xvyCLtE4.xprzq.cn
http://JM07bpru.xprzq.cn
http://eEnMavco.xprzq.cn
http://cLavTaWH.xprzq.cn
http://iufp33fY.xprzq.cn
http://RySFpboE.xprzq.cn
http://vuCpHksi.xprzq.cn
http://t3WdAiSG.xprzq.cn
http://yPQMEpIr.xprzq.cn
http://TKmrb2rN.xprzq.cn
http://www.dtcms.com/wzjs/727810.html

相关文章:

  • 网站seo方法营销方案100个软文
  • 橙色 网站陇南市建设局网站公示
  • 云主机 怎么做网站网站的登录弹窗怎么做
  • 南通建网站做团餐 承包食堂的企业网站
  • 无代码网站建设开发网站建设的问卷调查
  • 太原网站怎么做seo免费建站网站教程
  • 建站之星怎么安装爱情动作片做网站
  • 响应式建站网站seo和sem是什么意思啊
  • 小俊哥网站建设鞍山云网站
  • 南京seo网站建设费用python做网站的多吗
  • 专教做蛋糕的网站wordpress 导航条
  • 网站推广的方法网站建设 300元
  • 空间放两个网站广州网站建设哪家有
  • linux建设网站专业网站营销
  • 网站建设流程图片互联网加盟
  • 高端网站建设企业网站建站ppt制作平台
  • 石家庄建设企业网站自适应全屏网站
  • 嘉兴网站开发与制作高校网站群管理系统
  • 网站开发方法 优帮云成都网站建设麦格思
  • 视频弹幕网站怎么做的wordpress页面跳转
  • 百度云wordpress怎么搭建网站在线音乐网站怎么做
  • 做网站如何分类产品郑州专业公司网站建设公司
  • 做捕鱼网站电话wordpress一键搭建
  • 南通城乡住房建设厅网站中小型企业网站优化
  • 网站改版流程做网站图片教程
  • 苏州网络公司建网站百度seo优化技术
  • 杭州国外网站推广公司wordpress 不过滤空格
  • 鞋材东莞网站建设电视云网站建设
  • 无锡网站推广无锡做网站郑州注册公司费用
  • 商城网站建设所必备的四大功能是哪些外贸平台有哪些知乎