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

SpringBoot 执行Lua脚本 服务端执行 减少性能损耗 优化性能 优化连接性能

介绍

通过 Redis 执行 Lua 脚本时,所有的操作都在服务器端完成,而不是多次通过网络进行请求。这可以显著减少网络延迟,尤其是在需要多次与 Redis 交互的场景中。多个操作可以在 Lua 脚本中组合成一个操作,而不是分多次请求,这减少了客户端与 Redis 之间的往返次数,从而提升了性能。脚本的执行是原子的。意味着整个 Lua 脚本会在 Redis 服务器中一次性执行,不会被中断,确保了操作的原子性。

创建Lua脚本

redis 脚本 键不存在就添加 不存在 就删除例子,

在资源文件中创建
resources/redis.lua

if redis.call('EXISTS', KEYS[1]) == 1 then  -- 检查传入的键 (KEYS[1]) 是否存在redis.call('DEL', KEYS[1])  -- 删除键 (KEYS[1])elseredis.call('SET', KEYS[1], ARGV[1])  -- 如果键不存在,设置键 (KEYS[1]) 的值为 (ARGV[1])endreturn 1  -- 返回1,表示脚本成功执行
  • KEYS[1] 是传入脚本的第一个键
  • ARGV[1] 是传入脚本的第一个值

执行脚本

@RequiredArgsConstructor
public class RedisScript {private static final DefaultRedisScript<Long> script ;//Long为返回值类型static {script=new DefaultRedisScript<>();//初始化脚本 resources\redis.luascript.setLocation(new ClassPathResource("redis.lua"));//设置返回值类型script.setResultType(Long.class);}public static Long runScript(StringRedisTemplate  redisTemplate){// 传递多个参数//List<String> keys = Arrays.asList("key1", "key2");  // 两个键//List<String> args = Arrays.asList("value1", "value2");  // 两个值return redisTemplate.execute(script,Collections.singletonList("dpc"), //KeyUUID.randomUUID().toString() ); //Value}}

static 代码块是静态初始化块,它会在类加载时被执行一次。这里的 static 代码块用于初始化静态变量 script。

接口调用

private final StringRedisTemplate redisTemplate;@GetMapping("/redis")
public Long redis(){return  RedisScript.runScript(redisTemplate);
}

在这里插入图片描述

http://www.xdnf.cn/news/690265.html

相关文章:

  • linux使用服务添加一个开机启动脚本
  • 同一机器下通过HTTP域名访问其他服务器进程返回504问题记录
  • 服务器带宽线路的区别(GIA、CN2、BGP、CMI等)
  • Python教程(七)——错误和异常
  • Rust并发编程实践指南
  • Hadoop复习(一)
  • LVS-DR 负载均衡群集
  • LeetCode Hot100 (普通数组)
  • 深入解析 IP 代理:原理、应用场景与优化策略
  • ubuntu20.04安装NVIDIA显卡驱动(驱动官网下载安装包,解决开机启动黑屏问题,终极保姆式方案教程)
  • 51c~CUDA~合集1
  • Nginx内置变量及案例详解
  • 【mysql】-5 索引
  • 服务器tty2终端如何关机
  • WebAssembly 及 HTML Streaming:重塑前端性能与用户体验
  • 力扣100题---字母异位词分组
  • 力扣经典算法篇-16-最长公共前缀(顺序查找法,二分查找法,分治算法)
  • 学习率及相关优化参数详解:驱动模型高效训练
  • IP 风险画像技术略解
  • Parasoft C++Test软件单元测试_实例讲解(对多次调用的函数打桩)
  • apptrace 视角下移动端深度链接技术与优势​
  • 02-BTC-密码学原理 对hash算法如果出现漏洞的思考
  • MySQL 使用全局锁会导致的问题?
  • 【从零开始学习QT】Qt 概述
  • zookeeper 操作总结
  • 切换到旧提交,同时保证当前修改不丢失
  • K最近邻(KNN)算法完整实现指南
  • Linux -- gdb/cgdb的认识和使用
  • React Context 与状态管理:用与不用
  • 唯创WT2606B TFT显示灵动方案,重构电子锁人机互动界面,赋能智能门锁全场景交互!