Redis 羣集配置實例:
1、關係型數據庫與非關係型數據庫的區別:mysql
Redis數據庫是一個非關係型數據庫,和oracle、mysql、sql server等關係型數據庫不是同一類型。NoSQL是非關係型數據庫的總稱,主流的NoSQL數據庫有redis、MongBD等。NoSQL的存儲方式、存儲結構以及使用的場景都是徹底不一樣的。NoSQL數據庫憑藉着其非關係型、分佈式、開源和橫向擴展等優點,被認爲是下一代數據庫產品。redis
NoSQL能夠解決關係型數據庫產生的三高問題:sql
關係型數據庫和非關係型數據庫都有各自的特色與應用場景,二者精密結合將會給Web 2.0的數據庫發展帶來新的思路。讓關係型數據庫關注在關係上,非關係型數據庫關注在存儲上。
.
2、redis數據庫介紹:數據庫
Redis是一個開源的、使用C語言編寫、支持網絡、可基於內存也可持久化的日誌類型、key-value(鍵值對)數據庫,是目前分佈式架構中不可或缺的一環。vim
Redis服務器是單進程模型,也就是在一臺服務器上能夠同時啓動多個Redis進程,而Redis的實際處理速度則徹底依靠主進程的執行效率。若在服務器上只運行一個Redis進程,當多個client同時訪問時,服務器的處理能力會有必定程度的降低;若在同一臺服務器上開啓多個Redis進程,Redis在提升併發處理能力的同時會給服務器的CPU形成很大的壓力。也就是說,在實際生產環境中,須要根據實際的需求來決定開啓多少個Redis進程。若對高併發要求更高些,可能會考慮在同一臺服務器上開啓多個進程;若CPU資源比較緊張,採用單進程便可。緩存
Redis具備如下幾個有點:服務器
.
Redis是基於內存運行的數據庫,緩存是它比較常應用的場景之一,除此以外,Redis常見應用場景還包括獲取最新N個數據的操做、排行榜應用、計數器應用、存儲關係、實時分析系統、日誌記錄等。
.
3、Redis的安裝部署:網絡
能夠先去Redis官網下載相應的源碼包或從這:https://pan.baidu.com/s/1rGl8OwfYuYAB-aEXcZ7wRw (提取碼: zg3w )直接下載。架構
[root@redis ~]# tar zxf redis-5.0.5.tar.gz -C /usr/src/ #解包 [root@redis ~]# cd /usr/src/redis-5.0.5/ #切換至解壓出來的目錄 [root@redis redis-5.0.5]# make && make install #不須要./configure進行環境檢查與配置,直接make安裝便可。 [root@redis redis-5.0.5]# cd /usr/src/redis-5.0.5/utils/ #設置相關配置文件 [root@redis utils]# ./install_server.sh #執行該腳本,相關配置文件就生成了。 #接下來是在指定各類配置文件的存放目錄,一路按回車確認便可。 [root@redis utils]# cd /etc/init.d/ #優化控制服務啓停 [root@redis init.d]# mv redis_6379 redis [root@redis init.d]# chkconfig --add redis #添加爲系統服務。 [root@redis init.d]# systemctl restart redis [root@redis init.d]# netstat -anpt | grep redis # redis默認監聽6379和羣集端口16379 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 7098/redis-server 1 #如今只是安裝了redis,並無配置羣集,因此16379端口並無監聽。 [root@redis init.d]# vim /etc/redis/6379.conf #查看redis配置文件 bind 127.0.0.1 192.168.1.1 #監聽的主機地址 appendonly yes #改成「yes」,以便在每次更新操做後進行日誌記錄,進行數據同步寫入 port 6379 #監聽端口 daemonize yes #啓用守護進程 pidfile /var/run/redis_6379.pid #指定PID文件 loglevel notice #日誌級別 logfile /var/log/redis_6379.log #指定日誌文件
上面爲部分配置參數,主配置中還有不少更多的配置參數,具體可參考以下:
4、Redis命令工具及經常使用命令:併發
Redis軟件提供了不少命令工具,在安裝Redis時,所包含的軟件工具同時會被安裝到系統中,在系統中能夠直接使用,這些命令工具的做用以下所示:
.
下面是 redis-cli和redis-benchmark工具的用法:
一、redis-cli命令行工具:
.
redis-cli命令能夠鏈接指定的數據庫,能夠用「-h」指定遠程主機;「-p指定服務的端口號」,若設置了密碼,能夠用「-a」指定密碼,若沒設置鏈接密碼,則能夠省略「-a」選項。以下:
[root@redis redis]# redis-cli -h 192.168.1.1 -p 6379 #若端口號默認監聽6379,也可省略-p選項。 192.168.1.1:6379> 在數據庫操做環境中,使用help命令可獲取命令類型的幫助。其中,有三種獲取命令幫助的方式。 help @<group>:獲取<group>中的命令列表。 help <command>:獲取某個命令的幫助。 help <tab> :獲取可能幫助的主題列表。 示例以下: 192.168.1.1:6379> help @list #查看全部與list數據類型相關的命令 BLPOP key [key ...] timeout summary: ck until one is available since: 2.0.0 BRPOP key [key ...] timeout summary: block until one is available since: 2.0.0 ........................... 192.168.1.1:6379> help set #查看set命令的命令幫助。 SET key value [expiration EX seconds|PX milliseconds] [NX|XX] summary: Set the string value of a key since: 1.0.0 group: string
二、redis-benchmark壓力測試工具:
.
redis-benchmark是官方自帶的Redis性能測試工具,能夠有效地測試Redis服務的性能。該工具的經常使用選項以下:
[root@redis redis]# redis-benchmark -h 192.168.1.1 -p 6379 -c 100 -n 100000 #向指定IP地址及端口的Redis服務器發送100個併發鏈接與100000個請求測試性能。 ......................... ====== MSET (10 keys) ====== 100000 requests completed in 1.74 seconds 100 parallel clients 3 bytes payload keep alive: 1 23.94% <= 1 milliseconds 98.02% <= 2 milliseconds 99.64% <= 3 milliseconds 99.76% <= 4 milliseconds 99.82% <= 5 milliseconds 99.89% <= 6 milliseconds 99.90% <= 7 milliseconds 99.94% <= 8 milliseconds 99.97% <= 9 milliseconds 100.00% <= 10 milliseconds 100.00% <= 10 milliseconds 57603.69 requests per second #測試結果,milliseconds爲毫秒,時間越短,性能越好。 [root@redis redis]# redis-benchmark -h 192.168.1.1 -p 6379 -q -d 100 #測試向指定Redis服務器的指定端口6379存取大小爲100B的數據包的性能。 [root@redis redis]# redis-benchmark -t set,lpush -n 100000 -q #測試本機上Redis服務在進行set與lpush操做時的性能。 SET: 67659.00 requests per second LPUSH: 64516.13 requests per second
Redis數據庫經常使用命令:
.
Redis數據庫採用key-value(鍵值對)的數據存儲形式,所使用的命令是set和get。
.
[root@localhost ~]# redis-cli #鏈接本地數據庫 127.0.0.1:6379 > set test zhangsan #插入數據 OK 127.0.0.1:6379> get test #查詢鍵值 "zhangsan" 127.0.0.1:6379> keys t* #查詢以「t」開頭的數據 1) "test" 127.0.0.1:6379> keys t? #查詢以「t」開頭後面包含一個任意一位的數據 (empty list or set) #沒有查到,表明沒有符合條件的數據 127.0.0.1:6379> keys t?? #查詢以「t」開頭後面包含一個任意兩位的數據 (empty list or set) 127.0.0.1:6379> exists test #判斷「test」鍵是否存在 (integer) 1 #表示test鍵存在 127.0.0.1:6379> exists yy #判斷「yy」鍵是否存在 (integer) 0 127.0.0.1:6379> keys * #查詢當前庫中全部鍵 1) "counter:__rand_int__" 2) "mylist" 3) "key:__rand_int__" 4) "test" 5) "myset:__rand_int__" 127.0.0.1:6379> del test #刪除test鍵 (integer) 1 127.0.0.1:6379> set www 23 OK 127.0.0.1:6379> type www #獲取鍵「www」對應的value值類型 string
rename命令能夠對已有的key進行重命名,還有一個重命名的命令爲renamenx。二者區別是前者更改的目標key值無論存在與否,都將進行更改,直接覆蓋目標key值的數據;後者renamenx命令是在更改時,會檢查目標鍵值是否存在,若存在,將放棄更改。
127.0.0.1:6379> get www "23" 127.0.0.1:6379> set qq 123 #插入一條數據 OK 127.0.0.1:6379> renamenx www qq #將「www」更改成「qq」 (integer) 0 #「qq」存在,放棄更改 127.0.0.1:6379> rename www qq #使用rename命令進行更改 OK 127.0.0.1:6379> get qq #直接覆蓋目標數據 "23" 127.0.0.1:6379> dbsize #查看當前數據庫中key的數目 (integer) 5
多數據庫經常使用的命令:
Redis支持多數據庫,Redis在沒有任何改動的狀況下默認包含16個數據庫,數據庫名使用數字0--15來依次命名。每一個庫中的數據是獨立的,也就是說在10庫中查不到0庫中的數據。
127.0.0.1:6379> select 10 #切換至編號10的庫 OK 127.0.0.1:6379[10]> select 15 #切換至編號15的庫 OK 127.0.0.1:6379[15]> select 0 #切換至編號0的庫 OK 127.0.0.1:6379> move liuyi 10 #將該庫中的數據移動到10庫中 (integer) 1 127.0.0.1:6379> select 10 #切換至編號10的庫 OK 127.0.0.1:6379[10]> get liuyi #查看移動過來的庫 "23" #如今0庫中已經查不到「liuyi」的數據了
清除數據庫內數據:
Redis數據庫的整庫數據刪除主要分爲兩個部分:清空當前數據庫中的數據,使用flushdb命令實現;清空全部庫中的數據,使用flushall命令。數據庫清空操做比較危險,生產環境下慎用!!!