redis是一款高速緩存非關係型數據庫,爲何說他是」高速「的,應爲其讀寫都在內存中,這也是非關係行數據庫的一大特色,Redis是以key-value的形式存儲的。下面將從如下幾點來介紹redis。(redis的安裝及啓動請自行解決...)node
8.最後能夠安裝redis可視化工具--brew install rdmweb
一:redis支持的數據結構redis
具體你們能夠按照上面的格式去嘗試新建各種數據類型。算法
二:redis數據持久化
Redis雖然是一種內存型數據庫,一旦服務器進程退出,數據庫的數據就會丟失,爲了解決這個問題Redis提供了兩種持久化的方案,將內存中的數據保存到磁盤中,避免數據的丟失。數據庫
RDB持久化
RDB是默認持久化方式,其規定如下幾種時間段內去觸發持久化操做緩存
# 如下配置表示的條件: # 服務器在900秒以內被修改了1次 save 900 1 # 服務器在300秒以內被修改了10次 save 300 10 # 服務器在60秒以內被修改了10000次 save 60 10000
該方式有個致命的缺點——RDB持久化至關於備份數據庫狀態,那麼若是數據文件很大的化就會致使服務崩潰等一系列問題。安全
AOF持久化
AOF持久化(Append-Only-File),與RDB持久化不一樣,AOF持久化是經過保存Redis服務器鎖執行的寫狀態來記錄數據庫的。具體來講,RDB持久化至關於備份數據庫狀態,而AOF持久化是備份數據庫接收到的命令,全部被寫入AOF的命令都是以redis的協議格式來保存的。如下爲開啓AOF持久化的配置方式:服務器
#AOF 和 RDB 持久化方式能夠同時啓動而且無衝突。 #若是AOF開啓,啓動redis時會加載aof文件,這些文件可以提供更好的保證。 appendonly yes # 只增文件的文件名稱。(默認是appendonly.aof) # appendfilename appendonly.aof #redis支持三種不一樣的寫入方式: # # no:不調用,之等待操做系統來清空緩衝區當操做系統要輸出數據時。很快。 # always: 每次更新數據都寫入僅增日誌文件。慢,可是最安全。 # everysec: 每秒調用一次。折中。 appendfsync everysec # 設置爲yes表示rewrite期間對新寫操做不fsync,暫時存在內存中,等rewrite完成後再寫入.官方文檔建議若是你有特殊的狀況能夠配置爲'yes'。可是配置爲'no'是最爲安全的選擇。 no-appendfsync-on-rewrite no # 自動重寫只增文件。 # redis能夠自動盲從的調用‘BGREWRITEAOF’來重寫日誌文件,若是日誌文件增加了指定的百分比。 # 當前AOF文件大小是上第二天志重寫獲得AOF文件大小的二倍時,自動啓動新的日誌重寫過程。 auto-aof-rewrite-percentage 100 # 當前AOF文件啓動新的日誌重寫過程的最小值,避免剛剛啓動Reids時因爲文件尺寸較小致使頻繁的重寫。 auto-aof-rewrite-min-size 64mb
其實我麼能夠查看dump.rdb文件和appendonly.aof文件就會很明顯發現他們各自的存儲數據的方式。還有一點就是全部的配置都是在redis.conf文件中。服務每次重啓的時候都會首先從持久化文件中去拉取數據。兩個持久化文件路徑你們可查看redis.conf中的dir配置項得到,我本地的以下:數據結構
自行嘗試:先利用RDB的方式添加一些key-value,在開啓aof方式,觀察dump.rdb文件和appendonly.aof文件大小的變化。app
三:redis cluster集羣的實現方案
redis在年初發布了3.0.0,官方支持了redis cluster,也就是集羣。redis cluster在設計的時候,就考慮到了去中心化,去中間件,也就是說,集羣中的每一個節點都是平等的關係,都是對等的,每一個節點都保存各自的數據和整個集羣的狀態。每一個節點都和其餘全部節點鏈接,並且這些鏈接保持活躍,這樣就保證了咱們只須要鏈接集羣中的任意一個節點,就能夠獲取到其餘節點的數據。
Redis 集羣沒有並使用傳統的一致性哈希來分配數據,而是採用另一種叫作哈希槽 (hash slot)的方式來分配的。redis cluster 默認分配了 16384 個slot,當咱們set一個key 時,會用CRC16算法來取模獲得所屬的slot,而後將這個key 分到哈希槽區間的節點上,具體算法就是:CRC16(key) % 16384。必需要3個之後的主節點,不然在建立集羣時會失敗。
1.開啓集羣配置
[root@web3 redis-3.0.5]# vi redis.conf #修改如下地方 port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
2.咱們這邊模擬6臺服務(3M+3S)
[root@web3 redis-3.0.5]# mkdir -p /usr/local/cluster-test [root@web3 redis-3.0.5]# cd /usr/local/cluster-test/ [root@web3 cluster-test]# mkdir 7000 [root@web3 cluster-test]# mkdir 7001 [root@web3 cluster-test]# mkdir 7002 [root@web3 cluster-test]# mkdir 7003 [root@web3 cluster-test]# mkdir 7004 [root@web3 cluster-test]# mkdir 7005
3.把redis.conf文件拷貝6份並修改相應的端口號最後CP到7000-7005文件夾下去,再將對行的服務文件redis-serverCP到7000-7005文件夾下去
4.啓動這這6個服務
[root@web3 cluster-test]# cd /usr/local/cluster-test/7000/ [root@web3 7000]# redis-server redis.conf [root@web3 7000]# cd ../7001 [root@web3 7001]# redis-server redis.conf [root@web3 7001]# cd ../7002 [root@web3 7002]# redis-server redis.conf [root@web3 7002]# cd ../7003 [root@web3 7003]# redis-server redis.conf [root@web3 7003]# cd ../7004 [root@web3 7004]# redis-server redis.conf [root@web3 7004]# cd ../7005 [root@web3 7005]# redis-server redis.conf [root@web3 7005]#
5.查看6個服務的啓動進程狀況
[root@web3 7005]# ps -ef|grep redis root 11380 1 0 07:37 ? 00:00:00 redis-server *:7000 [cluster] root 11384 1 0 07:37 ? 00:00:00 redis-server *:7001 [cluster] root 11388 1 0 07:37 ? 00:00:00 redis-server *:7002 [cluster] root 11392 1 0 07:37 ? 00:00:00 redis-server *:7003 [cluster] root 11396 1 0 07:37 ? 00:00:00 redis-server *:7004 [cluster] root 11400 1 0 07:37 ? 00:00:00 redis-server *:7005 [cluster] root 11404 8259 0 07:38 pts/0 00:00:00 grep redis
6.將6個服務連在一塊兒構招成集羣
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
7.若是輸出如下信息恭喜你集羣搭建成功了
[root@web3 7000]# redis-trib.rb check 127.0.0.1:7000 Connecting to node 127.0.0.1:7000: OK Connecting to node 127.0.0.1:7002: OK Connecting to node 127.0.0.1:7003: OK Connecting to node 127.0.0.1:7005: OK Connecting to node 127.0.0.1:7001: OK Connecting to node 127.0.0.1:7004: OK >>> Performing Cluster Check (using node 127.0.0.1:7000) M: 3707debcbe7be66d4a1968eaf3a5ffaf4308efa4 127.0.0.1:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: dfa0754c7854a874a6ebd2613b86140ad97701fc 127.0.0.1:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: d2237fdcfbba672de766b913d1186cebcb6e1761 127.0.0.1:7003 slots: (0 slots) slave replicates 3707debcbe7be66d4a1968eaf3a5ffaf4308efa4 S: 30858dbf483b61b9838d5c1f853a60beaa4e7afd 127.0.0.1:7005 slots: (0 slots) slave replicates dfa0754c7854a874a6ebd2613b86140ad97701fc M: cb5c04b6160c3b7e18cad5d49d8e2987b27e0d6c 127.0.0.1:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 4b4aef8b48c427a3c903518339d53b6447c58b93 127.0.0.1:7004 slots: (0 slots) slave replicates cb5c04b6160c3b7e18cad5d49d8e2987b27e0d6c [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
8.最後能夠安裝redis可視化工具--brew install rdm