1、概念linux
redis是一種支持Key-Value等多種數據結構的存儲系統。可用於緩存、事件發佈或訂閱、高速隊列等場景。該數據庫使用ANSI C語言編寫,支持網絡,提供字符串、哈希、列表、隊列、集合結構直接存取,基於內存,可持久化。redis
2、redis的應用場景有哪些
一、會話緩存(最經常使用)
二、消息隊列,好比支付
三、活動排行榜或計數
四、發佈、訂閱消息(消息通知)
五、商品列表、評論列表等數據庫
1.redis安裝:vim
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.修改配置文件:
centos
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
認證:ruby
1 auth redhat
5.redis數據類型:
字符串(string):set bp 123 #設置字符串類型bp 值爲122bash
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 #根據分數查看對應的的等級
3、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