redis的下載及使用

1.下載

方式一(經過yum)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 "^$"

 

2.redis的使用

1.redis的啓動

指定文件啓動服務端架構

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 密碼

2.發佈訂閱實驗

啓動兩個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

3.數據持久化

注:redis關機後數據就沒了,由於沒有開啓數據持久化

1.RDB持久化(經過sava命令觸發)
在自定義的配置文件中添加
dbfilename  dbmp.rdb        #rdb持久化文件
########如下能夠不寫#################
save 900 1                    #rdb機制 每900秒 有1個修改記錄
save 300 10                    #每300秒        10個修改記錄
save 60  10000                #每60秒內        10000修改記錄

 

添加數據後要save才能算備份了

2.AOF持久化

怎麼工做的:把每一步redis操做實記錄到appendonly.aof中

在配置文件 redis.conf中添加最後兩行

AOF持久化配置,兩條參數
​
appendonly yes
appendfsync  always    老是修改類的操做
             everysec   每秒作一次持久化*****
             no     依賴於系統自帶的緩存大小機制

 

注:查看redis的版本

redis-server -v

 

4.redis不重啓RDB數據切換到AOF數據

先準備一個rdb的服務端

CONFIG set appendonly yes  #開啓AOF功能
​
CONFIG SET save ""   #關閉RDB功能

 

這一步的操做是臨時生效,再啓動仍是rdb,因此應該將將aof操做寫入配置文件

appendonly yes
appendfsync everyse

 

5.redis的主從同步

配置主從同步

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的進程

 

6.手動進行主從複製故障切換

檢查從庫主從信息,此時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的主從信息

 

7.主從故障自動切換(redis哨兵)

1.什麼是哨兵

保護redis主從集羣,正常運轉,當主庫掛掉以後,自動在從庫中挑選新的主庫,進行同步

2.主從複製架構

 

3.Redis Sentinel架構

4.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庫再從新啓動會變成從節點

 

8.redis-cluster配置(集羣)

1.做用

對於數據量太大,訪問量太大,併發量太大的問題,經過redis-cluster搭建集羣來解決該類問題

2.數據分佈原理

 

分佈式數據庫首要解決把整個數據集按照分區規則映射到多個節點的問題,即把數據集劃分到多個節點上,每一個節點負責整個數據的一個子集。

常見的分區規則有哈希分區和順序分區。Redis Cluster採用哈希分區規則,所以接下來會討論哈希分區規則。

  • 節點取餘分區

  • 一致性哈希分區

  • 虛擬槽分區(redis-cluster採用的方式)

(1)分區規則一:順序分區

 

(2)分區規則二:哈希分區

例如按照節點取餘的方式,分三個節點
​
1~100的數據對3取餘,能夠分爲三類
​
餘數爲0
餘數爲1
餘數爲2
 
​
那麼一樣的分4個節點就是hash(key)%4
​
節點取餘的優勢是簡單,客戶端分片直接是哈希+取餘

 

(3)分區規則三:虛擬槽分區

虛擬槽分區巧妙地使用了哈希空間,使用分散度良好的哈希函數把全部的數據映射到一個固定範圍內的整數集合,整數定義爲槽(slot)。
​
Redis Cluster槽的範圍是0 ~ 16383。
​
槽是集羣內數據管理和遷移的基本單位。採用大範圍的槽的主要目的是爲了方便數據的拆分和集羣的擴展,
​
每一個節點負責必定數量的槽。

 

 

3.建立開啓redis-cluster

(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:70056.檢查節點主從狀態
    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  
相關文章
相關標籤/搜索