Springboot Redis設(shè)置key前綴的方法步驟
更新時(shí)間:2021年04月30日 10:24:30 作者:will的猜想
這篇文章主要介紹了Springboot Redis設(shè)置key前綴的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
properties中配置
#redis redis.masterClusterNodes=10.40.57.197:7000;10.40.57.198:7002;10.40.57.199:7004 redis.slaveClusterNodes=10.40.57.197:7001;10.40.57.198:7003;10.40.57.199:7005 redis.maxTotal=50 redis.maxIdle=10 redis.minIdle=1 redis.maxWaitMillis=1000 redis.testOnBorrow=true redis.testOnReturn=true redis.timeout=10000 redis.lockExpireSeconds=5 redis.soTimeout=1000 redis.maxAttempts=3 redis.password=123456 redis.clientName=clientName redis.keyPrefix=0000-->
讀取配置文件內(nèi)容:
@Component
@ConfigurationProperties(prefix = "redis")
@PropertySource("classpath:redis.properties")
public class RedisProperties {
/**
* master 節(jié)點(diǎn)數(shù)據(jù)
*/
private String masterClusterNodes;
/**
* slave 節(jié)點(diǎn)數(shù)據(jù)
*/
private String slaveClusterNodes;
/**
* 連接超時(shí)時(shí)間
*/
private int timeout;
/**
* 獲取數(shù)據(jù)超時(shí)時(shí)間
*/
private int soTimeout;
/**
* 出現(xiàn)異常最大重試次數(shù)
*/
private int maxAttempts;
/**
* 連接時(shí)使用的密碼
*/
private String password;
private int maxTotal;
private int maxIdle;
private int minIdle;
private int maxWaitMillis;
private boolean testOnBorrow;
private boolean testOnReturn;
/**
* key前綴
*/
private String keyPrefix;
sets,gets
}
自定義StringSerializer
這個(gè)還是需要優(yōu)化的
@Component
public class MyStringSerializer implements RedisSerializer<String> {
private final Logger logger = LoggerFactory.getLogger ( this.getClass () );
@Autowired
private RedisProperties redisProperties;
private final Charset charset;
public MyStringSerializer() {
this ( Charset.forName ( "UTF8" ) );
}
public MyStringSerializer(Charset charset) {
Assert.notNull ( charset, "Charset must not be null!" );
this.charset = charset;
}
@Override
public String deserialize(byte[] bytes) {
String keyPrefix = redisProperties.getKeyPrefix ();
String saveKey = new String ( bytes, charset );
int indexOf = saveKey.indexOf ( keyPrefix );
if (indexOf > 0) {
logger.info ( "key缺少前綴" );
} else {
saveKey = saveKey.substring ( indexOf );
}
logger.info ( "saveKey:{}",saveKey);
return (saveKey.getBytes () == null ? null : saveKey);
}
@Override
public byte[] serialize(String string) {
String keyPrefix = redisProperties.getKeyPrefix ();
String key = keyPrefix + string;
logger.info ( "key:{},getBytes:{}",key, key.getBytes ( charset ));
return (key == null ? null : key.getBytes ( charset ));
}
}
redisConfig 配置
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
private final Logger logger = LoggerFactory.getLogger ( this.getClass () );
@Autowired
private RedisProperties redisProperties;
@Autowired
private MyStringSerializer myStringSerializer;
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory ( redisClusterConfiguration (),
jedisPoolConfig () );
jedisConnectionFactory.setPassword ( redisProperties.getPassword () );
jedisConnectionFactory.setTimeout ( redisProperties.getTimeout () );
return jedisConnectionFactory;
}
@Bean
public RedisClusterConfiguration redisClusterConfiguration() {
String[] ipPorts = redisProperties.getClusterNodes ().split ( ";" );
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration ( Arrays.asList ( ipPorts
) );
return redisClusterConfiguration;
}
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = BeanMapperUtil.map ( redisProperties,
JedisPoolConfig.class );
return jedisPoolConfig;
}
/**
* 配置cacheManage
* 設(shè)置超時(shí)時(shí)間 1小時(shí)
*
* @param redisTemplate
* @return
*/
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager redisCacheManager = new RedisCacheManager ( redisTemplate );
redisCacheManager.setDefaultExpiration ( 60 * 60 );
return redisCacheManager;
}
@Bean
public RedisTemplate<String, String> redisTemplate() {
StringRedisTemplate template = new StringRedisTemplate ( jedisConnectionFactory () );
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer ( Object.class );
ObjectMapper om = new ObjectMapper ();
om.setVisibility ( PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY );
om.enableDefaultTyping ( ObjectMapper.DefaultTyping.NON_FINAL );
jackson2JsonRedisSerializer.setObjectMapper ( om );
template.setKeySerializer ( myStringSerializer );
template.setHashKeySerializer ( myStringSerializer );
template.setValueSerializer ( jackson2JsonRedisSerializer );
template.afterPropertiesSet ();
return template;
}
}
到此這篇關(guān)于Springboot Redis設(shè)置key前綴的方法步驟的文章就介紹到這了,更多相關(guān)Springboot Redis key前綴內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PowerJob的AliOssService工作流程源碼解讀
這篇文章主要介紹了PowerJob的AliOssServiceg工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Java Eclipse中實(shí)現(xiàn)快速替換變量
這篇文章主要介紹了Java Eclipse中實(shí)現(xiàn)快速替換變量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Java中的動(dòng)態(tài)代理和靜態(tài)代理詳細(xì)解析
這篇文章主要介紹了Java中的動(dòng)態(tài)代理和靜態(tài)代理詳細(xì)解析,Java中的代理可以幫助被代理者完成一些前期的準(zhǔn)備工作和后期的善后工作,但是核心的業(yè)務(wù)邏輯仍然是由被代理者完成,需要的朋友可以參考下2023-11-11
一篇文章教你將JAVA的RabbitMQz與SpringBoot整合
這篇文章主要介紹了如何將JAVA的RabbitMQz與SpringBoot整合,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2021-09-09

