天天看點

分布式緩存技術Redis(一)認識與安裝

官方網站:https://redis.io/

一、認識

1.簡介
Redis是一個開源(BSD許可)的記憶體資料結構存儲,用作資料庫、緩存和消息代理。它支援諸如字元串、散列、清單、集、帶範圍查詢的排序集、位圖、hyperloglogs、帶半徑查詢和流的地理空間索引等資料結構。Redis具有内置的複制、Lua腳本、LRU清除、事務和不同級别的磁盤持久性,并通過Redis Sentinel和帶有Redis叢集的自動分區提供高可用性。
2、資料類型

String類型

String類型是redis中最基本的資料類型,它能存儲任何形式的字元串,包括二進制資料。你可以它存儲使用者的郵箱、json對象甚至圖檔。一個字元串鍵允許存儲的最大内容是512M。

内部資料結構

在redis内部,String類型通過int、SDS(Simple、Dynamic、String)作為結構存儲,int用來存儲整型資料,SDS用來存放位元組、字元串和浮點型資料。在C語言的标準字元串結構下進行了封裝,用來提升基操作的性能,同時也利用已有的C語言标準庫簡化實作邏輯。

list類型

list類型可以存儲一個有序的字元串清單,常用的操作是向清單兩端添加元素或則擷取清單的某一個片段的資料。清單内部使用雙向連結清單實作,是以向清單兩端添加元素的時間複雜度為O(1),擷取越接近兩端的元素就速度越快,這意味着即使是一個有幾千萬個元素的清單,擷取頭部或尾部的10條記錄也很快。

内部資料機構

在redis3.2之前,list類型的value對象内部采用linkedList或則zipList來實作,當list的元素個數和單個元素的長度比較小時,redis會采用zipList(壓縮清單)來減少記憶體占用,否則就會采用linkedList(雙向連結清單)。

在redis3.2之後,采用了一種叫做quickList的資料結構來存儲list,list的底層都由quickList實作。

這兩種方式都有優缺點,雙向連結清單的兩端進行push和pop操作,在插入節點上複雜度比較低,但是記憶體開銷比較大;zipList存儲在一段連續的記憶體上,是以存儲效率很高,但是插入和删除需要頻繁的申請和釋放記憶體。

quickLis仍然是一個雙向連結清單,隻是清單的每個節點都是一個zipList,其實就是linkedList和zipList的結合。quickList中每個節點zipList都能存儲做個資料元素。

hash類型

hash類型相當于一個map對象,整體看做一個對象,對象裡面每一個field-value都相當于對象的屬性和屬性值。

内部資料結構

hash類型提供兩種結構用于存儲,一種是hashTable、另一種是zipList,資料量小的時候用zipList,書籍量大的時候用hashTable。在redis中hashTable分為三層,分别是dictEntry、dictht、dict。
  1. dictEntry:管理一個key-value,同時保留同一個桶中相鄰元素的指針,用來維護hashTable的内部鍊。
  2. dictht:實作一個hashTable會使用一個buckets存放dictEntry的位址,一般情況下通過hash(key)&len得到的值就是buckets的索引,這個值決定了我們将此dictEntry節點放入buckets的哪個索引裡,這個buckets實際上就是我們所說的hashTable。
  3. dictht實際上就是hashTalbe的核心,但是隻有一個dictht還是不夠,比如rehash,周遊hash等操作。是以redis定義了一個叫dict的結構以支援字典的各種操作,當dictht需要擴容、縮容時,用來管理dicth的遷移。

set類型

set類型中每個元素都是不同的,也就是不能有重複資料,同時set類型中的資料是無序的。一個set類型鍵可以存儲2的32次方減一個。set類型和list類型的最大差別是有序性和唯一性。set類型的常用操作是set中加入或删除元素、判斷元素是否存在。由于set類型在redis中内部使用的值為空的hashTable(散清單),是以這些操作的時間複雜段都為O(1)。

内部資料結構

set在的底層資料結構以intSet或者hashTable存儲。當set中隻包含整型的元素時,采用intSet來存儲,否則采用hashTable存儲,但是對于set來說,該hashTable的值為NULL。通過key來存儲元素。

zset類型

zset稱作有序集合,即和set的差別就是多了有序性。在set類型的的基礎上zset為set中一個元素都關聯了一個分數,這使得我們不僅可以完後插入,删除和判斷元素是否存在等操作,還能獲的最高分數或最低的前N個元素,獲得指定分數範圍内的元素等與分數相關的操作,雖然zset中每個元素都是不同的,但是他們的分數可以相同。

内部資料結構

zset類型的資料結構就比較複雜一點,内部是以zipList或者skipList+hashTable來實作,這裡面最核心的一個結構就是skipList,也就是跳躍表。
3、可執行檔案
可執行檔案 功能
reidis-server redis伺服器
reidis-cli redis指令行用戶端
reidis-benchmark redis性能測試工具
reidis-check-aof AOF檔案修複工具
reidis-check-dump Rdb檔案修複工具
reidis-sentinel Sentinel伺服器

二、安裝

1.下載下傳安裝包

下載下傳位址:https://redis.io/download

2.上傳至伺服器并解壓

[[email protected] opt]# tar -zxvf redis-5.0.7.tar.gz 
           

3.編譯

[[email protected] opt]# cd redis-5.0.7
[[email protected] opt]# make
           

4.啟動服務

[[email protected] redis-5.0.7]# cd src
[[email protected] src]# ./redis-server ../redis.conf &
           

5.用戶端連接配接

[[email protected] src]# ./redis-cli
           

6.關閉服務

[[email protected] src]# ./redis-cli SHUTDOWN
           

繼續閱讀