redis單節點集群


一、概念

  redis是一種支持Key-Value等多種數據結構的存儲系統。可用於緩存、事件發布或訂閱、高速隊列等場景。該數據庫使用ANSI C語言編寫,支持網絡,提供字符串、哈希、列表、隊列、集合結構直接存取,基於內存,可持久化。


二、redis的應用場景有哪些
  1、會話緩存(最常用)
  2、消息隊列,比如支付
  3、活動排行榜或計數
  4、發布、訂閱消息(消息通知)
  5、商品列表、評論列表等

1.redis安裝:

1 # wget http://download.redis.io/releases/redis-4.0.6.tar.gz
2 # yum install gcc  
3 # make MALLOC=libc
4 # cd src && make install
5 # ./redis-server

 

2.修改配置文件:

1 # vim ../redis.conf
2     daemonize yes         #以后台進程方式啟動
3     #bind 127.0.0.1        #允許本地連接
4     requirepass redhat     #設置連接密碼

 

3.后台啟動:

1 # ./redis-server /root/redis-4.0.6/redis.conf

 

4.登錄:

1 # redis-cli -h 127.0.0.1 -p 6379

 

   認證:

1 auth redhat

 

5.redis數據類型:
字符串(string):set bp 123 #設置字符串類型bp 值為122

1  hget ID name        #獲取散列名ID的name對應的值
2  hgetall ID          #獲取散列ID的全部值
3  hmset age name linux kali contos debian 30      #一次性設置散列age的值
4  hdel ood name        #刪除某個散列的值
5  hexists age kali      #判斷某個散列的值是否存在,0不存在

 

散列(hash):hset ID(散列名) name(鍵) passwd(值) #設置散列名ID存放的值對

1  hget ID name       #獲取散列名ID的name對應的值
2  hgetall ID          #獲取散列ID的全部值
3  hmset age name linux kali contos debian 30      #一次性設置散列age的值
4  hdel ood name       #刪除某個散列的值
5  hexists age kali     #判斷某個散列的值是否存在,0不存在



列表(list):lpush test 1   #列表名為test,從左邊加入1,編號為最后一位數

1  rpush test -1      #列表名為test,從右邊加入-1,編號為0
2  llen test        #列表長度
3  lpop test        #左邊出去一個數
4  rpop test        #右邊出去一個數
5  lrange test 2 3    #列表下標從0開始計算,顯示第三個數和第四個數
6  lrem test 1 3     #左數刪除1個3
7  lindex test 2     #獲取2的下標
8  ltrim test 0 2     #test取截取(刪除)出來的下標0到2對應的值

 

 

集合(set):sadd linux a b c d e a b #增加linux集合,集合內容為a b c d e ,不能出現相同數據

1  srem linux d e        #刪除linux集合中的d e元素
2  smembers linux         #查看linux的元素
3  sismember linux d       #查看d是否是集合linux的元素,否
4  sdiff linux centos       #兩個集合取差集,(順序不同,結果不同)
5  sinter linux centos     #取交集
6  sunion linux centos     #取並集



有序集合(zset):zadd test1 10(值) a(鍵) #增加test1有序集合,分數為10 等級為a

1  zrem test1 b              #移除test1的等級b的值
2  zscore test1 a            #查看test1的等級a的值
3  zrange test1 0 1          #查看test1第一個和第二個的值
4  zrangebyscore test1 5 10     #根據分數查看對應的的等級

 


三、redis持久化
1.RDB持久化
  RDB 持久化可以在指定的時間間隔內生成數據集的時間點快照,將Redis內存中的數據,完整的生成一個快照,以二進制格式文件(后綴RDB)保存在硬盤當中。當需要進行恢復時,再從硬盤加載到內存中。RDB 可以最大化 Redis 的性能:父進程在保存 RDB 文件時唯一要做的就是 fork 出一個子進程,然后這個子進程就會處理接下來的所有保存工作,父進程無須執行任何磁盤 I/O 操作。RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。但是一旦發生故障,可能會丟失幾分鍾的數據。

觸發:
1.配置文件:

1 #vim redis.conf    
2     save 900 1         // 900內,有1條寫入,則產生快照
3     save 300 1000      // 如果300秒內有1000次寫入,則產生快照
4     save 60 10000      // 如果60秒內有10000次寫入,則產生快照
5     stop-writes-on-bgsave-error yes   // 后台備份進程出錯時,主進程停不停止寫入? 主進程不停止 容易造成數據不一致
6     rdbcompression yes   // 導出的rdb文件是否壓縮,如果rdb的大小很大的話建議這么做
7     Rdbchecksum yes     // 導入rbd恢復時數據時,要不要檢驗rdb的完整性 驗證版本是不是一致 
8     dbfilename dump.rdb   //導出來的rdb文件名
9     dir ./           //rdb的放置路徑

 

2.手動:save(同步)
bgsave(異步)

2.AOF持久化
  AOF 文件有序地保存了對數據庫執行的所有寫入操作, 這些寫入操作以 Redis 協議的格式保存, 因此 AOF 文件的內容非常容易被人讀懂,AOF 文件是一個只進行追加操作的日志文件


觸發:

1 #vim redis.conf    
2     appendonly no       // 是否打開aof日志功能,aof跟rdb都打開的情況下 
3     appendfsync always     // 每1個命令,都立即同步到aof.安全,速度慢
4     appendfsync everysec   // 折衷方案,每秒寫1次
5     appendfsync no       // 寫入工作交給操作系統,由操作系統判斷緩沖區大小,統一寫入到aof. 同步頻率低,速度快,
6     no-appendfsync-on-rewrite yes:    // 正在導出rdb快照的過程中,要不要停止同步aof
7     auto-aof-rewrite-percentage 100   //aof文件大小比起上次重寫時的大小,增長率100%時,重寫缺點剛開始的時候重復重寫多次
8     auto-aof-rewrite-min-size 64mb    //aof文件,至少超過64M時,重寫

 


3.測試使用 redis-benchmark -n 10000 ::表示 執行請求10000次

四,單節點集群

1 1.創建集群目錄:# mkdir /usr/local/redis-cluster
2 
3         # wget http://download.redis.io/releases/redis-3.0.6.tar.gz
4 2.解壓6次到該目錄:# tar zxvf redis-3.0.6.tar.gz -C /usr/local/redis-cluster
5 3.編譯安裝:# make MALLOC=libc

 

 

1 # cd src && make install

 

 

1 4.修改綁定IP:# sed -i 's/bind 127.0.0.1/bind 192.168.11.199/g' redis.conf

 

 

1 5.修改端口號7001-7006:# sed -i 's/port 6379/port 7001/g' redis-1/redis.conf

 

 

6.開啟后台啟動模式:

1 # sed -i 's/daemonize no/daemonize yes/g' redis.conf

 

 

 7.復制redis配置文件重命名為redis-2...6.conf,修改端口號7002-7006

 

8..安裝ruby環境:

1 # yum -y install ruby
2 # yum -y install rubygems

 


9.安裝執行ruby腳本redis-trib.rb執行所依賴的gem包:

# wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
# gem install -l ./redis-3.2.1.gem

 

 

10.編寫腳本啟動所有實例

 1 #!/bin/bash
 2 set -e
 3 redis1=/usr/local/redis-cluster/redis-4.0.6/redis-1.conf
 4 redis2=/usr/local/redis-cluster/redis-4.0.6/redis-2.conf
 5 redis3=/usr/local/redis-cluster/redis-4.0.6/redis-3.conf
 6 redis4=/usr/local/redis-cluster/redis-4.0.6/redis-4.conf
 7 redis5=/usr/local/redis-cluster/redis-4.0.6/redis-5.conf
 8 redis6=/usr/local/redis-cluster/redis-4.0.6/redis-6.conf
 9 
10 echo "start redis-1..."
11 {
12 /usr/local/bin/redis-server $redis1 >/dev/null 2>&1
13 } || {
14 echo "start error"
15 exit 1
16 }
17 
18 
19 echo "start redis-2..."
20 {
21 /usr/local/bin/redis-server $redis2 >/dev/null 2>&1
22 } || {
23 echo "start error"
24 exit 1
25 }
26 
27 echo "start redis-3..."
28 {
29 /usr/local/bin/redis-server $redis3 >/dev/null 2>&1
30 } || {
31 echo "start error"
32 exit 1
33 }
34 
35 echo "start redis-4..."
36 {
37 /usr/local/bin/redis-server $redis4 >/dev/null 2>&1
38 } || {
39 echo "start error"
40 exit 1
41 }
42 
43 echo "start redis-5..."
44 {
45 /usr/local/bin/redis-server $redis5 >/dev/null 2>&1
46 } || {
47 echo "start error"
48 exit 1
49 }
50 
51 echo "start redis-6..."
52 {
53 /usr/local/bin/redis-server $redis6 >/dev/null 2>&1
54 } || {
55 echo "start error"
56 exit 1
57 }

 

10.啟動

 

 

11.復制集群腳本命令

1 # cp src/redis-trib.rb .

 

 

12.開啟每個配置文件的集群功能

1 # sed -i 's/# cluster-enabled yes/cluster-enabled yes/g' redis-2.conf

 

 

 13.創建集群

1 # cd src
2 # ./redis-trib.rb create --replicas 1 192.168.11.199:7001 192.168.11.199:7002 192.168.11.199:7003 192.168.11.199:7004 192.168.11.199:7005 192.168.11.199:7006

 

 

14.連接集群,自動切換集群節點

1 # redis-cli -h 192.168.11.199 -p 7001 -c

 

 

15.檢查集群狀態

1 # ./redis-trib.rb check 192.168.11.199:7001

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM