您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關springBoot如何集成redis的key的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
使用的是maven工程
springBoot集成redis默認使用的是注解,在官方文檔中只需要2步;
1、在pom文件中引入即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
2、編寫一個CacheService接口,使用redisCacheServiceImpl實現這個接口
官網的原文是這樣的,也就是說,提供三個接口注入和你自己實現的其他實現類,默認是本地端口號為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默認提供的redis服務,但是這樣有幾個問題,1序列化,我們set到redis服務器中的key是這樣的
我們直接在cli中get key發現,在redisClent中發現是一堆看不懂的字符,解決這個問題就需要將key和value序列化,如果是xml配置的
我們直接注入官方給定的keySerializer,valueSerializer,hashKeySerializer即可,那么使用注解的話我們需要自己編寫RedisCacheConfig配置類
緩存主要有幾個要實現的類:
1、CacheManager緩存管理器;
2、具體操作實現類;
3、CacheManager工廠類(這個可以使用配置文件配置的進行注入,也可以通過編碼的方式進行實現);
4、緩存key生產策略(當然Spring自帶生成策略,但是在Redis客戶端進行查看的話是系列化的key,對于我們肉眼來說就是感覺是亂碼了,這里我們先使用自帶的緩存策略)。
/** * 緩存管理(注解用) * @author Administrator */ @Configuration @EnableCaching//啟用緩存的意思 public class CacheConfig extends CachingConfigurerSupport{ /** * 自定義key. 這個可以不用 * 此方法將會根據類名+方法名+所有參數的值生成唯一的一個key,即使@Cacheable中的value屬性一樣,key也會不一樣。 */ /* @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); /* //設置緩存過期時間 // rcm.setDefaultExpiration(60);//秒 //設置value的過期時間 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類型會出現異常信息;需要我們上面的自定義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; } }
當數據存儲到redis中時候key和value都是通過spring serializer進行序列化的,
RedisTemplate, spring默認會使用jdk序列化,如果使用jdk序列化,model模型必須實現Serializable且要有一個空的構造器,
StringRedisTemplate 默認是使用StringSerializer,同時springData還提供了其他的序列化方式,如下:
GenericToStringSerializer:使用Spring轉換服務進行序列化;
JacksonJsonRedisSerializer:使用Jackson 1,將對象序列化為JSON;
Jackson2JsonRedisSerializer:使用Jackson 2,將對象序列化為JSON;
JdkSerializationRedisSerializer:使用Java序列化;
OxmSerializer:使用Spring O/X映射的編排器和解排器(marshaler和unmarshaler)實現序列化,用于XML序列化;
StringRedisSerializer:序列化String類型的key和value。實際上是String和byte數組之間的轉換
感謝各位的閱讀!關于“springBoot如何集成redis的key”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。