@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) ;