分布式快取技術Redis(一)認識與安裝

2021-10-03 02:45:09 字數 3257 閱讀 6441

官方**:

1.簡介
redis是乙個開源(bsd許可)的記憶體資料結構儲存,用作資料庫、快取和訊息**。它支援諸如字串、雜湊、列表、集、帶範圍查詢的排序集、位圖、hyperloglogs、帶半徑查詢和流的地理空間索引等資料結構。redis具有內建的複製、lua指令碼、lru清除、事務和不同級別的磁碟永續性,並通過redis sentinel和帶有redis集群的自動分割槽提供高可用性。

2、資料型別

string型別

string型別是redis中最基本的資料型別,它能儲存任何形式的字串,包括二進位制資料。你可以它儲存使用者的郵箱、json物件甚至。乙個字串鍵允許儲存的最大內容是512m。

內部資料結構

在redis內部,string型別通過int、sds(******、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。

dictentry:管理乙個key-value,同時保留同乙個桶中相鄰元素的指標,用來維護hashtable的內部鏈。

dictht:實現乙個hashtable會使用乙個buckets存放dictentry的位址,一般情況下通過hash(key)&len得到的值就是buckets的索引,這個值決定了我們將此dictentry節點放入buckets的哪個索引裡,這個buckets實際上就是我們所說的hashtable。

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伺服器

2.上傳至伺服器並解壓

[root@hmq opt]# tar -zxvf redis-5.0.7.tar.gz
3.編譯
[root@hmq opt]# cd redis-5.0.7

[root@hmq opt]# make

4.啟動服務
[root@hmq redis-5.0.7]# cd src

[root@hmq src]# ./redis-server ../redis.conf &

5.客戶端連線
[root@hmq src]# ./redis-cli
6.關閉服務
[root@hmq src]# ./redis-cli shutdown

Redis 分布式快取

1 官網 3 菜鳥教程 4 redis的集群教程 5 史上最全redis高可用技術解決方案大全 一 redis的特點?redis 本質上是乙個 key value 型別的記憶體資料庫,很像 memcached,整個 資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料 flush 到硬...

Redis分布式快取簡介

一 什麼是redis redis是乙個開源的,基於記憶體儲存的資料伺服器。可以用來充當資料庫,快取記憶體和訊息佇列 redis支援很多的資料結構,包括字串 雜湊表 列表 集合 有序集合,位圖 hyperloglogs等。redis突出的乙個特性是效能容量高。儲存在redis中的資料是持久化的,斷電或...

Redis分布式快取實現

定義 特點快取解決的問題 快取能提高效率,那專案中所有書庫加入快取是否更好?本地快取與分布式快取的區別?mybatis中應用級快取 二級快取 sqlsessionfactory級別快取 所有會話共享 如何開啟二級快取 本地快取 檢視cache標籤快取實現 自定義rediscache實現 如何解決關聯...