@Resource(name = "omStringRedisTemplate")
private StringRedisTemplate stringRedisTemplate;
private String SHIPPER_BANNER_DISPLAY_KEY_PREFIX = "shipper_banner_disPlay_userId_";
private String SETNX_EXPIRE_LUA = "if redis.call('setnx', KEYS[1], ARGV[1]) == 1 then redis.call('expire', KEYS[1], ARGV[2]) return 'true' else return 'false' end";
String flag = stringRedisTemplate.execute(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
Object nativeConnection = connection.getNativeConnection();
// 集群模式和单机模式虽然执行脚本的方法一样,但是没有共同的接口,所以只能分开执行
// 集群模式
if (nativeConnection instanceof JedisCluster) {
return (String) ((JedisCluster) nativeConnection).eval(SETNX_EXPIRE_LUA, keys, args);
}
// 单机模式
else if (nativeConnection instanceof Jedis) {
return (String) ((Jedis) nativeConnection).eval(SETNX_EXPIRE_LUA, keys, args);
}
return "false";
}
});
return Boolean.valueOf(flag) ;