一、依赖和yaml配置
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-data-redis</ artifactId>
</ dependency>
< dependency>
< groupId> org.redisson</ groupId>
< artifactId> redisson</ artifactId>
< version> 3.15.3</ version>
</ dependency>
spring :
redis :
password : 1234567890
sentinel :
master : mymaster
nodes :
- 192.168.125.125: 8190
- 192.168.125.125: 8191
- 192.168.125.125: 8192
二、RedisConfig
@Configuration
public class RedisConfig {
@Value ( "${spring.application.name}" )
private String serverName;
@Bean
public RedissonClient redisson ( RedisProperties redisProperties) {
Config config = new Config ( ) ;
if ( redisProperties. getSentinel ( ) != null ) {
SentinelServersConfig sentinelServersConfig = config. useSentinelServers ( ) ;
sentinelServersConfig. setMasterName ( redisProperties. getSentinel ( ) . getMaster ( ) ) ;
sentinelServersConfig. setPassword ( redisProperties. getPassword ( ) ) ;
for ( String node : redisProperties. getSentinel ( ) . getNodes ( ) ) {
sentinelServersConfig. addSentinelAddress ( "redis://" + node) ;
}
sentinelServersConfig. setKeepAlive ( true ) ;
sentinelServersConfig. setDatabase ( redisProperties. getDatabase ( ) ) ;
sentinelServersConfig. setMasterConnectionMinimumIdleSize ( 10 ) ;
sentinelServersConfig. setSlaveConnectionMinimumIdleSize ( 10 ) ;
sentinelServersConfig. setMasterConnectionPoolSize ( getMaxActive ( redisProperties) ) ;
sentinelServersConfig. setSlaveConnectionPoolSize ( getMaxActive ( redisProperties) ) ;
sentinelServersConfig. setTimeout ( getTimeout ( redisProperties) ) ;
sentinelServersConfig. setClientName ( serverName) ;
sentinelServersConfig. setCheckSentinelsList ( false ) ;
} else {
SingleServerConfig singleServerConfig = config. useSingleServer ( ) ;
singleServerConfig. setAddress ( "redis://" + redisProperties. getHost ( ) + ":" + redisProperties. getPort ( ) ) ;
singleServerConfig. setPassword ( redisProperties. getPassword ( ) ) ;
singleServerConfig. setKeepAlive ( true ) ;
singleServerConfig. setDatabase ( redisProperties. getDatabase ( ) ) ;
singleServerConfig. setClientName ( serverName) ;
}
return Redisson . create ( config) ;
}
private int getTimeout ( RedisProperties redisProperties) {
int timeout = 1000 ;
if ( null != redisProperties. getLettuce ( ) && null != redisProperties. getLettuce ( ) . getPool ( ) && null != redisProperties. getLettuce ( ) . getPool ( ) . getMaxWait ( ) ) {
timeout = ( int ) redisProperties. getLettuce ( ) . getPool ( ) . getMaxWait ( ) . toMillis ( ) ;
}
if ( null != redisProperties. getJedis ( ) && null != redisProperties. getJedis ( ) . getPool ( ) && null != redisProperties. getJedis ( ) . getPool ( ) . getMaxWait ( ) ) {
timeout = ( int ) redisProperties. getJedis ( ) . getPool ( ) . getMaxWait ( ) . toMillis ( ) ;
}
return timeout;
}
private int getMaxActive ( RedisProperties redisProperties) {
int macActive = 50 ;
if ( null != redisProperties. getLettuce ( ) && null != redisProperties. getLettuce ( ) . getPool ( ) && redisProperties. getLettuce ( ) . getPool ( ) . getMaxActive ( ) > 0 ) {
macActive = redisProperties. getLettuce ( ) . getPool ( ) . getMaxActive ( ) ;
}
if ( null != redisProperties. getJedis ( ) && null != redisProperties. getJedis ( ) . getPool ( ) && redisProperties. getJedis ( ) . getPool ( ) . getMaxActive ( ) > 0 ) {
macActive = redisProperties. getJedis ( ) . getPool ( ) . getMaxActive ( ) ;
}
return macActive;
}
三、IdUtils
@Slf4j
@Component
public class IdUtils {
@Autowired
private RedissonClient client;
public static final String SERVER_PREFIX = "DEM_" ;
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter . ofPattern ( "yyyyMMdd" ) ;
public String nextId ( String prefix) {
prefix = prefix != null ? prefix : "FL" ;
String now = LocalDate . now ( ) . format ( DATE_TIME_FORMATTER) ;
prefix = prefix. concat ( now) ;
String key = SERVER_PREFIX. concat ( prefix) ;
RAtomicLong atomicLong = client. getAtomicLong ( key) ;
atomicLong. expire ( 1 , TimeUnit . DAYS) ;
long num = atomicLong. incrementAndGet ( ) ;
return String . format ( prefix. concat ( "%05d" ) , num) ;
}
}