本節主要內容
html
1. 前言
2. redis安裝
3. 啓動和中止Redisredis
1. 前言數據庫
安裝Redis須要知道本身須要哪一個版本,有針對性的安裝,好比若是須要redis GEO這個地理集合的特性,那麼redis版本就不能低於3.2版本,因爲這個特性是3.2版本纔有的。另外須要注意的是,Redis約定次版本號(即第一個小數點後的數字)爲偶數的版本是穩定版(如2.8版、3.0版),奇數版本是非穩定版(如2.7版、2.9版),生產環境下通常須要使用穩定版本。centos
2. redis安裝緩存
[root@centos home]# cd /home [root@centos home]# mkdir redis [root@centos home]# cd redis [root@centos redis]# wget http://download.redis.io/releases/redis-4.0.2.tar.gz [root@centos redis]# cd redis-4.0.2 [root@centos redis-4.0.2]# make [root@centos redis-4.0.2]# make insatll
也能夠指定安裝目錄:make install PREFIX=安裝目錄,默認安裝到 /usr/local/bin 下(如果經過make install PREFIX=安裝目錄, 完成安裝的,會在安裝目錄下生成一個bin目錄,bin目錄下也包含以下可執行文件)服務器
其中:ide
redis-benchmark :用於測試redis的性能。 redis-check-aof : 當aof備份文件被損壞,可經過該工具對aof文件進行修復,使用方式:redis-check-aof –fix 要修復的aof文件。 redis-check-rdb : 修復損壞的rdb備份文件。 redis-cli : redis客戶端,用於鏈接服務端。 redis-server : redis服務器端,用於啓動redis服務器。 redis-sentinel : 哨兵模式(實際使用較多) 在master-slave模式下(slave默認不支持寫),當master出現異常時,自動在slave中選擇一臺做爲master。 鏈接上redis服務器後,可經過指令「info」查看redis服務器信息,也可查看服務器知道內容信息,例如:info replication 查看主從相關信息
3. 啓動和中止Redis工具
(1)啓動redis性能
啓動Redis有直接啓動和經過初始化腳本啓動兩種方式,分別適用於開發環境和生產環境測試
A:直接啓動
直接啓動redis-server便可啓動Redis,十分簡單。
[root@centos redis-4.0.2]# redis-server
Redis服務器默認會使用6379端口,能夠經過--port參數能夠自定義端口號(本文使用默認的端口號):
[root@centos redis-4.0.2]# redis-server --port 6380
B:經過初始化腳本啓動Redis
在Linux系統中能夠經過初始化腳本啓動Redis,使得Redis能隨系統自動運行,在生產環境中推薦使用此方法運行Reids,這裏以Centos6.0爲例。
在Redis源代碼目錄的utils文件夾中有一個名爲redis_init_script
的初始化腳本文件。咱們須要配置Redis的運行方式和持久化文件、日誌文件的存儲位置。步驟以下:
1)配置初始化腳本
首先將初始化腳本複製到/etc/init.d 目錄中,文件名爲 redis_端口號,其中端口號表示要讓Redis監聽的端口號,客戶端經過該端口鏈接Redis。而後修改腳本第6行的REDISPORT變量的值爲一樣的端口號。
2)創建須要的文件夾
須要創建的目錄及說明
3)修改配置文件
首先將配置文件模板(redis-4.0.2/redis.conf)複製到/etc/redis 目錄中,以端口號命名(如「6379.conf」),而後按照下表對其中的部分參數進行編輯。
須要修改的配置文件及說明
如今也可使用下面的命令來啓動和關閉Redis了:
[root@centos redis-4.0.2]# /etc/init.d/redis_6379 start [root@centos redis-4.0.2]# /etc/init.d/redis_6379 stop
讓Redis隨系統自動啓動,這還須要對Redis初始化腳本(/etc/init.d/redis_6379)進行簡單修改,執行命令:
# chkconfig: 2345 90 10 # description: Redis is a persistent key-value database
設置開機執行redis腳本:
chkconfig redis_6379 on
重啓機器以後檢查redis進程發現以啓動:
通過上面的部署操做後,系統重啓,Redis也會隨着系統自動啓動,而且上面的步驟裏也配置了Redis持久化,下次啓動系統或Redis時,有緩存數據不丟失的好處。
後面能夠方便使用下面命令啓停Redis:
[root@centos redis-4.0.2]# /etc/init.d/redis_6379 start [root@centos redis-4.0.2]# /etc/init.d/redis_6379 stop
分析啓動腳本/etc/init.d/redis_6379:
1 #!/bin/sh 2 # 3 # Simple Redis init.d script conceived to work on Linux systems 4 # as it does use of the /proc filesystem. 5 #chkconfig: 2345 90 10 6 #description: Redis is a persistent key-value database 7 8 REDISPORT=6379 9 EXEC=/usr/local/bin/redis-server 10 CLIEXEC=/usr/local/bin/redis-cli 11 12 PIDFILE=/var/run/redis_${REDISPORT}.pid 13 CONF="/etc/redis/${REDISPORT}.conf" 14 15 case "$1" in 16 start) 17 if [ -f $PIDFILE ] 18 then 19 echo "$PIDFILE exists, process is already running or crashed" 20 else 21 echo "Starting Redis server..." 22 $EXEC $CONF 23 fi 24 ;; 25 stop) 26 if [ ! -f $PIDFILE ] 27 then 28 echo "$PIDFILE does not exist, process is not running" 29 else 30 PID=$(cat $PIDFILE) 31 echo "Stopping ..." 32 $CLIEXEC -p $REDISPORT shutdown 33 while [ -x /proc/${PID} ] 34 do 35 echo "Waiting for Redis to shutdown ..." 36 sleep 1 37 done 38 echo "Redis stopped" 39 fi 40 ;; 41 *) 42 echo "Please use start or stop as first argument" 43 ;; 44 esac
啓動順序:
首先判斷是啓動仍是中止,以啓動爲例,1. 檢查是否存在redis的進程文件/var/run/redis_6379.pid,若是存在則打印一條日誌信息。2.若是redis沒有啓動首先打印一條啓動信息,而後執行/usr/local/bin/redis-server /etc/redis/${REDISPORT}.conf 命令啓動redis。
讓redis之後臺進程的形式運行,編輯conf配置文件,修改以下內容;
daemonize yes
(2)中止redis
考慮到 Redis 有可能正在將內存中的數據同步到硬盤中,強行終止 Redis 進程可能會致使數據丟失。正確中止Redis的方式應該是向Redis發送SHUTDOWN命令,方法爲:
[root@centos ~]# redis-cli SHUTDOWN
當Redis收到SHUTDOWN命令後,會先斷開全部客戶端鏈接,而後根據配置執行持久化,最後完成退出。
Redis能夠妥善處理 SIGTERM信號,因此使用 kill Redis
進程的 PID也能夠正常結束Redis,效果與發送SHUTDOWN命令同樣。
3. Redis命令行客戶端
上面使用的redis-cli(Redis Command Line Interface)是Redis自帶的基於命令行的Redis客戶端,後面操做Redis會使用該命令行工具。
下面會介紹如何經過redis-cli向Redis發送命令,而且對Redis命令的返回值的不一樣類型進行簡單介紹。
(1)發送命令
經過redis-cli向Redis發送命令有兩種方式,第一種方式是將命令做爲redis-cli的參數執行,好比上面使用過的redis-cli SHUTDOWN。redis-cli 執行時會自動按照默認配置(服務器地址爲127.0.0.1,端口號爲6379)鏈接Redis,經過-h和-p參數能夠自定義地址和端口號:
[root@centos ~]# redis-cli -h 127.0.0.1 -p 6379
Redis提供了PING命令來測試客戶端與Redis的鏈接是否正常,若是鏈接正常會收到PONG,如:
[root@centos ~]# redis-cli PING PONG
第二種方式是不附帶參數運行redis-cli,這樣會進入交互模式,能夠自由輸入命令,如:
[root@centos ~]# redis-cli 127.0.0.1:6379> PING PONG 127.0.0.1:6379> ECHO hi "hi"
(2)命令返回值
在大多數狀況下,執行一條命令後咱們會關心命令的返回值。命令的返回值有5種類型,對於每種類型redis-cli的展示結果都不一樣,下面說明:
1)狀態回覆
狀態回覆(status reply)是最簡單的一種回覆,好比向Redis發送SET命令設置某個鍵的值時,Redis會回覆狀態OK表示成功。前面執行PING命令回覆PONG也是狀態回覆。狀態回覆直接顯示狀態信息,如:
127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> PING PONG 127.0.0.1:6379>
2)錯誤回覆
當出現命令不存在或命令格式有錯誤等狀況時Redis會返回錯誤回覆(error reply)。錯誤回覆以(error)開頭,並在後面跟上錯誤信息。如:
127.0.0.1:6379> ERRORCOMMAND (error) ERR unknown command 'ERRORCOMMAND'
在2.8版本之後,部分錯誤信息會以具體的錯誤類型開頭,這樣在調試的時候能更容易直到遇到的是哪一種類型的錯誤。如:
127.0.0.1:6379> LPUSH key 1 (integer) 1 127.0.0.1:6379> GET key (error) WRONGTYPE Operation against a key holding the wrong kind of value 127.0.0.1:6379>
上面錯誤信息開頭「WRONGTYPE」就表示類型錯誤。
3)整數回覆
Redis雖然沒有整數類型,可是卻提供了一些用於整數操做的命令,如遞增鍵值的INCR命令會以整數的形式返回遞增後的鍵值。整數回覆(integer reply)以(integer)開頭,並在後面跟上整數數據:
127.0.0.1:6379> INCR foo (integer) 1
4)字符串回覆
字符串回覆(bulk reply)是最多見的一種回覆類型,當請求一個字符串類型的鍵的鍵值或一個其餘類型鍵中的某個元素時會獲得一個字符串回覆。字符串回覆以雙引號包裹:
127.0.0.1:6379> GET foo "1"
特殊狀況是當請求的鍵值不存在時會獲得一個空結果,顯示(nil)。如:
127.0.0.1:6379> GET noexists (nil)
5)字符串回覆
多行字符串回覆(multi-bulk reply)一樣很常見,如請求一個非字符串類型鍵的元素列表時就會收到多行字符串回覆。多行字符串回覆中的每行字符串都以一個序號開通=頭,如:
127.0.0.1:6379> KEYS * 1) "fo" 2) "num" 3) "key" 4) "foo" 5) "bar" 6) "name"
KEYS命令的做用是獲取數據庫中符合指定規則的鍵名。
4. 配置
前面經過redis-server的啓動參數port設置了Redis的端口號,除此以外Redis還支持其餘配置選項,如是否開啓持久化、日誌級別等。因爲能夠配置的選項較多,經過啓動參數設置不方便,因此Redis支持經過配置文件來設置這些選項。啓動配置文件的方法是在啓動時將配置文件的路徑做爲啓動參數傳遞給redis-server,如:
[root@centos ~]# redis-server /path/to/redis.conf
經過啓動參數傳遞同名的配置選項會覆蓋文件 中相應的參數,如:
redis-server /path/to/redis.conf --loglevel warning
Redis提供了一個配置模板redis.conf,位於源代碼目錄的根目錄下。
除此以外還能夠在Redis運行時經過CONFIG SET命令在不重啓Redis的狀況下動態修改部分Redis配置。如:
[root@centos redis-4.0.2]# redis-cli 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice" 127.0.0.1:6379> CONFIG SET loglevel warning OK
並非全部的配置均可以使用CONFIG SET命令修改,能夠查閱《Redis入門指南》附錄B或者相關資料查詢哪些參數可以使用該命令修改。同時可使用CONFIG GET命令得到Redis當前的配置狀況。如:
127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "warning" 127.0.0.1:6379>
第一行字符串回覆表示的是選項名,第二行便是選項值。
5. 多數據庫
Redis是一個字典結構的存儲服務器,而實際上一個Redis實例提供了多個用來存儲數據的字典,客戶端能夠指定將數據存儲在哪一個字典中,這與關係型數據庫實例中能夠建立多個數據庫相似,因此能夠將其中的每一個字典理解成一個獨立的數據庫。
每一個數據庫對外都是一個從0開始的遞增數字命名,Redis默認支持16個數據庫,能夠經過配置參數database來修改這一數字。客戶端與Redis創建鏈接後會自動選擇0號數據庫,能夠經過SELECT 命令更換數據庫,如要選擇1號數據庫:
127.0.0.1:6379> SELECT 1 OK 127.0.0.1:6379[1]>
配置文件redis.conf中databases設置: # Set the number of databases. The default database is DB 0, you can select # a different one on a per-connection basis using SELECT <dbid> where # dbid is a number between 0 and 'databases'-1 databases 16
然而這些以數字命名的數據庫又與咱們理解的數據庫有所區別。首先Redis不支持自定義數據庫的名字,每一個數據庫都以編號命名,開發者必須本身記錄哪些數據庫存儲了哪些數據。另外Redis也不支持爲每一個數據庫設置不一樣的訪問密碼,因此一個客戶端要麼能夠訪問所有數據庫,要麼連一個數據庫也沒有權限訪問,最重要的一點是每一個數據庫之間並非徹底隔離的,好比FLUSHALL命令能夠清空一個Redis實例中全部數據庫中的數據。
綜上所述,這些數據庫更像是一種命名空間,而不適宜存儲不一樣應用程序的數據。好比能夠用0號數據庫存儲某個應用生產環境中的數據,使用1號數據庫存儲測試環境中的數據,但不宜使用0號數據庫存儲A應用的數據而使用1號數據庫存儲B應用的數據,不一樣的應用應該使用不一樣的Redis實例存儲數據。因爲Redis很是輕量級,一個空Redis實例佔用的內存有1M左右,因此不用擔憂多個Redis實例會額外佔用不少的內存。
參考文獻:
- https://blog.csdn.net/lyw19930812/article/details/80607691
- https://www.cnblogs.com/renzhicai/p/7773080.html
- Redis入門指南(第二版)