您的位置:首页 > 编程语言 > Lua

spring boot 中使用LUA脚本

2018-04-14 10:23 696 查看

编写LUA脚本

  该脚本功能:先检查redis中某个key的值是否与期望的值V1一致,如果一致则将其修改为新的值V2并返回true,否则返回false。其实就是CAS。

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

  注意,lua脚本中的变量都要是local 的,不可以是全局变量。否则会报错。详见 http://doc.redisfans.com/script/eval.html#id6

使用DefaultRedisScript加载lua脚本

@Bean
public DefaultRedisScript<Boolean> redisScript() {
DefaultRedisScript<Boolean> redisScript = new DefaultRedisScript<>();
redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("lua/checkandset.lua")));
redisScript.setResultType(Boolean.class);
return redisScript;
}

测试

@Autowired
DefaultRedisScript<Boolean> redisScript;
/**
* 测试redis  lua
*
* @return
*/
@RequestMapping(value = "testredislua", method = {RequestMethod.GET})
@ResponseBody
public Object testredislua() {
String key = "testredislua";

redisTemplate.delete(key);
redisTemplate.opsForValue().set(key, "hahaha");
String s = redisTemplate.opsForValue().get(key);
log.info(s);

redisTemplate.execute(redisScript, Collections.singletonList(key), "hahaha", "3333");
s = redisTemplate.opsForValue().get(key);
log.info(s);

return null;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: