jedis eval 运行lua脚本

	   String script="local ismeber=redis.call('setnx',KEYS[1],KEYS[1])"
					 	+" if (ismeber==0) "
					 	+ "then " // 
					 	+" return -1 " 
					 	+" end "
					 	+"local ismeberexpire=redis.call('expire',KEYS[1],ARGV[1])"
			 			+" if (ismeberexpire==0) "
			 			+ "then " // 
			 			+" return -2  " 
			 			+" end "
			 			+" return 1";
		
		  List<String> keys = new ArrayList<String>();

		  List<String> arg = new ArrayList<String>();
		  keys.add("foo");
		  arg.add("30");
		  System.out.println(script);
		  System.out.println(RedisUtil.eval(script,keys,arg));

redis 执行lua脚本 测试案例 赋值参考

eval  "return redis.call('setnx',KEYS[1],KEYS[1])" 1 foo
本地:0>1
eval "return {KEYS[1],KEYS[2],KEYS[3],ARGV[1],ARGV[2],ARGV[3]}" 3 username1 username2 username3 v1 v2 v3
本地:0>
 1)  "username1"
 2)  "username2"
 3)  "username3"
 4)  "v1"
 5)  "v2"
 6)  "v3"
eval  "return redis.call('setnx',KEYS[1],ARGV[1])" 1 foo f1
本地:0>1

如果 redis客户端使用evel命令,报ERR unknown command ‘EVAL’

解决方式:

检查redis版本是否大于等于2.6.0

如果版本没问题,打开redis.conf配置文件

检查是否有rename-command EVAL ""这项配置

如果有,注释掉#rename-command EVAL “”,重启redis即可