最簡大資料Redis-3.2.8

wolearn發表於2017-04-27

0.0 前言

NoSQL,泛指非關係型資料庫。不是NO-SQL,而是NOT-ONLY-SQL,不要把NoSQL資料庫和關係型資料庫對立起來,二者有不同的應用場景,目前來看NoSQL想完全取代關係型資料庫不太可能。打算討論三種NoSQL資料庫。

  • 鍵值類 - Redis
  • 列簇類 - HBase
  • 文件類 - MongoDB

Redis作為NoSQL資料庫的第一篇吧。Redis是基於記憶體的,訪問速度快,常被用做快取層,減輕資料庫的訪問壓力。在記憶體不可變的情況下,利用LRU演算法和鍵過期的機制提高快取的命中率。

1.0 簡單安裝

官方網站是第一生產力。Redis一般雙數版本為穩定版。目前最新版本為3.2.8。

redis.io

安裝編譯工具

 yum -y install gcc automake autoconf libtool make複製程式碼

下載,解壓,編譯

$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz
$ tar xzf redis-3.2.8.tar.gz
$ cd redis-3.2.8
$ make複製程式碼

先啟動Redis服務

$ src/redis-server複製程式碼

再啟動Redis shell客戶端

$ src/redis-cli複製程式碼

這樣已經可以在客戶端中操作Redis了。Redis客戶的提示功能真的挺好用,當然如果僅僅是學習Redis的操作命令,可以使用線上的互動工具,點開即用。

try.redis.io/

2.0 數值型別及操作

Redis支援複雜的資料結構。

  • Binary-safe strings,二進位制安全的字串
  • Lists,基於連結串列的有序,可重複的集合
  • Sets,無序,不可重複的集合
  • Sorted sets,類似Sets但是每個元素都關聯一個浮點型別的數值,稱為score。元素總是按照score的值進行排序。
  • Hashes,關聯的鍵值對,且鍵值都是strings。
  • Bit arrays,可以使用特殊的命令來處理字串值,如位陣列:可以設定和清除各個位。
  • HyperLogLogs,這是一個概率資料結構,用於估計集合的基數。

將官網的樣例都敲一次,對資料的操作基本就瞭解了。常用操作不多,一個多小時就可以完成。

redis.io/topics/data…

Redis支援多種語言客戶端

最簡大資料Redis-3.2.8

Java型別客戶端地址

github.com/xetorthio/j…

3.0 持久化

Redis提供了2種持久化的方案RDB和AOF。兩者簡單的區別來講就是,RDB存的是資料的,載體是一個緊湊的檔案。而AOF存的是 Redis的操作命令。

3.1 RDB

RDB通過快照,可以完美備份資料。通過備份和轉移資料庫檔案,可以輕鬆實現容災和版本恢復。但是RDB生成快照有一定的時間間隔,當異常發生的時候,可能丟失一部分未備份的資料,這對資料的完整性要求很高的任務不太適用。而且讀寫資料庫要做大量的IO操作,這會一定程度的影響伺服器的效能。

3.2 AOF

AOF的同步Redis命令有三種策略:不同步,每秒同步,每次鍵入命令後立即同步。而且當AOF檔案過大的時候,AOF檔案會觸發重寫的操作,他會優化命令從而減小檔案的體積。而且在不小心刪除了整個庫,而且RDB了同步了該操作的時候,可以利用AOF做資料的恢復。但是儲存同樣的資料時AOF檔案通常會比RDB檔案更大。

3.3 持久化策略的選擇

你可以同時使用2中持久化的策略,也可以只使用其中的一種策略。當使用RDB時,使用者可以主動使用SAVE和BGSAVE命令來發起儲存,SAVE是同步的,而BGSAVE是非同步的。當然也可以通過修改配置檔案來設定RDB的儲存策略

save 60 1000複製程式碼

60秒檢測一次,如果進行了1000以上的變更,則執行儲存。你可以同時配置多條儲存策略

save 60 1000
save 80 100
save 1000 5複製程式碼

當其中一條條件生效,即可觸發儲存的操作。通過下面配置,啟動AOF

appendonly yes複製程式碼

4.0 主從

Redis也使用Master/Slave模型,這裡的主從更多是基於讀寫分離,一般Master伺服器只是進行寫操作,而Slave伺服器則是預設設定成只讀。只需要在配置中新增

slaveof 192.168.1.1 6379複製程式碼

地址為Master節點的IP。當然,也可以直接通過SLAVEOF命令進行操作。

5.0 Sentinal(哨兵)機制

哨兵是保證Redis高可用的一種機制。在Redis叢集的Master節點發生故障導致叢集不可用時,需求人工介入,從原來的Slave節點中挑選一個作為新的Master節點,並將之前的Slave節點指向新的Master節點。顯然這種人工干預的過程不能及時的做故障的恢復,而且操作過程比較繁瑣。哨兵機制正是為了解決這個問題的。

Sentinal具備分散式的特點,一般每個節點啟動一個哨兵,而且哨兵之間也相互通訊。執行Sentinel的方式

redis-sentinel /path/to/sentinel.conf複製程式碼

或者在啟動服務的時候就啟動

redis-server /path/to/sentinel.conf --sentinel複製程式碼

sentinel.conf的最小配置

port 5000
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1複製程式碼

配置含義

  • 哨兵例項執行的埠
  • 指出Master節點的IP地址,和Master節點Down機時需要幾個哨兵確認狀態
  • Master節點多久不可用才能被確認為Down機
  • 多久檢查一次Master節點是否從故障中恢復
  • 當故障發生後,有多少個從伺服器可以對主伺服器進行同步

6.0 叢集

6.1 簡述

Redis叢集解決了單個節點儲存效能瓶頸,使得多個Redis節點之間可以完成資料的共享。同時,在單個資料節點不可用的時候,可以由其他的節點繼續提供服務。Redis叢集不存在中心節點,節點之間互聯構成叢集,但是這種結構也導致節點的網路IO消耗。Redis叢集中互聯的是Master節點,每個Master節點可以有自己的一到多個Slave節點完成主從結構。叢集不需要單獨設定sentinel例項,叢集中的節點可以充當哨兵的角色。

6.2 使用Redis叢集

最小配置

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes複製程式碼

其中port是要修改的,其他值可以不變。Redis叢集構建至少需要三個Master節點,再來三個Slave節點。構建一個新的目錄,並建立六個以埠號為名字的子目錄, 稍後我們在將每個目錄中執行一個 Redis 例項:

mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005複製程式碼

在資料夾 7000 至 7005 中, 各建立一個 redis.conf 檔案, 檔案的內容可以使用上面的示例配置檔案, 但記得將配置中的埠號從 7000 改為與資料夾名字相同的號碼。分別用上面的6個配置,啟動6個Redis的服務

cd 7000
../redis-server ./redis.conf複製程式碼

用src下的叢集命令列工具 redis-trib構建叢集,這是一個Ruby程式

./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005複製程式碼

啟動完成後可以用客戶端工具連線上叢集試試

$ redis-cli -c -p 7000複製程式碼

後記

只梳理了的知識點的主線,其他細節可以遇到補全。有用就點喜歡或打賞吧,也可以關注我的公眾號,後續持續更新"最簡大資料"系列。

最簡大資料Redis-3.2.8

最簡大資料Redis-3.2.8
公眾號

最簡大資料Redis-3.2.8
加群

相關文章