http://redisdoc.com/script/eval.html
[1]解决redis中分布式锁,设置 过期的问题。
String key = "name";
String script = "local rs=redis.call('setnx',KEYS[1],ARGV[1]);if(rs<1) then return 'F';end;redis.call('expire',KEYS[1],tonumber(ARGV[2]));return 'S';";
String sha = jimClient.scriptLoad(script);
List<String> keys = new LinkedList<String>();
keys.add(key);
List<String> args = new LinkedList<String>();
args.add("30");
args.add("60");
Object res = jimClient.evalsha(sha,keys,args,false);
Boolean boolf = "F".equals(res);
Boolean bools = "S".equals(res);
log.warn("com.jd.pop.ware.market.center.task.CommonRest.testLua3:res={}",res);
log.warn("com.jd.pop.ware.market.center.task.CommonRest.testLua3:boolf={}",boolf);
log.warn("com.jd.pop.ware.market.center.task.CommonRest.testLua3:bools={}",bools);
[2] redis
String key = "name";
jimClient.set(key,String.valueOf(5));
jimClient.expire("name",30,TimeUnit.SECONDS);
String script = " local num = redis.call('get',KEYS[1]);if ( tonumber(num) >0) then local numValue = tonumber(num)-1; redis.call('set',KEYS[1],numValue); end";
String sha = jimClient.scriptLoad(script);
List<String> keys = new LinkedList<String>();
keys.add(key);
List<String> args = new LinkedList<String>();
jimClient.evalsha(sha,keys,args,false);
jimClient.expire(key,30,TimeUnit.SECONDS);