spring-boot-starter-redis學習筆記

來源:互聯網
上載者:User

個人筆記僅供參考。

1、spring data redis推薦jedis,jedis是redis的java用戶端。

<dependency>      <groupId>org.springframework.boot</groupId><!-- 會附帶引進jedis的包 -->      <artifactId>spring-boot-starter-redis</artifactId>  </dependency>


2、 RedisConnectionFactory

spring data redis串連到redis通過RedisConnectionFactory來獲得有效RedisConnection。RedisConnection負責建立和處理和redis後端通訊。RedisConnection提供getNativeconnection返回用來通訊的底層connection。


3、RedisTemplate

spring data redis支援低層次的通過連接器connector串連到Redis,支援高層次的友好的模板類RedisTemplate,RedisTemplate是建立在低層級的connection基礎之上。RedisConnection接收或返回位元組數組需要自身處理串連,比如關閉串連,而RedisTemplate負責處理序列化和反序列化,並且管理對串連進行管理。RedisTemplate提供操作視圖,比如(Bound)ValueOperations,(Bound)ListOperations,(Bound)SetOperations,(Bound)ZSetOperations,(Bound)HashOperations。RedisTemplate是安全執行緒的,能夠用於多個執行個體中。

RedisTemplate預設選擇java-based序列化,也可以切換為其它的序列化方式,或者設定enabledDefaultSerializer為false或者設定序列化器為null,則RedisTemplate用raw byte arrays表示資料。其它序列化方式有protocol buffer,JSON,帶有遞迴的二進位位元組流的方式等。

StringRedisTemplate是RedisTemplate的唯一子類。

RedisTemplate預設定義了兩個常用的序列化類別

private RedisSerializer<?> defaultSerializer = newJdkSerializationRedisSerializer(); 以及   private RedisSerializer<String> stringSerializer = newStringRedisSerializer();

4、序列化

在未配置序列化方式前,採用

redisTemplate.opsForValue().set(key, value);
得到的key和value將都是被序列化後的數字或符號,如
 
 

解決這個問題就需要將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;    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.