1. 程式人生 > >redis知識盤點【壹】_基礎知識

redis知識盤點【壹】_基礎知識

在csdn寫的第一篇技術分享文章,寫的不好請多擔待。希望我的文章儘量少廢話,乾貨多一些,讓諸位不浪費時間閱讀並能獲取些許收穫。

本文一部分內容整理自黃健巨集老師的《Redis設計與實現》和付磊、張益軍兩位老師合著的《Redis開發與運維》兩本書。下面是京東購書連結:


redis是時下非常流行的一款開源key/value資料庫,廣泛應用於網際網路專案。其優點如下:

1.效能極高,官方資料Redis能讀的速度是110000次/s,寫的速度是81000次/s;

2.採用單執行緒模型,Redis所有操作都是原子性的,同時支援對幾個操作全並後的原子性執行;

3.redis不需要依賴作業系統中的類庫(memcached需要依賴libevent這樣的系統類庫)。

和ehcache比較的話,redis是用C實現的,而ehcache是用java。此外redis是獨立於應用部署的,而ehcache是和應用共用一個JVM。ehcache比較適合用作單機系統的快取。

和memcache比較的話,二者都是用C實現的。memcache的快取資料只支援字串格式,而redis支援多種資料結構。memcache支援多執行緒讀寫,而redis是單執行緒。memcache不支援持久化,而redis支援。memcache做叢集時資料沒有複製和同步機制,而redis支援配置叢集主從複製。memcache並不真正支援分散式,其資料分片的實現需要開發者藉助一致性雜湊演算法自行實現,而redis官方已經實現了分散式快取。

redis目前已釋出4.0版。小數點前數字為主版本號,小數點後一位數字為副版本號。奇數的副版本號用來表示非標準版本,而偶數的為正式版本。我們在生產環境上一定要使用偶數版本的redis。

基本redis每個穩定版本都會發佈一個執行穩定的新功能。比如redis 2.8版本推出了sentinel(哨兵)和釋出訂閱等功能;3.0版本推出了redis cluster(redis叢集,解決分散式快取問題)功能;3.2版本推出了GEO(地理資訊定位)功能...redis在2.8版本程式碼大約2W行,而3.0版本時已突破5W行了。

redis的主要應用場景如下
1.快取,並提供鍵值過期時間;
2.排行榜系統,可使用列表或有序集合實現;
3.計數器系統,天然支援計數功能;
4.社交網路,贊/踩,粉絲,共同好友/喜好,推送,下拉重新整理;
5.訊息佇列系統,提供了釋出訂閱和阻塞佇列功能

redis主要支援五種資料結構,分別為字串(String)、雜湊(Map)、列表(list)、集合(sets) 和 有序集合(sorted sets)。在2.8版本中新增了HyperLogLog結構,可用於做基數統計,HyperLogLog的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的、並且是很小的。

redis同時支援對快取資料的持久化,有RDB和AOF兩種方式。

在日常開發中,雖然redis的讀寫速度比關係型資料庫快很多,但是不建議把所有資料都快取在redis內,因為這樣會影響其他熱點資料的讀取效率。建議先在業務上進行梳理,把真正的熱點資料快取在redis。

給開發者的建議:永遠不要把redis當作黑盒使用,不單純停留在開發上,適當理解下redis的原理和實現是很有必要的。至少了解在成千上萬的key中執行keys *命令是很愚蠢的行為。

後面系列的文章會將上面提到的知識進行展開討論,下篇文章介紹一下redis主要五種資料結構的實現先。