< dependency> < groupId> </ groupId> < artifactId> </ artifactId> < version> </ version> </ dependency> @Configuration 
@EnableConfigurationProperties ( RedisProperties . class ) 
public  class  RedisConfig  { public  static  final  String  KEY_PREFIX  = "xxx-service:" ; @Bean public  JedisPool  jedisPool ( RedisProperties  properties)  { JedisPoolConfig  config =  new  JedisPoolConfig ( ) ; config. setMaxTotal ( 128 ) ; config. setMaxIdle ( 16 ) ; config. setMinIdle ( 16 ) ; return  new  JedisPool ( config,  properties. getHost ( ) ,  properties. getPort ( ) ,  2000 ,  properties. getPassword ( ) ) ; } 
} 
@Service 
@Qualifier ( "jedisService" ) 
public  class  JedisServiceImpl  implements  ILockService  { @Autowired private  JedisPool  jedisPool; private  static  final  String  RELEASE_LOCK_LUA_SCRIPT  = "if redis.call('get', KEYS[1]) == ARGV[1] then "  + "return redis.call('del', KEYS[1]) "  + "else "  + "return 0 "  + "end" ; private  static  final  String  TRY_LOCK_LUA_SCRIPT  = "if redis.call('setNx', KEYS[1], ARGV[1]) then "  + "   if redis.call('get', KEYS[1]) == ARGV[1] then "  + "       return redis.call('expire', KEYS[1], ARGV[2]) "  + "   else "  + "       return 0 "  + "   end "  + "else "  + "   return 0 "  + "end" ; @Override public  boolean  tryLock ( String  lockKey,  String  lockValue,  long  expireSeconds)  { lockKey=  RedisConfig . KEY_PREFIX + lockKey; try  ( Jedis  jedis =  jedisPool. getResource ( ) )  { Object  result =  jedis. eval ( TRY_LOCK_LUA_SCRIPT , 1 , lockKey, lockValue, String . valueOf ( expireSeconds) ) ; return  "1" . equals ( result. toString ( ) ) ; }  catch  ( Exception  e)  { return  false ; } } @Override public  boolean  releaseLock ( String  lockKey,  String  lockValue)  { lockKey=  RedisConfig . KEY_PREFIX + lockKey; try  ( Jedis  jedis =  jedisPool. getResource ( ) )  { Object  result =  jedis. eval ( RELEASE_LOCK_LUA_SCRIPT , 1 , lockKey, lockValue) ; return  "1" . equals ( result. toString ( ) ) ; }  catch  ( Exception  e)  { return  false ; } } 
}