node
yum install redis -y
方式二(經過源碼編譯)python
(1)下載源碼包redis
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
(2)解壓數據庫
tar -zxvf redis-4.0.10.tar.gz
(3)進入redis原碼,編譯且安裝vim
cd redis-4.0.10
make && make install
(4)指定配置文件啓動redis(能夠自定製配置文件)緩存
redis-server redis.conf
(5)更改配置文件爲能夠後臺運行安全
找到配置文件中的daemonize,將它的配置右no更改成yes
過濾出文件的空白行和註釋行ruby
grep -v "^#" redis.conf | grep -v "^$"
指定文件啓動服務端架構
redis-server redis.conf
啓動客戶端併發
redis-cli
注意問題1:當遠程訪問redis時,若是出現鏈接不上redis的狀況,多是配置文件bind參數的問題
解決方式:
在配置文件redis.conf中找到bind,若bind的參數爲127.0.0.0,則改成0.0.0.0
注意問題2:更改redis默認端口
若是使用默認端口,可能產生安全問題,容易被攻擊
在redis.conf配置文件中找到port,將默認參數由6379更改成自定義的參數
之後再登陸時,須要指定端口登陸:redis-cli -p 6388
注意問題3:更改redis的登陸密碼
在redis.conf配置文件中找到requirepass,將默認參數由foobared更改成自定義的參數
之後登陸後本身須要進行驗證才能使用redis:auth 19960926abc
登陸時也能夠直接指定端口密碼:redis-cli -p 6380 -a 密碼
啓動兩個redis-cli窗口,均訂閱heilongjiang頻道,啓動第三個redis-cli窗口,向heilongjiang頻道發送消息
窗口1:
窗口2:
窗口3:
PUBLISH channel msg 將信息 message 發送到指定的頻道 channel SUBSCRIBE channel [channel ...] 訂閱頻道,能夠同時訂閱多個頻道 UNSUBSCRIBE [channel ...] 取消訂閱指定的頻道, 若是不指定頻道,則會取消訂閱全部頻道 PSUBSCRIBE pattern [pattern ...] 訂閱一個或多個符合給定模式的頻道,每一個模式以 * 做爲匹配符,好比 it* 匹配所 有以 it 開頭的頻道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配全部 以 news. 開頭的頻道( news.it 、 news.global.today 等等),諸如此類 PUNSUBSCRIBE [pattern [pattern ...]] 退訂指定的規則, 若是沒有參數則會退訂全部規則 PUBSUB subcommand [argument [argument ...]] 查看訂閱與發佈系統狀態 注意:使用發佈訂閱模式實現的消息隊列,當有客戶端訂閱channel後只能收到後續發佈到該頻道的消息,以前發送的不會緩存,必須Provider和Consumer同時在線。 PSUBSCRIBE python* 客戶端正則(支持模糊匹配)接收
自定義redis的配置文件myredis.conf
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379
指明myredis.conf配置文件啓動
redis-server myredis.conf
注:redis關機後數據就沒了,由於沒有開啓數據持久化
在自定義的配置文件中添加 dbfilename dbmp.rdb #rdb持久化文件 ########如下能夠不寫################# save 900 1 #rdb機制 每900秒 有1個修改記錄 save 300 10 #每300秒 10個修改記錄 save 60 10000 #每60秒內 10000修改記錄
添加數據後要save才能算備份了
怎麼工做的:把每一步redis操做實記錄到appendonly.aof中
在配置文件 redis.conf中添加最後兩行
AOF持久化配置,兩條參數 appendonly yes appendfsync always 老是修改類的操做 everysec 每秒作一次持久化***** no 依賴於系統自帶的緩存大小機制
注:查看redis的版本
redis-server -v
先準備一個rdb的服務端
CONFIG set appendonly yes #開啓AOF功能 CONFIG SET save "" #關閉RDB功能
這一步的操做是臨時生效,再啓動仍是rdb,因此應該將將aof操做寫入配置文件
appendonly yes
appendfsync everyse
1.啓動三個redis數據庫實例
建立三個配置文件
touch redis-6379.conf 主庫 touch redis-6380.conf 從庫 touch redis-6381.conf 從庫
分別配置三個文件
在redis-6379.conf中 port 6379 daemonize yes pidfile /data/6379/redis.pid loglevel notice logfile "/data/6379/redis.log" dbfilename dump.rdb dir /data/6379 另外另個文件經過sed命令快速生成 sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf sed "s/6379/6381/g" redis-6379.conf > redis-6381.conf
分別啓動三個數據庫的客戶端和服務端
redis-server redis-6379.conf redis-cli -p 6379 redis-server redis-6380.conf redis-cli -p 6380 redis-server redis-6381.conf redis-cli -p 6381
爲從庫設置主庫
在6380從庫中 SLAVEOF 127.0.0.1 6379 在6381從庫中 SLAVEOF 127.0.0.1 6379
配置完成,檢查數據庫信息,看是否生效
info replication
測試
在主庫中添加內容
從庫中查看數據是否與主庫同步
注:批量殺死進程(根據服務名殺死進程)
pkill redis-server #殺死進程名爲redis-server的進程
檢查從庫主從信息,此時master_link_status:down
redis-cli -p 6381 info replication redis-cli -p 6382 info replication
既然主庫掛了,我想要在6380 6381之間選一個新的主庫
1.關閉6380的從庫身份
redis-cli -p 6381
info replication
slaveof no one
2.將6381設爲6380的從庫
6382鏈接到6381: [root@db03 ~]# redis-cli -p 6382 127.0.0.1:6382> SLAVEOF no one 127.0.0.1:6382> SLAVEOF 127.0.0.1 6381
3.檢查6382,6381的主從信息
保護redis主從集羣,正常運轉,當主庫掛掉以後,自動在從庫中挑選新的主庫,進行同步
(1).準備三個數據庫實例(三個配置文件,經過端口區分)並啓動
redis-server redis-6379.conf redis-server redis-6380.conf redis-server redis-6381.conf
(2).準備三個啥哨兵的配置文件(寫入是去掉註釋)(不能直接複製,要更改主機名,地址,端口等信息)
redis-sentinel-26379.conf文件
port 26379 dir /var/redis/data/ logfile "26379.log" // 當前Sentinel節點監控 192.168.119.10:6379 這個主節點 // 2表明判斷主節點失敗至少須要2個Sentinel節點節點贊成 // mymaster是主節點的別名 sentinel monitor s15master 192.168.177.130 6379 2 //每一個Sentinel節點都要按期PING命令來判斷Redis數據節點和其他Sentinel節點是否可達,若是超過30000毫秒30s且沒有回覆,則斷定不可達 sentinel down-after-milliseconds s15master 30000 //當Sentinel節點集合對主節點故障斷定達成一致時,Sentinel領導者節點會作故障轉移操做,選出新的主節點, 原來的從節點會向新的主節點發起復制操做,限制每次向新的主節點發起復制操做的從節點個數爲1 sentinel parallel-syncs s15master 1 //故障轉移超時時間爲180000毫秒 sentinel failover-timeout s15master 180000
快速生成另外兩個配置文件
sed "s/26379/26380/g" redis-sentinel-26379.conf > redis-sentinel-26380.conf sed "s/26379/26381/g" redis-sentinel-26379.conf > redis-sentinel-26381.conf
(3).添加後臺運行參數,使得三個哨兵進程,後臺運行
echo "daemonize yes" >> redis-sentinel-26379.conf echo "daemonize yes" >> redis-sentinel-26380.conf echo "daemonize yes" >> redis-sentinel-26381.conf
(4).啓動三個哨兵
redis-sentinel redis-sentinel-26379.conf redis-sentinel redis-sentinel-26380.conf redis-sentinel redis-sentinel-26381.conf
(5).查看哨兵的通訊狀態(最後一行)
redis-cli -p 6381 info replication
(6)殺死edis的主庫
kill -9 5537
(7)查看另外兩個庫的節點狀態
redis-cli -p 6380 info replication
redis-cli -p 6381 info replication
此時的6379庫再從新啓動會變成從節點
對於數據量太大,訪問量太大,併發量太大的問題,經過redis-cluster搭建集羣來解決該類問題
分佈式數據庫首要解決把整個數據集按照分區規則映射到多個節點的問題,即把數據集劃分到多個節點上,每一個節點負責整個數據的一個子集。
常見的分區規則有哈希分區和順序分區。Redis Cluster
採用哈希分區規則,所以接下來會討論哈希分區規則。
節點取餘分區
一致性哈希分區
虛擬槽分區(redis-cluster採用的方式)
(1)分區規則一:順序分區
(2)分區規則二:哈希分區
例如按照節點取餘的方式,分三個節點 1~100的數據對3取餘,能夠分爲三類 餘數爲0 餘數爲1 餘數爲2 那麼一樣的分4個節點就是hash(key)%4 節點取餘的優勢是簡單,客戶端分片直接是哈希+取餘
(3)分區規則三:虛擬槽分區
虛擬槽分區巧妙地使用了哈希空間,使用分散度良好的哈希函數把全部的數據映射到一個固定範圍內的整數集合,整數定義爲槽(slot)。 Redis Cluster槽的範圍是0 ~ 16383。 槽是集羣內數據管理和遷移的基本單位。採用大範圍的槽的主要目的是爲了方便數據的拆分和集羣的擴展, 每一個節點負責必定數量的槽。
(1)準備6個數據庫實例(端口:7000-7005)
數據庫的配置文件編寫
port 7000 daemonize yes dir "/opt/redis/data" logfile "7000.log" dbfilename "dump-7000.rdb" cluster-enabled yes #開啓集羣模式 cluster-config-file nodes-7000.conf #集羣內部的配置文件 若是沒有/opt/redis/data文件夾,建立文件夾 mkdir -p /opt/redis/data 快速建立另外五個配置文件 sed "s/7000/7003/g" redis-7000.conf >redis-7003.conf sed "s/7000/7004/g" redis-7000.conf >redis-7004.conf sed "s/7000/7005/g" redis-7000.conf >redis-7005.conf ......
(2)啓動redis,用這六個配置文件
redis-server redis-7000.conf redis-server redis-7001.conf redis-server redis-7002.conf redis-server redis-7003.conf redis-server redis-7004.conf redis-server redis-7005.conf
(3)配置ruby語言環境,腳本一鍵啓動redis-cluster
下載ruby語言的源碼包,編譯安裝 wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz 解壓縮 tar -zxf ruby-2.3.1.tar.gz cd ruby-2.3.1 ./configure --prefix=/opt/ruby/ 釋放makefile make && make install 編譯且安裝 下載安裝ruby操做redis的模塊包 wget http://rubygems.org/downloads/redis-3.3.0.gem gem install -l redis-3.3.0.gem 配置ruby的環境變量 echo $PATH vim /etc/profile 寫入最底行 PATH=$PATH:/opt/ruby/bin/ 讀取文件 source /etc/profile 5.經過ruby的包管理工具去安裝redis包,安裝後會生成一個redis-trib.rb這個命令 一鍵建立redis-cluster 其實就是分配主從關係 以及 槽位分配 slot槽位分配 /root/redis-4.0.10/src/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 6.檢查節點主從狀態 redis-cli -p 7000 info replication redis-cli -p 7001 info replication redis-cli -p 7002 info replication 7.向redis集羣寫入數據,查看數據流向 redis-cli -p 7000 -c #這裏會將key自動的重定向,放到某一個節點的slot槽位中 set name s15 set addr shahe