redis系列1-入門

java知路發表於2020-11-12

Redis主要有哪些功能?

1.哨兵(Sentinel)和複製(Replication)

Redis伺服器毫無徵兆的罷工是個麻煩事,如何保證備份的機器是原始伺服器的完整備份呢?這時候就需要哨兵和複製。

Sentinel可以管理多個Redis伺服器,它提供了監控,提醒以及自動的故障轉移的功能,Replication則是負責讓一個Redis伺服器可以配備多個備份的伺服器。

Redis也是利用這兩個功能來保證Redis的高可用的

2.事務

很多情況下我們需要一次執行不止一個命令,而且需要其同時成功或者失敗。redis對事務的支援也是源自於這部分需求,即支援一次性按順序執行多個命令的能力,並保證其原子性。

3.LUA指令碼

在事務的基礎上,如果我們需要在服務端一次性的執行更復雜的操作(包含一些邏輯判斷),則lua就可以排上用場了

4.持久化

redis的持久化指的是redis會把記憶體的中的資料寫入到硬碟中,在redis重新啟動的時候載入這些資料,從而最大限度的降低快取丟失帶來的影響。

5.叢集(Cluster)

單臺伺服器資源的總是有上限的,CPU資源和IO資源我們可以通過主從複製,進行讀寫分離,把一部分CPU和IO的壓力轉移到從伺服器上,這也有點類似mysql資料庫的主從同步。

在Redis官方的分散式方案出來之前,有twemproxy和codis兩種方案,這兩個方案總體上來說都是依賴proxy來進行分散式的。


 

Redis支援哪幾種資料型別?

支援多種型別的資料結構

1.string:最基本的資料型別,二進位制安全的字串,最大512M。

使用場景

  • 快取功能:字串最經典的使用場景,Redis作為快取層,MySQL作為儲存層,絕大部分請求資料都是Redis中獲取,由於Redis具有支撐高併發特性,所以快取通常能起到加速讀寫和降低後端壓力的作用。

  • 計數器:許多運用都會使用Redis作為計數的基礎工具,他可以實現快速計數、查詢快取的功能,同時資料可以一步落地到其他的資料來源。
    例如:視訊播放數系統就是使用Redis作為視訊播放數計數的基礎元件。

  • 共享Session:出於負載均衡的考慮,分散式服務會將使用者資訊的訪問均衡到不同伺服器上,使用者重新整理一次訪問可能會需要重新登入,為避免這個問題可以用Redis將使用者Session集中管理,在這種模式下只要保證Redis的高可用和擴充套件性的,每次獲取使用者更新或查詢登入資訊都直接從Redis中集中獲取。

  • 限速:處於安全考慮,每次進行登入時讓使用者輸入手機驗證碼,為了簡訊介面不被頻繁訪問,會限制使用者每分鐘獲取驗證碼的頻率。

2.list:按照新增順序保持順序的字串列表。

 

常用命令

  • lpush、rpush、lpop、rpop、lrange等。

使用場景

  • 訊息佇列:Redis的lpush+brpop命令組合即可實現阻塞佇列,生產者客戶端是用lupsh從列表左側插入元素,多個消費者客戶端使用brpop命令阻塞時的“搶”列表尾部的元素,多個客戶端保證了消費的負載均衡和高可用性。

 

  •  

 

3.set:無序的字串集合,不存在重複的元素。

常用命令

  • sadd、spop、smembers、sunion等。

使用場景

  • 標籤(tag):集合型別比較典型的使用場景,如一個使用者對娛樂、體育比較感興趣,另一個可能對新聞感興趣,這些興趣就是標籤,有了這些資料就可以得到同一標籤的人,以及使用者的共同愛好的標籤,這些資料對於使用者體驗以及增強使用者粘度比較重要。
    注意:使用者和標籤的關係維護應該放在一個事物內執行,防止部分命令失敗造成資料不一致。

  •  

4.sorted set:已排序的字串集合。

常用命令

  • zadd、zrange、zrem、zcard等。

使用場景

  • 排行榜:例如視訊網站需要對使用者上傳的視訊做排行榜,榜單維護可能是多方面:按照時間、按照播放量、按照獲得的贊數等。

5.hash:key-value對的一種集合。

常用命令

  • hget、hset、hgetall等。

使用場景

  • 通常用來儲存一個使用者資訊的物件資料,例如記錄網站每個使用者個人主頁的訪問量:hincrby user:1:info pageviewcount。
    快取視訊的基本資訊(資料來源在Mysql中)。

相關文章