Lua是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
在某次学习中,发现示例中仅仅对获取的值进行了判断,那么如果值为空,在LUA中该怎么判断呢?
这貌似是个简单问题,简单到一说判断为空就开始长篇大论了,因为可能真的太简单了吧,不过没办法,自己就是不会。
无奈只能自己编写脚本自己调用调试。
找到一个说法是这样的:在lua中,除了nil和false,其他的值都为真,包括0,可以通过nil为false这一点来判断是否为空。
那么编写一个脚本进行测试,如果GET到的值为空,就返回404,其他返回1
--- 在lua中,除了nil和false,其他的值都为真,包括0,可以通过nil为false这一点来判断是否为空 if(not(redis.call('get', ARGV[1]))) then return 404 end return 1
注意,这里用到了取反操作符NOT,然后编写Java代码进行调用
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.core.io.ClassPathResource; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import java.util.Collections; @SpringBootTest public class RedisTest { @Autowired private StringRedisTemplate stringRedisTemplate; private static final DefaultRedisScript<Long> TEST_SCRIPT; static { TEST_SCRIPT = new DefaultRedisScript<>(); TEST_SCRIPT.setLocation(new ClassPathResource("test.lua")); TEST_SCRIPT.setResultType(Long.class); } @Test public void testLua(){ // 1.执行lua脚本 Long result = stringRedisTemplate.execute( TEST_SCRIPT, Collections.emptyList(), "Java001" ); System.out.println(result); } }
这里让他去获取Java001的值,我的Redis是没有的,返回404。然后获取一个存在的,返回就是1。实验证明,这个方法是可行的。
END
Java小强
未曾清贫难成人,不经打击老天真。
自古英雄出炼狱,从来富贵入凡尘。
发表评论: