1. 程式人生 > >redis學習教程五《管道、分區》

redis學習教程五《管道、分區》

平衡 集合 過程 含義 local 方式 持久性 class 鍵值

redis學習教程五《管道、分區》


一:管道
Redis是一個TCP服務器,支持請求/響應協議。 在Redis中,請求通過以下步驟完成:
  • 客戶端向服務器發送查詢,並從套接字讀取,通常以阻塞的方式,用於服務器響應。
  • 服務器處理命令並將響應發送回客戶端。

管道的意義

管道的基本含義是,客戶端可以向服務器發送多個請求,而不必等待回復,並最終在一個步驟中讀取回復。

示例

要檢查Redis管道,只需啟動Redis實例,並在終端中鍵入以下命令。

(echo -en "PING\r\n SET tutorial redis\r\nGET tutorial\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379

+PONG
+OK
redis
:1
:2

:3

上面的例子中,我們將使用PING命令檢查Redis連接。這裏設置了一個名稱為tutorial的字符串,值為redis。 然後得到鍵值,並增加 visitor 數量三次。 在結果中,我們可以看到所有命令都提交到Redis一次,Redis在一個步驟中提供所有命令的輸出。

管道的好處

這種技術的好處是大大提高了協議性能。通過管道從連接到本地主機速度增加五倍,因特網連接的至少快一百倍。


二:分區

分區是將數據拆分為多個Redis實例的過程,因此每個實例只包含一部分鍵。

分區的優點

  • 它允許更大的數據庫,使用更多計算機的內存總和。如果沒有分區,則限制為單個計算機可以支持的內存量。
  • 它允許將計算能力擴展到多個核心和多個計算機,並將網絡帶寬擴展到多個計算機和網絡適配器。

分區的缺點

  • 通常不支持涉及多個鍵的操作。 例如,如果兩個集合存儲在映射到不同Redis實例的鍵中,則不能執行兩個集合之間的交集操作。
  • 不能使用涉及多個鍵的Redis事務。
  • 分區粒度是關鍵,因此不可能使用單個巨大的鍵(如非常大的排序集合)來分割數據集。
  • 使用分區時,數據處理更復雜。 例如,必須處理多個RDB/AOF文件,並獲得數據的備份,您需要聚合來自多個實例和主機的持久性文件。
  • 添加和刪除容量可能很復雜。 例如,Redis Cluster支持大多數透明的數據重新平衡,具有在運行時添加和刪除節點的能力。但是,其他系統(如客戶端分區和代理)不支持此功能。但可以使用一種叫作Presharding
    的技術來處理這方面的問題。

分區類型

Redis中有兩種類型的分區。假設有四個Redis實例:R0R1R2R3以許多代表用戶的鍵,如user:1user:2,…等等。

範圍分區

範圍分區通過將對象的範圍映射到特定的Redis實例來實現。假設在上面示例中,從ID 0到ID 10000的用戶將進入實例R0,而從ID 10001到ID 20000的用戶將進入實例R1,以此類推。

哈希分區

在這種類型的分區中,使用散列函數(例如,模函數)將鍵轉換成數字,然後將數據存儲在不同的Redis實例中。

redis學習教程五《管道、分區》