java使用redis调用lua

本文介绍了如何利用Lua脚本在Redis中实现高效且原子的操作,包括减少网络通信、确保操作的原子性和脚本的复用性。通过示例展示了如何编写Lua脚本,配置Spring Bean以及在Java应用中调用执行,用于实现条件更新和过期设置功能。
摘要由CSDN通过智能技术生成

使用脚本的好处:
1. 减少网络开销,在Lua脚本中可以把多个命令放在同一个脚本中运行
2. 原子操作,redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。换句话说,编写脚本的过程中无需担心会出现竞态条件
3. 复用性,客户端发送的脚本会永远存储在redis中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑
使用:

1. 根据业务编写lua脚本 XX.lua,语法请自行百度 (idea可以安装lua plugin) 

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

2.实例化

@Configuration
public class RedisLuaScriptConfig {

    /**
     * 实例化lua 脚本  cas 操作
     * @return
     */
  
    @Bean
    public RedisScript<Boolean> compereAndSetAndExpire() {
        return RedisScript.of(new ClassPathResource("redis/compereAndSetAndExpire.lua"), Boolean.class);
    }

}

3.调用

public class XX{    
    @Resource(name = "compereAndSetAndExpire")
    RedisScript<Boolean> compereAndSetAndExpire;
    @Autowired
    private RedisTemplate<String, String> redisTemplate;
    public void XX {
         // 1脚本,2, key  3, 期望值, 4, 要设置值 5过期时长 单位秒
         Boolean red = Optional.ofNullable(redisTemplate.execute(compereAndSetAndExpire, Lists.newArrayList(key), "8", "10",60000)).orElse(false);
     }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值