Redis介紹

一、簡介

Redis是互聯網技術領域使用最爲廣泛的存儲中間件,它是“Remote Dictionary Service”(遠程字典服務)的首字母縮寫

由意大利人Salvatore Sanfilippo(網名:Antirez)開發。

默認端口:6379

二、Redis能做什麼

1.緩存

2.分佈式鎖

三、安裝

體驗Redis需要使用Linux或者Mac環境,如果使用Windows操作環境,可以考慮使用虛擬機

Redis有三種安裝方式

1.使用Docker

2.通過Github

3.直接安裝apt-get install(Ubuntu)、yum insall(RedHat)或者brew install(Mac).

還可以通過網頁版的Web Redis直接體驗

四、五種數據類型

Redis所有的數據結構都是以唯一的key字符串作爲名稱,然後通過這個唯一的key值來獲取相應的value數據。不同的數據類型差異就在於value的結構不一樣。

1.字符串(string)

string是Redis最簡單的數據結構,它的內部表示就是一個字符數組。

字符串結構使用非常廣泛一個常見的用途就是緩存用戶信息,我們將用戶信息使用JSON序列化成字符串,然後將字符串塞進Redis來緩存。

Redis的字符串是動態字符串,是可以修改的字符串,內部結構的實現類似於C#中的ArrayList,內部爲當前字符串分配的實際空間一般高於實際字符串的長度。當字符串長度小於1MB時,擴容都是加倍現有的空間。如果字符串長度超過1MB,擴容時一次只會多擴1MB空間。需要注意的是字符串最大長度爲512MB

2.列表(list)

Redis的列表相當於C#語言裏的LinkedList,注意它是鏈表不是數組。這意味這list的插入和刪除操作非常快,但是索引定位很慢。列表中的每個元素都是使用雙向指針順序,串起來可以同時支持前向後向遍歷。

當列表彈出最後一個元素之後,該數據結構被自動刪除,內存被回收。

Redis的列表結構常用來做異步隊列使用。將需要延後處理的任務結構體系列化成字符串,塞進Redis的列表,另一個線程從這個列表中輪詢數據進行處理。

Redis底層存儲的不是一個簡單的linkedlist,而是稱之爲“快速鏈表”(quicklist)的一個結構。首先在列表元素較少的情‘況下,會使用一塊連續的內存存儲,這個結構是ziplist,即壓縮列表。它將所有的元素彼此緊挨着一起存儲,分配的是一塊連續的內存。當數據量比較多時纔會改成quicklist。

3.字典(hash)

Redis的字典相當於C#中的HashMap,它是無序字典,內部存儲了很多鍵值對。是數組+鏈表的二維結構。

字典的值只能是字符串。Redis爲了追求性能,不能堵塞服務,所以採用了漸進式rehash策略。

漸進式rehash會在rehash的同時,保留新舊兩個hash結構,查詢時會同時查詢兩個hash結構,然後再後續的定時任務以及hash操作指令中,循序漸進地將舊hash的內容一點點地遷移到新的hash結構中,當搬遷完成了,就會使用新的hash結構取而代之。

hash結構的存儲消耗要高於單個字符串。

4.集合(set)

Redis的集合相當於C#中的HashSet,它內部的鍵值對是無序的、唯一的,它內部實現相當於一個特殊的字典,字典中所有的value都是一個值NULL。

當集合中最後一個元素被移除後,數據結構被自動刪除,內存被回收

set結構可以用來存儲再某活動中中獎的用戶ID,因爲有去重功能,可以保證同一個用戶不會中將兩次。

5.有序集合(zset)

zset可能是Redis提供的最有特色的數據結構,它也是在面試中面試官最愛問的數據結構。一方面它是一個set,保證了內部value的唯一性,另一方面它可以給每一個value賦予一個score,代表這個value的排序權重。它的內部實現用的是一種叫做“跳躍列表”的數據結構。

 

-----------------------未完--------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章