Linux下Redis安裝使用,主從模式,哨兵模式與PHP擴展(PHP7適用)

一,軟件準備

#redis
wget http://download.redis.io/releases/redis-3.0.7.tar.gz

#phpredis 非php7使用 下載後文件名爲:phpredis-develop
wget https://codeload.github.com/phpredis/phpredis/zip/develop

#phpredis PHP7專屬 下載後文件名爲:phpredis-php7
wget https://codeload.github.com/phpredis/phpredis/zip/php7

 安裝phpredis前,務必已經安裝好autoconfphp

附:若是你有window(必須64位)安裝redis服務需求,或者wamp僅僅須要redis擴展。能夠到點連接下載redis64php_redis.dllhtml

 

二,安裝配置Redis

安裝方法很是簡單,make後,redis直接安裝在當前目錄:

tar xzf redis-3.0.7.tar.gz
cd redis-3.0.7
make

 

開啓redis前臺服務測試:git

src/redis-server

 

 顯示這個小盒子,前臺服務即爲成功開啓,佔用端口6379:github

                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.7 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 23909
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

 

按Ctrl+C退出redis前臺服務。redis

 

配置redis使用環境:

如今,咱們新建目錄 /usr/local/redis ,把./redis.conf,src/redis-server,src/redis-cli 三個文件複製到該目錄下sql

mkdir /usr/local/redis
cp redis.conf src/redis-server src/redis-cli /usr/local/redis/
cd /usr/local/redis

 

這三個文件:數據庫

redis.conf redis配置文件windows

redis-server redis服務端安全

redis-cli redis客戶端服務器

vi redis.conf修改配置,使redis服務在後臺運行:

#redis.conf#
daemonize yes

保存退出,./redis-server redis.conf 開啓redis後臺服務。

 

開啓密碼登入:

vi redis.conf修改配置

masterauth redis_password

 

重啓redis-server後登入redis-cli客戶端,輸入auth redis_password 方可登入管理。

 

若是你修改redis.conf中的任何配置,須要關閉redis-server進程後,再./redis-server redis.conf 從新開啓redis後臺服務。

 

./redis-cli 開啓redis客戶端,你能夠在其中輸入任意redis命令。*注意,若是你在redis.conf配置文件中設置了requirepass 密碼,那麼登陸客戶端後,輸入auth 密碼 才能夠繼續操做。

#redis-cli接收參數,不填寫參數默認鏈接127.0.0.1:6379
./redis-cli -h <host> -p <port>

 

Redis數據庫

存入redis數據前必須選擇數據庫,redis數據庫默認16個,下標0~15,默認使用第0個,存放數據前可使用select N選擇數據庫。

Redis數據庫在redis.conf中配置以下:

#redis.conf#
databases 16

 

你能夠根據實際須要更改數據庫個數,但通常不建議修改。

 

*持久化功能

redis(nosql產品)爲了內部數據的安全考慮,會把自己的數據以文件形式保存到硬盤中一份,在服務器重啓以後會自動把硬盤的數據恢復到內存(redis)的裏邊。

數據保存到硬盤的過程就稱爲「持久化」效果。

Redis快照持久化(snap shotting或稱RDB持久化)配置:

該持久化默認開啓,一次性把redis所有的數據保存一份存儲在硬盤中,若是數據很是多(10-20G)不適合頻繁進行該持久化操做。快照持久化會根據配置條件按期生成二進制備份文件,默認文件名dump.rdb。

redis.conf 中關於快照的配置:

#快照寫入文件名
dbfilename dump.rdb

#快照保存目錄 dir ./ #快照寫入頻率
save 900 1   #900 秒內若是超過 1 個 key 被修改,則發起快照保存
save 300 10   #300秒超過10個key被修改,發起快照
save 60 10000 #60秒超過10000個key被修改,發起快照
#以上三個備份頻率須要同時存在: #數據變化很是快的時候,就快點作備份(保證數據安全) #數據變化慢的時候,就慢點作備份(節省服務器資源)

 

手動發起快照持久化:

快照持久化默認開啓,並定時執行,你也能夠經過redis-cli客戶端使用bgsave命令手動發起。

./redis-cli bgsave

 

 

Redis AOF(append only file)持久化配置:

本質:把用戶執行的每一個「寫」指令(添加、修改、刪除)都備份到文件中,還原數據的時候就是執行具體寫指令而已。

AOF默認關閉,默認保存文件名append.aof,默認每秒執行一次,具體參數以下

#開啓/關閉AOF
appendonly yes

#保存文件名
appendfilename "appendonly.aof" #AOF保存頻率
# appendfsync always #每次收到寫命令就當即強制寫入磁盤,最慢的,可是保證徹底的持久化,不推薦使用
appendfsync everysec #每秒鐘強制寫入磁盤一次,在性能和持久化方面作了很好的折中,推薦
# appendfsync no     #徹底依賴 os,性能最好,持久化沒保證
#上面三種選項數據安全性及服務性能狀況 #數據最安全 服務器性能低 #數據較安全 服務器性能中等 #數據不安全 服務器性能高(優良)

 

AOF策略設置爲always或者everysec時,後臺處理進程(後臺保存或者AOF日誌重寫)會執行大量的I/O操做,在某些Linux配置中會阻止過長的fsync()請求。注意如今沒有任何修復,即便fsync在另一個線程進行處理。

爲了減緩這個問題,能夠設置下面這個參數no-appendfsync-on-rewrite:

#redis.conf#
no-appendfsync-on-rewrite yes

 

爲AOF備份文件作優化壓縮處理:

AOF記錄用戶的每一個操做,可是有些操做例如對某個key的多個同類型操做是能夠合併爲一個,從而作到壓縮文件大小的效果。例如屢次incr一個整型key,能夠直接合併爲set key N。

壓縮優化(AOF重寫)命令:

./redis-cli bgrewriteaof

AOF自動重寫:

當AOF文件增加到必定大小的時候Redis可以調用 BGREWRITEAOF 對日誌文件進行重寫,它是這樣工做的:Redis會記住上次進行些日誌後文件的大小(若是從開機以來還沒進行太重寫,那日子大小在開機的時候肯定)基礎大小會同如今的大小進行比較。若是如今的大小比基礎大小大制定的百分比,重寫功能將啓動,同時須要指定一個最小大小用於AOF重寫,這個用於阻止即便文件很小可是增加幅度很大也去重寫AOF文件的狀況,設置 percentage 爲0就關閉這個重寫特性。

#redis.conf#
auto-aof-rewrite-percentage 100 
auto-aof-rewrite-min-size 64mb 

 

 

手動持久化相關指令:

save (客戶端命令行內)前臺備份數據(快照保存)
bgsave 異步保存數據到磁盤(快照保存) lastsave 返回上次成功保存到磁盤的unix時間戳 shutdown 同步保存到服務器並關閉redis服務器 bgrewriteaof 當日志文件過長時優化AOF日誌文件存儲
redis 127.0.0.1:6379> SAVE #前臺備份數據
./redis-cli  bgrewriteaof
./redis-cli  bgsave
./redis-cli -h 127.0.0.1 -p 6379 bgsave   #手動發起快照

 

數據恢復

若是須要恢復數據,只需將備份文件 (dump.rdb) 移動到 redis 快照保存目錄 並啓動服務便可。要查看快照保存目錄,能夠查看redis.conf的dir配置。

 

 

*Redis主從模式

爲了下降每一個redis服務器的負載,能夠多設置幾個,並作主從模式,一個服務器負載「寫」(添加、修改、刪除)數據,其餘服務器負載「讀」數據,主服務器數據會「自動」同步給從服務器

 

Redis主從複製特色

1.master能夠有多個slave

2.除了多個slave鏈接到master外,slave也能夠鏈接到其餘slave,造成網狀結構

3.可讓slave作讀請求,master作寫操做 

 

配置主服務器: 

(假定局域網IP爲192.168.1.101)

#redis.conf#

#配置主服務器密碼
requirepass admin123

#自定義端口
port 6379

 配置從服務器:

#redis.conf#

#主服務器鏈接密碼
masterauth admin123

#自定義端口
port 6379
#設置成爲192.
168.1.101的從服務器 slaveof 192.168.1.101 6379 #取消從服務器只讀 slave-read-only no

開啓訪問端口(主從都須要開啓):

#開放6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
#重啓防火牆
firewall-cmd --reload

 

從新開啓redis-server 服務,則從服務器設置成功。

 

關於redis.conf 配置文件中bind和protected-mode的配置問題:

網上不少資料關於bind配置的描述都是‘指定redis只接收來自於該IP地址的請求,若是不進行設置,那麼將處理全部請求,在生產環境中最好設置該項’,實際上是一個錯誤的翻譯說法。若是按照這個說法去配置,百分百是connection refuse。

*這裏bind指的是interface,網絡接口,也就是服務器上的網卡,一個服務器能夠有一或多個網卡,設置這個bind是讓這臺服務器某一或多個網卡來接收請求,若是讓本機全部網卡都接收請求,則bind能夠直接註釋掉。

*Redis protected-mode 是3.2 以後加入的新特性, 是爲了禁止公網訪問redis cache,增強redis安全的。它啓用的條件,有兩個:
1) 沒有bind IP
2) 沒有設置訪問密碼
若是啓用了,則只可以經過lookback(迴路) ip(127.0.0.1)訪問Redis cache,若是從外網訪問,則會返回錯誤信息。

所以若是沒有設置bind,則protected-mode設置爲no,且開放6379訪問端口。

 

 

 

 

Redis推薦部署方式: 

 

 

在一臺服務器上部署多個Redis服務節點(啓動多端口,運行多實例)方式: 

假設你只有一臺電腦,但又想實現redis的主從部署,你考慮使用諸如6380,6381...等端口建立從節點,那麼問題來了,改怎麼設置呢?

 若是要在一臺服務器上運行多個redis實例,必須知足如下3點:

  1. 使用不一樣的端口
  2. 分別配置每一個實例(服務)的pid和log文件
  3. RDB和AOF持久化到每一個實例(服務)的rdb和aof文件中

每一個實例必須對應一個配置文件,配置文件按照上面3點設置:

cp redis.conf redis_6380.conf
vi redis_6380.conf
port 6380 #設置端口
pidfile /var/run/redis/redis_6380.pid #設置pid文件
logfile /var/log/redis/redis_6380.log #設置log文件
dbfilename dump_6380.rdb #設置RDB持久化文件
appendfilename "appendonly_6380.aof" #設置aof持久化文件

 

 其餘配置文件按此修改,至於從節點配置,回上面看。

啓動多個redis實例:

./redis-server redis_6380.conf
./redis-server redis_6381.conf

 

 配置好從節點後,./redis-cli 開啓客戶端,auth 密碼 登入,再輸入info命令,能夠查看redis主節點狀態,其中該主節點的從節點信息以下:

# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=1037,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=1037,lag=0
master_repl_offset:1037
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1036

 

 

 

*Redis哨兵模式

Sentinel哨兵模式是在主從模式架構上,增長對redis服務的監控,若是主服務器宕機,能夠將從服務器切換爲主服務,提升了redis服務的可用性。

哨兵的做用: 
一、監控redis進行狀態,包括master和slave 
二、當master 宕機機,能自動將slave切換成master

單個哨兵(圖片來源:http://blog.csdn.net/yingxiake/article/details/51671335)

多個哨兵(圖片來源:http://blog.csdn.net/yingxiake/article/details/51671335)

 

具體配置:(主192.168.1.109,從192.168.1.111)

1,複製redis安裝包中的sentinel.conf和src/redis-sentinel文件到/usr/local/redis/下。

2,配置sentinel.conf,這裏每臺redis服務器都設置一個哨兵,主從哨兵都使用一樣的配置

####下面2個配置要與redis.conf的配置同步,不然會出錯##
#bind x.x.x.x
#protected-mode yes|no

#開啓後臺運行,若是開啓運行,將看不到sentinel前臺運行時狀態實時信息
daemonize yes

#配置主服務sentinel monitor 主服務名(自定義) 服務ip 服務端口 當有n個哨兵認爲主服務宕機,才能啓動切換主從服務。由於我只有2臺服務器,所以此處設置爲1
sentinel monitor mymaster 192.168.1.109 6379 1 #主服務密碼
sentinel auth-pass mymaster redis_password

#間隔多少毫秒檢查主服務器宕機,這裏寫5秒
sentinel down-after-milliseconds mymaster 5000

#失效超時
#sentinel failover-timeout mymaster 90000

 

3,哨兵默認佔用26379端口,需開放:

#開放26379端口
firewall-cmd --zone=public --add-port=26379/tcp --permanent
#重啓防火牆
firewall-cmd --reload

 

 4,在已開啓主從服務器狀況下,啓用哨兵服務:

./redis-sentinel sentinel.conf --sentinel

 

 

在前臺模式運行下,會顯示以下:

./redis-sentinel sentinel.conf --sentinel
16123:X 24 Jun 10:53:35.288 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 16123
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

16123:X 24 Jun 10:53:35.292 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
16123:X 24 Jun 10:53:35.292 # Sentinel ID is 594f00cb60e77a52a47d9b3c520dd3f28c0b3d25
16123:X 24 Jun 10:53:35.292 # +monitor master mymaster 192.168.1.109 6379 quorum 1
16123:X 24 Jun 10:55:36.542 # +sdown sentinel ec86fc3abde024f5297131822d415abd09543c46 192.168.1.109 26379 @ mymaster 192.168.1.109 6379
16123:X 24 Jun 10:55:45.171 # -sdown sentinel ec86fc3abde024f5297131822d415abd09543c46 192.168.1.109 26379

 

 

kill掉主服務器,顯示以下信息

16123:X 24 Jun 10:56:15.641 # +failover-state-reconf-slaves master mymaster 192.168.1.109 6379
16123:X 24 Jun 10:56:15.702 # +failover-end master mymaster 192.168.1.109 6379
16123:X 24 Jun 10:56:15.703 # +switch-master mymaster 192.168.1.109 6379 192.168.1.111 6379
16123:X 24 Jun 10:56:15.703 * +slave slave 192.168.1.109:6379 192.168.1.109 6379 @ mymaster 192.168.1.111 6379

 

說明主服務已經切換到從服務。

 

 

 

*關於Redis詳細配置信息,能夠參考如下博客:

1Redis配置文件詳解 2Redis配置文件詳解 

 

三,安裝PHP擴展

方式1. 生成redis.so:

unzip phpredis-Version

cd phpredis-Version

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

將extension=redis.so加入到php.ini

重啓服務器,查看phpinfo();

若是是使用php-fpm,則須要重啓php-fpm:

ps aux|grep php-fpm #查看fpm進程號 kill -USR2 fpm進程號 #平滑重啓php-fpm

 

方式2.Yum安裝:

首先查看php版本信息 php -v

顯示如:

PHP 7.0.32 (cli) (built: Sep 15 2018 07:54:46) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

 

則能夠經過:

yum list | grep php70w*

 

來搜索php-redis擴展列表。

選擇並安裝:

yum -y install php70w-pecl-redis.x86_64

 

流程自動走完便可。

 

phpinfo():

顯示即OK。

 

 

四,測試使用

 新建test_redis.php

 1 <?php
 2 
 3 //鏈接本地Redis服務
 4 $redis=new Redis();
 5 $redis->connect('localhost','6379'); //$redis->auth('admin123');//若是設置了密碼,添加此行  6 //查看服務是否運行
 7 $redis->ping();
 8 
 9 //選擇數據庫
10 $redis->select(5);
11 
12 //設置數據
13 $redis->set('school','WuRuan');
14 //設置多個數據
15 $redis->mset(array('name'=>'jack','age'=>24,'height'=>'1.78'));
16 
17 //存儲數據到列表中
18 $redis->lpush("tutorial-list", "Redis");
19 $redis->lpush("tutorial-list", "Mongodb");
20 $redis->lpush("tutorial-list", "Mysql");
21 
22 //獲取存儲數據並輸出
23 echo $redis->get('school');
24 
25 echo '<br/>';
26 
27 $gets=$redis->mget(array('name','age','height'));
28 print_r($gets);
29 
30 $tl=$redis->lrange("tutorial-list", 0 ,5);
31 print_r($tl);

顯示:

 

*語法參考文檔,phpredis中文手冊

 

五(附),Redis性能測試及經常使用命令

Redis性能測試 

Redis還自帶一個redis-benchmark性能測試工具,咱們將其複製到/usr/local/redis目錄下

cp /usr/local/src/redis-3.0.7/src/redis-benchmark /usr/local/redis/

 

redis-benchmark操做命令以下:

redis-benchmark [option] [option value]

 

redis 性能測試工具可選參數以下所示:

實例

1,咱們同時執行10000個請求來檢測redis性能:

./redis-benchmark -n 10000
====== PING_INLINE ======
  10000 requests completed in 0.31 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

74.11% <= 1 milliseconds
95.93% <= 2 milliseconds
98.82% <= 3 milliseconds
99.30% <= 6 milliseconds
99.33% <= 7 milliseconds
99.40% <= 9 milliseconds
99.45% <= 10 milliseconds
99.51% <= 13 milliseconds
99.60% <= 14 milliseconds
99.64% <= 18 milliseconds
99.82% <= 29 milliseconds
100.00% <= 29 milliseconds
31746.03 requests per secon
....更多顯示參數不列舉

 

2,使用了多個參數來測試 redis 性能:

#如下實例中主機爲 127.0.0.1,端口號爲 6379,執行的命令爲 set,lpush,請求數爲 10000,經過 -q 參數讓結果只顯示每秒執行的請求數。
./redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q
SET: 38314.18 requests per second
LPUSH: 36363.64 requests per second

 

 

Redis經常使用命令

到這個博客看看redis命令http://blog.csdn.net/yhl27/article/details/9936189

 

*下面圖片出自傳播智客

 

 

 

*Redis教程:http://www.runoob.com/redis/redis-tutorial.htmlhttp://www.jb51.net/article/56448.htm

 

Redis推薦部署方式: 

相關文章
相關標籤/搜索