Redis之Lua脚本

这篇具有很好参考价值的文章主要介绍了Redis之Lua脚本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Lua脚本

编写Lua脚本

 springboot整合redis使用lua


Lua脚本

       Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行。使用脚本的好处如下:

1. 减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在redis服务器上完成。使用脚本,减少了网络往返时延。

2. 原子操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。管道不是原子的,不过redis的批量操作命令(类似mset)是原子的。

3. 替代redis的事务功能:redis自带的事务功能很鸡肋,而redis的lua脚本几乎实现了常规的事务功能,官方推荐如果要使用redis的事务功能可以用redis lua替代。

编写Lua脚本

使用 EVAL 命令

EVAL "your_lua_script_here" numkeys key [key ...] arg [arg ...]

your_lua_script_here 是你的Lua脚本。
numkeys 是键的数量。
key [key ...] 是键的列表。
arg [arg ...] 是参数的列表。

举例

Redis之Lua脚本,分布式中间件,redis,lua,数据库,java,后端,缓存

 springboot整合redis使用lua

引入redis依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

封装redis相关操作

@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    public RedisService(RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    // 使用 RedisScript 执行 Lua 脚本
    public void setUsername(String username, String value) {
        // Lua 脚本
        String script = "redis.call('SET', KEYS[1], ARGV[1])";

        // 创建 RedisScript 对象
        DefaultRedisScript<String> redisScript = new DefaultRedisScript<>(script, String.class);
        redisScript.setResultType(String.class);

        // 执行 Lua 脚本
        redisTemplate.execute(redisScript, new StringRedisSerializer(), new StringRedisSerializer(),
                Collections.singletonList(username), value);
    }

    // 使用 RedisScript 执行 Lua 脚本
    public void setUsernames(List<String> keys, List<String> values) {
        // Lua 脚本
        String script = "for i, key in ipairs(KEYS) do\n" +
                "    redis.call('SET', key, ARGV[i])\n" +
                "end";

        // 创建 RedisScript 对象
        DefaultRedisScript<String> redisScript = new DefaultRedisScript<>(script, String.class);
        redisScript.setResultType(String.class);

        // 执行 Lua 脚本
        redisTemplate.execute(redisScript, new StringRedisSerializer(), new StringRedisSerializer(),
                keys, values.toArray(new String[0]));
    }
}

调用接口

@RestController
public class redisluaController {

    @Autowired
    private RedisService redisService;

    @RequestMapping("/test")
    public void executeLuaScript() {
        redisService.setUsername("username", "zhangsang");
    }

    @RequestMapping("/test02")
    public void executeLuaScript02() {
        ArrayList<String> keys = new ArrayList<>();
        keys.add("lisi");
        keys.add("wangwu");
        ArrayList<String> values = new ArrayList<>();
        values.add("20");
        values.add("18");
        redisService.setUsernames(keys, values);
    }
}

       test接口中通过lua脚本实现了set username zhangsan操作,传入参数是单个的key和value。执行结果如下:

Redis之Lua脚本,分布式中间件,redis,lua,数据库,java,后端,缓存

       test02中通过lua脚本实现批量操作,传入参数是多个key和多个value,通过集合传入。执行结果如下:

Redis之Lua脚本,分布式中间件,redis,lua,数据库,java,后端,缓存

Redis之Lua脚本,分布式中间件,redis,lua,数据库,java,后端,缓存文章来源地址https://www.toymoban.com/news/detail-817446.html

到了这里,关于Redis之Lua脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • golang分布式中间件之kafka

    Kafka是一个分布式发布-订阅消息系统,由LinkedIn公司开发。它被设计为快速、可靠且具有高吞吐量的数据流平台,旨在处理大量的实时数据。Kafka的架构是基于发布-订阅模型构建的,可以支持多个生产者和消费者。 在本文中,我们将讨论如何使用Go语言来实现Kafka分布式中间件

    2024年02月07日
    浏览(55)
  • 微服务中间件--分布式搜索ES

    elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 正向索引

    2024年02月11日
    浏览(40)
  • 分布式消息中间件RocketMQ的应用

    所有代码同步至GitCode:https://gitcode.net/ruozhuliufeng/test-rocketmq.git 普通消息 消息发送分类 ​ Producer对于消息的发送方式也有多种选择,不同的方式会产生不同的系统效果。 同步发送消息 ​ 同步发送消息是指,Producer发出一条消息后,会在收到MQ返回的ACK之后才发下一条消息。

    2024年02月05日
    浏览(87)
  • Springcloud中间件-----分布式搜索引擎 Elasticsearch

    该笔记是根据黑马程序员的课来自己写了一遍的,b站有对应教程和资料 第一部分 第二部分 第三部分 预计看完跟着练习5小时足够 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如:

    2024年02月08日
    浏览(60)
  • ShardingSphere:强大的分布式数据库中间件【图文】

    Sharding-JDBC :它提供了一个轻量级的 Java 框架,在 Java 的 JDBC 层提供额外的服务。使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。Sharding-JDBC主要用于嵌入到应用程序中,使应用程序能够透明地

    2024年04月28日
    浏览(52)
  • 在CSDN学Golang分布式中间件(ElasticSearch)

    倒排索引是一种用于快速查找文本中特定单词或短语的数据结构。它将文本中的每个单词或短语与包含该单词或短语的文档列表相关联。这使得可以轻松地查找包含给定单词或短语的所有文档。 在 Go 中,可以使用 map 和 slice 来实现倒排索引。具体来说,可以使用一个 map 将每

    2024年02月15日
    浏览(47)
  • XXL-JOB中间件【实现分布式任务调度】

    目录 1:XXL-JOB介绍 2:搭建XXL-JOB 2.1:调度中心 2.2:执行器 2.3:执行任务 3:分片广播 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 官网:https://www.xuxueli.com/xxl-

    2024年02月03日
    浏览(110)
  • 第5章 分布式缓存中间件的配置及其调用定义

    1 分布式缓存中间件的配置定义 1.1 Core.Configuration. CacheConfig namespace Core . Configuration {     /// summary     /// 【缓存配置 -- 类】     /// remarks     /// 摘要:     ///     通过该类中的属性成员实例对 “appsettings.json” 文件中的 1 个指定缓存项 ( 键 / 值对 ) 在内存或指定分布式软

    2024年02月03日
    浏览(59)
  • 《分布式中间件技术实战:Java版》学习笔记(一):抢红包

    数据库建表 (1)red_send_record 记录用户发送了若干总金额的若干个红包。 (2)red_detail 记录用户发送的红包被分成的小红包金额。 (3)red_rob_record 记录用户抢到的红包金额。 随机生成红包金额 红包金额的最小单位是分,将红包金额放大100倍到int类型(为了方便生成随机数),保证

    2024年02月10日
    浏览(54)
  • 削峰填谷与应用间解耦:分布式消息中间件在分布式环境下并发流量控制的应用

    这是《百图解码支付系统设计与实现》专栏系列文章中的第(18)篇,也是流量控制系列的第(4)篇。点击上方关注,深入了解支付系统的方方面面。 本篇重点讲清楚分布式消息中间件的特点,常见消息中间件的简单对比,在支付系统的应用场景,比如削峰填谷,系统应用间

    2024年01月20日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包