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