Redis基礎及進階

1. redis安裝

redis是內存型數據庫html

  • 數據默認寫入到內存,若是斷電,服務器宕機,redis進程掛掉,數據會丟失
  • selenium操做瀏覽器時,要注意瀏覽器資源釋放,防止內存泄漏,崩潰
  • with open() 默認close關閉文件句柄python

  • word 工具 ,沒保存前,數據都放在內存裏,保存後,持久化到磁盤上,永久存在mysql

  • mysql是文件型數據庫,默認持久化到磁盤上nginx

  1. redis安裝學習web

    1.yum安裝 ,最簡單,配置yum源,yum倉庫才能夠
    2.源碼編譯安裝, 指定安裝路徑,自定製第三方擴展模塊功能(nginx http  web 80,  443 https, openssl功能擴展 )
    3.rpm軟件包手動安裝,很垃圾,手動解決依賴關係,不適用
  2. 編譯安裝redis,三部曲redis

    解決編譯安裝所需的依賴環境
    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
    1.下載源代碼包
     wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    
    2.解壓縮
     tar -zxvf redis-4.0.10.tar.gz
    
    3. 
    ./configure --prefix=/opt/redis/   #釋放makefile,告訴gcc編譯器,redis的安裝路徑 
    
    若是默認沒有configure腳本,出現了makefile,直接make&&make install 安裝便可
    
    4.編譯且安裝
    make && make install
  3. 編譯完成後,便可使用redis
    啓動redis服務端sql

    redis-server 直接執行,便可啓動服務端,可是,這樣很不安全,容易被攻擊數據庫

  4. 指定配置文件,安全的啓動redis服務端vim

    • 更改啓動端口
    • 添加redis密碼
    • 開啓redis安全模式

    redis的默認配置文件是 redis.conf瀏覽器

    #過濾出配置文件的有益信息(去除空白行和註釋行)
    grep -v "^#" redis.conf  |grep -v "^$"
    
    #將redis.conf文件內容輸出到s21redis.conf文件中:
    grep -v "^#" redis.conf  |grep -v "^$" >s21redis.conf

    指定配置文件啓動
    文件內容:

    bind 192.168.182.130    #綁定服務端地址 
    protected-mode yes    #安全模式 
    port 6800    #端口 
    requirepass  haohaio    #密碼                                                                       
    daemonize yes    #後臺運行 
    pidfile /var/run/redis_6379.pid    #進程id文件
    loglevel notice    #日誌等級
    logfile ""
    #指定文件啓動:
    redis-server s21redis.conf
    
    #其中:輸入auth 輸入密碼 haohaio

2. 數據類型

redis是一種高級的key:value存儲系統,其中value支持五種數據類型

  • 字符串(strings)
  • 散列(hashes)
  • 列表(lists)
  • 集合(sets)
  • 有序集合(sorted sets)

經常使用命令 :

keys *                                          查看全部key
type key                                      查看key類型
expire key seconds                     過時時間
ttl key                                          查看key過時剩餘時間        -2表示key已經不存在了
persist                                         取消key的過時時間   -1表示key存在,沒有過時時間
exists key                                    判斷key存在    存在返回1    不然0
del keys                                       刪除key    能夠刪除多個
dbsize                                          計算key的數量
flushdb                                        清除redis全部key,慎用
flushdb                                        清除redis全部key,慎用
flushdb                                        清除redis全部key,慎用
  1. 字符串類型,經過set命令,設置字符串類型的key
    strings類型
    set    設置key
    get 獲取key
    append 追加string
    mset 設置多個鍵值對
    mget 獲取多個鍵值對
    del 刪除key
    incr 遞增+1
    decr 遞減-1

  2. list類型,雙向隊列
    lpush 從列表左邊插
    rpush 從列表右邊插
    lrange 獲取必定長度的元素 lrange key start stop
    ltrim 截取必定長度列表
    lpop 刪除最左邊一個元素
    rpop 刪除最右邊一個元素
    lpushx/rpushx key存在則添加值,不存在不處理

  3. set集合

    redis的集合,是一種無序的集合,集合中的元素沒有前後順序。

    集合相關的操做也很豐富,如添加新元素、刪除已有元素、取交集、取並集、取差集等。咱們來看例子:

    sadd/srem 添加/刪除 元素
    sismember 判斷是否爲set的一個元素
    smembers 返回集合全部的成員
    sdiff 返回一個集合和其餘集合的差別
    sinter 返回幾個集合的交集
    sunion 返回幾個集合的並集

  4. 哈希數據結構

    hashes即哈希。哈希是從redis-2.0.0版本以後纔有的數據結構。hashes存的是字符串和字符串值之間的映射,好比一個用戶要存儲其全名、姓氏、年齡等等,就很適合使用哈希。

    hset 設置散列值
    hget 獲取散列值
    hmset 設置多對散列值
    hmget 獲取多對散列值
    hsetnx 若是散列已經存在,則不設置(防止覆蓋key)
    hkeys 返回全部fileds
    hvals 返回全部values
    hlen 返回散列包含域(field)的數量
    hdel 刪除散列指定的域(field)
    hexists 判斷是否存在

3. 發佈訂閱

PUBLISH channel msg
將信息 message 發送到指定的頻道 channel

SUBSCRIBE channel [channel ...]
訂閱頻道,能夠同時訂閱多個頻道

UNSUBSCRIBE [channel ...]
取消訂閱指定的頻道, 若是不指定頻道,則會取消訂閱全部頻道

PSUBSCRIBE pattern [pattern ...]
訂閱一個或多個符合給定模式的頻道,正則匹配

PUNSUBSCRIBE [pattern [pattern ...]]
退訂指定的規則, 若是沒有參數則會退訂全部規則

PUBSUB subcommand [argument [argument ...]]
查看訂閱與發佈系統狀態

4. redis持久化

------防止數據丟失,持久化到本地,以文件形式保存

持久化的方式 ,兩種 aof和 rdb模式

1.rdb

  1. 觸發機制,

    1.手動執行save命令
    2.或者配置觸發條件  save  200   10   #在200秒中內,超過10個修改類的操做
  2. 創建redis配置文件,開啓rdb功能

    配置文件 s21_rdb.conf 內容以下 ,有關rdb的配置參數是 dbfilename dbmp.rdb ,一個是 save 900 1

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379                      #定義持久化文件存儲位置
    dbfilename  s21redis.rdb         #rdb持久化文件
    bind  127.0.0.1                     #redis綁定地址
    requirepass redhat                 
    save 900 1                         
    save 300 10                          
    save  60  10000                       
    
    save  20  2  #在20秒內,超過2個修改類的操做

2.aof

--------將你的修改類的操做命令,追加到日誌文件中

修改aof配置文件,添加以下參數,核心功能參數是

appendonly yes
appendfsync  always    老是修改類的操做
             everysec   每秒作一次持久化
             no     依賴於系統自帶的緩存大小機制

建立aof配置文件s21aof.conf ,內容以下

3.rdb模式下的redis持久化,不重啓切換爲 aof模式

環境準備
1.準備一個有數據的rdb模式的redis數據庫
    準備rdb配置文件
        daemonize yes
        port 6379
        logfile /data/6379/redis.log
        dir /data/6379                   #定義持久化文件存儲位置
        dbfilename  s21redis.rdb             #rdb持久化文件
        bind  127.0.0.1                  #redis綁定地址
        requirepass redhat                    
        save 900 1                            
        save 300 10                         
        save  60  10000                      

        save  20  2  #在20秒內,超過2個修改類的操做

    #詳細看博客https://www.cnblogs.com/pyyu/p/10061526.html

2.注意想要永久切換爲aof,還得修改配置文件方可

5. 主從複製

  1. redis支持多實例的功能,一臺機器上,能夠運行多個單個的redis數據庫

    環境準備,運行3個redis數據庫,達到 1主 2從的配置

    主庫  6379.conf 
     port 6379
     daemonize yes
     pidfile /data/6379/redis.pid
     loglevel notice
     logfile "/data/6379/redis.log"
     dbfilename dump.rdb
     dir /data/6379
    
    從庫 6380
     port 6380
     daemonize yes
     pidfile /data/6380/redis.pid
     loglevel notice
     logfile "/data/6380/redis.log"
     dbfilename dump.rdb
     dir /data/6380
     slaveof  127.0.0.1  6379 
    
    從庫 6381  
     port 6381
     daemonize yes
     pidfile /data/6381/redis.pid
     loglevel notice
     logfile "/data/6381/redis.log"
     dbfilename dump.rdb
     dir /data/6381
     slaveof  127.0.0.1  6379
  2. 開啓主從複製功能

    redis-cli info #查看數據庫信息
    redis-cli info replication

    在6380 和6381數據庫上 ,配置主從信息,經過參數形式修改配置,臨時生效,注意要寫入配置文件

    redis-cli -p 6380 slaveof 127.0.0.1 6379
    redis-cli -p 6381 slaveof 127.0.0.1 6379

    此時檢查6379的複製信息,以及6380 6381的複製信息

    redis-cli -p 6380 info replication 
    redis-cli -p 6381 info replication

    主從複製是 讀寫分離的,master可寫, slave只讀

  3. 模擬主從複製故障,手動切換master-slave身份

    1.殺死6379進程 ,幹掉主庫 
    
    2.手動切換 6381爲新的主庫,須要先關閉它的從庫身份
    redis-cli -p 6381  slaveof no one 
    
    3.修改6380的新主庫是 6381
    redis-cli -p 6380 slaveof  127.0.0.1 6381

6. redis哨兵

redis-sentinel功能

1.環境準備

三個redis數據庫實例 ,配置好 1主 2從的配置

6379.conf
    port 6379
    daemonize yes
    logfile "6379.log"
    dbfilename "dump-6379.rdb"
    dir "/var/redis/data/"

6380.conf 
    port 6380
    daemonize yes
    logfile "6380.log"
    dbfilename "dump-6380.rdb"
    dir "/var/redis/data/"
    slaveof 127.0.0.1 6379

6381.conf 
    port 6381
    daemonize yes
    logfile "6381.log"
    dbfilename "dump-6381.rdb"
    dir "/var/redis/data/"
    slaveof 127.0.0.1 6379

三個redis哨兵進程,指定好,檢測着誰
也是準備三個配置文件,內容以下

vim sentinel-26379.conf  
    port 26379  
    dir /var/redis/data/
    logfile "26379.log"

    // 當前Sentinel節點監控 192.168.182.130:6379 這個主節點
    // 2表明判斷主節點失敗至少須要2個Sentinel節點節點贊成
    // mymaster是主節點的別名
    sentinel monitor s21ms  0.0.0.0 6379 2

    //每一個Sentinel節點都要按期PING命令來判斷Redis數據節點和其他Sentinel節點是否可達,若是超過20000毫秒20s且沒有回覆,則斷定不可達
    sentinel down-after-milliseconds s21ms  20000

    //當Sentinel節點集合對主節點故障斷定達成一致時,Sentinel領導者節點會作故障轉移操做,選出新的主節點,原來的從節點會向新的主節點發起復制操做,限制每次向新的主節點發起復制操做的從節點個數爲1
    sentinel parallel-syncs s21ms 1

    //故障轉移超時時間爲180000毫秒
    sentinel failover-timeout s21ms 180000


#三個哨兵的配置文件,如出一轍,僅僅是端口的區別  
#三個哨兵的配置文件,如出一轍,僅僅是端口的區別  
#三個哨兵的配置文件,如出一轍,僅僅是端口的區別  

sed "s/26379/26380/g" sentinel-26379.conf >sentinel-26380.conf
配置sentinel-26380.conf  

sed "s/26379/26381/g" sentinel-26379.conf >sentinel-26381.conf
配置sentinel-26381.conf

2.分別啓動 三個redis數據庫, 以及三個 哨兵進程 ,注意 ,哨兵第一次啓動後,會修改配置文件,若是錯了,得刪除配置文件,從新寫
2.分別啓動 三個redis數據庫, 以及三個 哨兵進程 ,注意 ,哨兵第一次啓動後,會修改配置文件,若是錯了,得刪除配置文件,從新寫
2.分別啓動 三個redis數據庫, 以及三個 哨兵進程 ,注意 ,哨兵第一次啓動後,會修改配置文件,若是錯了,得刪除配置文件,從新寫

配置文件在這裏

sentinel-26379.conf 
port 26379  
dir /var/redis/data/
logfile "26379.log"
sentinel monitor s21ms  127.0.0.1  6379 2
sentinel down-after-milliseconds s21ms  20000
sentinel parallel-syncs s21ms 1
sentinel failover-timeout s21ms 180000
#加一個後臺運行
daemonize yes 
    
    #僅僅是端口的不一樣
sentinel-26380.conf


sentinel-26381.conf

#啓動
 redis-sentinel sentinel-26379.conf 
 redis-sentinel sentinel-26380.conf 
 redis-sentinel sentinel-26381.conf

3.驗證哨兵是否正常

redis-cli -p 26379 info sentinel

看到master0:name=s21ms,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
表示沒問題

4.幹掉主庫 ,檢查主從切換狀態

kill -9 12749
 ps -ef|grep redis
 redis-cli -p 6380 info replication
 redis-cli -p 6381 info replication
 redis-cli -p 6380 info replication
 redis-cli -p 6381 info replication
相關文章
相關標籤/搜索