Java開發之Redis


簡介

Redis 是完全開源免費的,遵守 BSD 協議,是一個高性能的 key - value 數據庫

Redis 與 其他 key - value 緩存產品均有以下特點:

  • Redis 支持數據持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。

  • Redis 不僅僅支持簡單的 key - value 類型的數據,同時還提供 list,set,zset,hash 等數據結構的存儲

  • Redis 支持數據的備份,即 master - slave 模式的數據備份

優點

  • 性能極高 – Redis 讀的速度是 110000 次 /s, 寫的速度是 81000 次 /s 。

  • 豐富的數據類型 - Redis 支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。

  • 原子性 - Redis 的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過 MULTI 和 EXEC 指令包起來。

  • 其他特性 - Redis 還支持 publish/subscribe 通知,key 過期等特性。

數據類型、數據結構

Redis 支持 5 種數據類型:string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合)

    支持 8 種數據結構:int、 raw、 embstr、 ziplist、 linkedlist、 hashtable 、intset、 skiplist

存儲類型和數據結構的關系

  Redis中的Key與Value在表層都是一個redisObject實例(5種存儲類型與8種數據結構的橋梁), 所以該結構有所謂的"類型", 即是ValueType. 對於每一種ValueType類型的redisObject;

  redisObject至少支持兩種不同的底層數據結構來實現. 以應對在不同的應用場景中, 如Redis的運行效率, 或內存占用等。

  redisObject 主要的字段有encoding(數據結構) type(存儲類型) *ptr(指向底層實現的數據結構指針) refcount(引用計數) lru(最后一次被命令程序訪問的時間)

  ps: 詳見Redis數據結構底層實現

使用場景

 

RedisTemplate

Redis的基礎信息及5種數據結構的概念大致介紹到這,下面將結合Spring封裝的RedisTemplate來對這5種數據結構進行講解

5種數據結構操作

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

對於這5種數據結構的具體操作可以通過查看源碼知曉(源碼解釋很詳細了),當然也可以參考《如何使用RedisTemplate訪問Redis數據結構》

序列化策略

在這里我需要解釋,也是開發中經常遇到的問題--序列化策略問題

  spring-data-redis中redisTemplate默認使用JDK的序列化策略,會出現兩個問題:

  • 使用redis-cli查看數據時,攜帶很多字符,不易查看
  • JDK Serializer太費資源

  當然序列化策略是可以自定義的,spring-data-redis的序列化類有下面這幾個:

  • GenericToStringSerializer: 可以將任何對象泛化為字符串並序列化
  • Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer實際上是一樣的
  • JacksonJsonRedisSerializer: 序列化object對象為json字符串
  • JdkSerializationRedisSerializer: 序列化java對象(被序列化的對象必須實現Serializable接口)
  • StringRedisSerializer: 簡單的字符串序列化
  • GenericToStringSerializer:類似StringRedisSerializer的字符串序列化
  • GenericJackson2JsonRedisSerializer:類似Jackson2JsonRedisSerializer,但使用時構造函數不用特定的類參考以上序列化,自定義序列化類;  推薦使用

  順便介紹一下 StringRedisTemplate吧,這貨是RedisTemplate的子類,默認采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。

  

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM