java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot redisTemplate操作lua

springboot使用redisTemplate操作lua脚本

作者:秃了也弱了。

本文主要介绍了springboot使用redisTemplate操作lua脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

写在前面

操作redis使用Lua脚本有诸多好处

使用lua

@Test
public void redisLuaTest(){

    String script1 = "if redis.call('setnx', KEYS[1], ARGV[1]) == 1 then redis.call('set', KEYS[2], ARGV[2]) return 1 else return 0 end";
    Long result1 = (Long)redisTemplate.execute(
            new DefaultRedisScript<Long>(script1, Long.class),
            Arrays.asList("key1", "key2"),
            "value1", "value2"
    );
    System.out.println(result1); // 1

    // 如果key1==value1,则删除key1,返回删除的状态,否则返回0
    String script2 = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
    Long result2 = (Long)redisTemplate.execute(
            new DefaultRedisScript<Long>(script2, Long.class),
            Arrays.asList("key1"),
            "value1"
    );
    System.out.println(result2); // 1
}

解释

/**
第一个参数使用默认的DefaultRedisScript即可;
List<K> keys是key的集合
Object... args是val的集合
*/
@Override
public <T> T execute(RedisScript<T> script, List<K> keys, Object... args) {
    return scriptExecutor.execute(script, keys, args);
}

key的集合,在lua中可以使用KEYS[1]、KEYS[2]……获取,注意KEYS必须大写不能拼错;
val的集合,在lua中可以使用ARGV[1]、ARGV[2]……获取,注意ARGV必须大写不能拼错。

说白了,使用redisTemplate操作lua,也就是传key的集合和val的集合,这一串lua脚本可以保证其原子性的。

具体lua语法其实也很简单,基本掌握了if else、循环、赋值语句,就能应付大部分操作redis的命令。

lua中的redis.call命令就是操作redis的命令,第一个参数就是redis的原始命令,后面的参数就是redis命令的参数,使用起来也非常方便。

到此这篇关于springboot使用redisTemplate操作lua脚本的文章就介绍到这了,更多相关springboot redisTemplate操作lua内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文