CentOS7下yum安裝Redis


(1).Redis概述

  Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日志型、Key-Value(鍵值型)數據庫(非關系型數據庫),並提供多種語言的API。

  Redis是一個高性能的Key-Value數據庫。它的出現很大程度補償來Memcached這類Key-Value型存儲的不足,在部分場合下可以對關系型數據庫起到很好的補充作用。它提供來Java、C/C++、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等客戶端,使用方便。

  Redis支持主從同步,Redis能夠借助於Sentinel(哨兵,Redis自帶的)工具來監控主從節點,當主節點發生故障時,會自己提升另外一個從節點成為新的主節點。

 1)支持的數據類型

  和Memcached類似,但它支持存儲的Value類型相對更多,包括String(字符串)、List(列表)、Sets(集合)、Sorted Sets(有序集合)和Hash(哈希類型、關聯數組)、Bitmaps(位圖)和HyperLoglog

 2)性能

  100萬較小的鍵存儲字符串,大概消耗100M內存;

  由於Redis是單線程,如果服務器主機上有多個CPU,只有一個能夠使用,但並不意味着CPU會成為瓶頸,因為Redis是一個比較簡單的K-V數據存儲,CPU通常不會成為瓶頸的;

  在常見的linux服務器上,500K(50萬)的並發,只需要一秒鍾處理,如果主機硬件較好的情況下,每秒鍾可以達到上百萬的並發.

 3)Redis與Memcache對比

  Memcache只能使用內存來緩存對象。而Redis除了可以使用內存來緩存對像,還可以周期性的將數據保存到磁盤上,對數據進行永久存儲。當服務器突然斷電或死機后, redis基於磁盤中的數據進行恢復;

  Redis是單線程服務器,只有一個線程來響應所有的請求。Memcache是多線程的;

  Redis支持更多的數據類型。

(2).安裝

  yum安裝redis時,建議使用Remi repository源。因為Remi源提供了目前最新版本的Redis,可以通該源使用YUM安裝目前最新版本的Redis。另外還提供了PHP和MySQL的最新yum源,以及相關服務程序。

 1)Remi repository源依賴於epel源,因此需要先安裝epel源

[root@youxi1 ~]# yum -y install epel-release

 2)安裝Remi repository源

[root@youxi1 ~]# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
[root@youxi1 ~]# ls /etc/yum.repos.d/  //下載完成后會出現許多remi的yum源,這里要用到的是remi.repo這個源
CentOS-Base.repo CentOS-Sources.repo remi-glpi92.repo remi-php70.repo remi-safe.repo
CentOS-CR.repo CentOS-Vault.repo remi-glpi93.repo remi-php71.repo
CentOS-Debuginfo.repo epel.repo remi-glpi94.repo remi-php72.repo
CentOS-fasttrack.repo epel-testing.repo remi-modular.repo remi-php73.repo
CentOS-Media.repo remi-glpi91.repo remi-php54.repo remi.repo

 3)使用指定的yum源安裝Redis

[root@youxi1 ~]# yum --enablerepo=remi install -y redis  //--enablerepo指定yum源
[root@youxi1 ~]# redis-cli --version  //安裝完成后使用命令查看一下版本
redis-cli 5.0.5

  注意:remi源安裝完成后,默認為不啟動,在需求使用remi repository源安裝程序時,需求--enablerepo=remi選項指定使用remi repository源是可以被使用的,然后進行安裝。

 4)啟動Redis並設置開機自啟

[root@youxi1 ~]# systemctl start redis
[root@youxi1 ~]# systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.

  注意:Redis的端口號是6379

(3).配置文件信息

  Linux下,Redis的配置文件存放在/etc/目錄下的redis.conf。以下列出來可能會用到的參數:

//第69行,Redis監聽的地址
bind 127.0.0.1
//第88行,安全模式,是否禁止外網訪問Redis,yes表示啟用,只能通過本地訪問
protected-mode yes
//第92行,監聽的端口號
port 6379
/*第101行,指定tcp-backlog長度。tcp-backlog是一個等待隊列。
* 當大量請求需要Redis處理時,需要等待的請求隊列會通過backlog來緩存。
* backlog的數量決定來可以緩存的隊列數
*/
tcp-backlog 511
//第109行,指定使用sock文件通信以及sock文件位置。如果服務端和客戶端在同一台主機上,建議打開。sock方式通信可以直接在內存中交換,不經過TCP/IP協議棧進行封裝、拆封
# unixsocket /tmp/redis.sock
//第110行,定義sock文件的權限
# unixsocketperm 700
//第113行,表示客戶端連接成功后,空閑多長時間超時(非活躍,沒有數據交互)。0表示不開啟此功能
timeout 0
//第130行,維持長鏈接的時間,單位秒
tcp-keepalive 300
//第136行,是否在后台運行守護進程。如果使用redis服務腳本啟動,即使為no,也會運行一個守護進程。一般設置yes
daemonize no
//第147行,是由upstart還是systemd接管redis進程。默認無監督互動,不需要修改。
supervised no
//第158行,pid文件地址
pidfile /var/run/redis_6379.pid
//第166行,日志級別
loglevel notice
//第174行,日志文件位置
logfile /var/log/redis/redis.log
//第186行,默認由多少個數據庫。但是在分布式中,只能有一個
databases 16

/*第218到220行,快照存儲策略,存到磁盤的持久化策略
*第一個數字是單位時間,單位為秒;第二個數字是鍵值發生變化的次數
* 例如第一個,900秒內至少發生1次鍵值變化,則做一次快照(持久化)
* 第二個就是,300秒內至少發生10次鍵值變化,則做一次快照(持久化)
* 所有條件是並列關系,根據不同的鍵值變化選擇使用規則
*/
save 900 1
save 300 10
save 60 10000
//第235行,在進行快照備份時,一旦發生錯誤是否停止,默認yes即可
stop-writes-on-bgsave-error yes
//第241行,指定RDB文件是否壓縮。yes表示壓縮,會消耗CPU資源
rdbcompression yes
/*第250行,是否對RDB文件做校驗碼檢測。
*此項定義在redis啟動時加載RDB文件是否對文件檢查校驗碼,在redis生成RDB文件是會生成校驗信息,在redis再次啟動或裝載RDB文件時,是否檢測校驗信息。
*如果檢測的情況下會消耗時間,會導致redis啟動時慢,但是能夠判斷RDB文件是否產生錯誤。
*/
rdbchecksum yes
//第253行,RDB文件名稱
 dbfilename dump.rdb
//第263行,RDB文件存放的路徑
dir /var/lib/redis

//第286行,定義Master服務器的IP和端口,主從復制的配置信息
# replicaof <masterip> <masterport>
//第293行,定義Master服務器的密碼,主從復制的配置信息
# masterauth <master-password>
//第308行,當從端在主從復制過程中與主端斷開連接,yes表示繼續提供服務,即使數據可能不是最新的;no表示對請求返回錯誤信息
replica-serve-stale-data yes
//第324行,從端只讀
replica-read-only yes
//第355行,默認不使用diskless(無磁盤)同步方式
repl-diskless-sync no
//第367行,diskless(無磁盤)方式進行數據傳遞之前會有一個時間的延遲,以便從端能夠進行到待傳送的目標隊列中,默認5秒
repl-diskless-sync-delay 5
//第373行,從端向主端發送ping的時間間隔,默認10秒
# repl-ping-replica-period 10
//第385行,設置超時時間
# repl-timeout 60
/*第400行,是否啟用TCP_NODELAY。
* 如果啟用則會使用少量的TCP包和帶寬去進行數據傳輸到從端,速度較慢;
* 如果不啟用則使用較多的帶寬進行數據傳輸,速度較快。
*/
repl-disable-tcp-nodelay no
/*第413行,設置backlog的大小。backlog是一個緩沖區,在從端失聯時存放要同步到從端的數據。
* 因此當從端重連時,一般是不需要完全同步的。backlog越大,從端可以失聯的時間就越長(相對來說)
*/
# repl-backlog-size 1mb
//第426行,一段時間后,從端還沒有連上master,那么backlog(緩沖區)的內存將被釋放。0表示永不釋放,默認3600秒
# repl-backlog-ttl 3600
//第441行,從端的優先級設置,數字越小優先級越高。主端故障會根據優先級高的從端來進行恢復。如果設置的是0,那么該從端永遠不會被選中
replica-priority 100
//第457到458行,當主端的可用從端小於3個或網路延遲島嶼10秒時,主端拒絕接收用戶的寫請求。
# min-replicas-to-write 3
# min-replicas-max-lag 10

//第507行,指定認證密碼,默認不啟動
# requirepass foobared

//第539行,同時連接redis的最大數量
# maxclients 10000

  特別注意:第69行的bind,第88行的protected-mode,第136行的daemonize,第539行的maxclients,還有主從復制的所有配置參數。

(4).redis的簡單使用

  最最簡單的使用:redis-cli -h [IP地址] -p [端口號]。如果是連接本地,-h和-p都可以省略。

 1)Reids字符串操作

  鍵的命名規則:可以使用ASCII字符;鍵的長度不要過長,鍵的長度越長則消耗的空間越多;在同一個庫中(名稱空間),鍵的名稱不得重復,如果復制鍵的名稱,實際上是修改鍵中的值;在不同的庫中(名稱空間),鍵的多種名稱可以重復;鍵可以實現自動過期。

[root@youxi1 ~]# redis-cli
127.0.0.1:6379> set system centos  //創建鍵值
OK
127.0.0.1:6379> get system  //獲取鍵值
"centos"
127.0.0.1:6379> exit
[root@youxi1 ~]# systemctl restart redis  //重啟
[root@youxi1 ~]# redis-cli
127.0.0.1:6379> get system  //可以看到鍵值是存在的
"centos"
127.0.0.1:6379> set name "youxi" EX 10  //如這般設置,則表示該鍵值值存在10秒
OK
127.0.0.1:6379> get name  //10秒過后再次查看,這就是一個臨時鍵值
(nil)

 2)如果開啟認證功能

  首先修改配置文件,開啟認證功能

[root@youxi1 ~]# vim /etc/redis.conf
requirepass 123456  //在第507行,去除注釋,設置認證密碼
[root@youxi1 ~]# systemctl restart redis

  此時再次使用redis

[root@youxi1 ~]# redis-cli
127.0.0.1:6379> get system  //沒有認證時,會報錯
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456  //認證
OK
127.0.0.1:6379> get system  //認證后,再次獲取鍵值,成功
"centos"

(5).配置持久化

  Redis工作時所有數據集都是存儲於內存中的。如果Redis崩潰或斷電會導致所有數據丟失,所以Redis提供了持久化功能來保證數據的可靠性。Redis持久化有兩種實現方法:RDB和AOF

  RDB: 存儲為二進制格式的數據文件,是默認啟動的持久化機制;按事先定制的策略,周期性地將數據保存至磁盤。

  AOF:Append Only File類似於MySQL的二進制日志,記錄每一次redis的寫操作命令,以順序IO方式附加在指定文件的尾部,是使用追加方式實現的,這也叫做一種附加日志類型的持久化機制。由於每一次的操作都記錄,則會隨着時間長而增大文件的容量,並且有些記錄的命令是多余的。但是redis進程能夠自動的去掃描這個對應的AOF文件,把其中一些冗余的操作給合並一個,以實現將來一次性把數據恢復。

  RDB的配置其實上面已經說明過了,我這里再復制一下,如下。總共就6個配置點。

/*
* 第218到220行,快照存儲策略,存到磁盤的持久化策略
*第一個數字是單位時間,單位為秒;第二個數字是鍵值發生變化的次數
* 例如第一個,900秒內至少發生1次鍵值變化,則做一次快照(持久化)
* 第二個就是,300秒內至少發生10次鍵值變化,則做一次快照(持久化)
* 所有條件是並列關系,根據不同的鍵值變化選擇使用規則
*/
save 900 1
save 300 10
save 60 10000
//第235行,在進行快照備份時,一旦發生錯誤是否停止,默認yes即可
stop-writes-on-bgsave-error yes
//第241行,指定RDB文件是否壓縮。yes表示壓縮,會消耗CPU資源
rdbcompression yes
/*第250行,是否對RDB文件做校驗碼檢測。
*此項定義在redis啟動時加載RDB文件是否對文件檢查校驗碼,在redis生成RDB文件是會生成校驗信息,在redis再次啟動或裝載RDB文件時,是否檢測校驗信息。
*如果檢測的情況下會消耗時間,會導致redis啟動時慢,但是能夠判斷RDB文件是否產生錯誤。
*/
rdbchecksum yes
//第253行,RDB文件名稱
 dbfilename dump.rdb
//第263行,RDB文件存放的路徑
dir /var/lib/redis

  AOF的配置從第679行開始,如果需要可以自己看一下。


免責聲明!

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



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