這篇文章給大家分享的是有關(guān)springBoot如何集成redis的key的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
十余年的伊寧網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整伊寧建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“伊寧網(wǎng)站設(shè)計(jì)”,“伊寧網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
使用的是maven工程
springBoot集成redis默認(rèn)使用的是注解,在官方文檔中只需要2步;
1、在pom文件中引入即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
2、編寫一個(gè)CacheService接口,使用redisCacheServiceImpl實(shí)現(xiàn)這個(gè)接口
官網(wǎng)的原文是這樣的,也就是說,提供三個(gè)接口注入和你自己實(shí)現(xiàn)的其他實(shí)現(xiàn)類,默認(rèn)是本地端口號為6379的redis
You can inject an auto-configured RedisConnectionFactory, StringRedisTemplate or vanilla RedisTemplate instance as you would any other Spring Bean.By default the instance will attempt to connect to a Redis server using localhost:6379:
我自己的redisCacheServiceImpl這樣寫的
@Service
public class RedisCacheServiceImpl<K,V> implements CacheService<K,V> {
@Autowired
RedisTemplate<K, V> redisTemplate;
public void set(K key, V value) {
redisTemplate.opsForValue().set(key, value);
}
}ok,這樣我們即可使用springBoot默認(rèn)提供的redis服務(wù),但是這樣有幾個(gè)問題,1序列化,我們set到redis服務(wù)器中的key是這樣的
我們直接在cli中g(shù)et key發(fā)現(xiàn)
,在redisClent中發(fā)現(xiàn)是一堆看不懂的字符,解決這個(gè)問題就需要將key和value序列化,如果是xml配置的
我們直接注入官方給定的keySerializer,valueSerializer,hashKeySerializer即可,那么使用注解的話我們需要自己編寫RedisCacheConfig配置類
緩存主要有幾個(gè)要實(shí)現(xiàn)的類:
1、CacheManager緩存管理器;
2、具體操作實(shí)現(xiàn)類;
3、CacheManager工廠類(這個(gè)可以使用配置文件配置的進(jìn)行注入,也可以通過編碼的方式進(jìn)行實(shí)現(xiàn));
4、緩存key生產(chǎn)策略(當(dāng)然Spring自帶生成策略,但是在Redis客戶端進(jìn)行查看的話是系列化的key,對于我們?nèi)庋蹃碚f就是感覺是亂碼了,這里我們先使用自帶的緩存策略)。
/**
* 緩存管理(注解用)
* @author Administrator
*/
@Configuration
@EnableCaching//啟用緩存的意思
public class CacheConfig extends CachingConfigurerSupport{
/**
* 自定義key. 這個(gè)可以不用
* 此方法將會(huì)根據(jù)類名+方法名+所有參數(shù)的值生成唯一的一個(gè)key,即使@Cacheable中的value屬性一樣,key也會(huì)不一樣。
*/
/* @Override
public KeyGenerator keyGenerator() {
System.out.println("RedisCacheConfig.keyGenerator()");
returnnew KeyGenerator() {
@Override
public Object generate(Object o, Method method, Object... objects) {
// This will generate a unique key of the class name, the method name
//and all method parameters appended.
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName());
sb.append(method.getName());
for (Object obj : objects) {
sb.append(obj.toString());
}
System.out.println("keyGenerator=" + sb.toString());
returnsb.toString();
}
};
}
*/
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
/* //設(shè)置緩存過期時(shí)間
// rcm.setDefaultExpiration(60);//秒
//設(shè)置value的過期時(shí)間
Map<String,Long> map=new HashMap();
map.put("test",60L);
rcm.setExpires(map);*/
return rcm;
}
/**
* RedisTemplate配置
* @param factory
* @return
*/
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
//定義key序列化方式
//RedisSerializer<String> redisSerializer = new StringRedisSerializer();//Long類型會(huì)出現(xiàn)異常信息;需要我們上面的自定義key生成策略,一般沒必要
//定義value的序列化方式
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(redisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}當(dāng)數(shù)據(jù)存儲(chǔ)到redis中時(shí)候key和value都是通過spring serializer進(jìn)行序列化的,
RedisTemplate, spring默認(rèn)會(huì)使用jdk序列化,如果使用jdk序列化,model模型必須實(shí)現(xiàn)Serializable且要有一個(gè)空的構(gòu)造器,
StringRedisTemplate 默認(rèn)是使用StringSerializer,同時(shí)springData還提供了其他的序列化方式,如下:

GenericToStringSerializer:使用Spring轉(zhuǎn)換服務(wù)進(jìn)行序列化;
JacksonJsonRedisSerializer:使用Jackson 1,將對象序列化為JSON;
Jackson2JsonRedisSerializer:使用Jackson 2,將對象序列化為JSON;
JdkSerializationRedisSerializer:使用Java序列化;
OxmSerializer:使用Spring O/X映射的編排器和解排器(marshaler和unmarshaler)實(shí)現(xiàn)序列化,用于XML序列化;
StringRedisSerializer:序列化String類型的key和value。實(shí)際上是String和byte數(shù)組之間的轉(zhuǎn)換
感謝各位的閱讀!關(guān)于“springBoot如何集成redis的key”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
本文名稱:springBoot如何集成redis的key
分享網(wǎng)址:http://chinadenli.net/article30/gdpdso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、做網(wǎng)站、商城網(wǎng)站、建站公司、品牌網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)