1. 程式人生 > >redis 五大類型 、持久化方式以及主從(哨兵模式)

redis 五大類型 、持久化方式以及主從(哨兵模式)

重連 smo daemonize als 清除 沒有 次數 追加 con

一、redis 五大類型:

redis 鍵
  keys *
  exists key的名字,判斷某個key 是否存在
  move key db 當前數據庫就沒有了,被移除了
  ttl key 查看還有多少秒過期,-1表示永不過期,-2表示已過期
  type key 看看你的key是什麽類型
redis 字符串
  set、get 、del、append、strlen
  incr、decr 、incrby、 decrby
  getrange、setrange
  setex(set with expire)鍵秒值、setnx(set if not exist)
  mset、 mget 、msetnx
redis list
  lpush、rpush、 lrange
  lpop、rpop
  lindex 按照索引下標獲得元素 llen
  lrem key 刪n個value
  ltrim key 開始index 結束index 截取指定範圍的值後在賦值給key
  rpoplpush 源列表 目的列表
  lset key index value
  linsert key before/after 值1 值2
redis set
  sadd、smembers、 sismember
  scard 獲取集合裏面的元素個數
  srem key value 刪除集合中元素
  srandmember key 某個整數(隨機出幾個數)
  spop key 隨機出棧
  smove key1 key2 在key1裏某個值 作用:將key1裏面的某個值 賦值給key2
  數字集合類:差集 sdiff ;交集 sinter ; 並集 sunion
redis zset

在set的基礎上,加一個score值 之前set是k1 v1 v2 現在zset是k1 score1 v1 score2 v2
  zadd、zrange(withscores)
  zrangebyscore key 開始score 結束score
  zrem key 某score下對應的value值 作用:刪除元素
  zcard、zcount key score區間、zrank key values值 作用:獲得下標值、
  zscore key 對應值,獲得分
  zrevrank key values值,作用是逆序獲得下標值
  zrevrange
  zrevrangebyscore key 結束score 開始score
redis hash
  hset、hget 、hmset、hmget 、hgetall、hdel
  hlen
  hexists key 在key裏面的某個值的key
  hkeys、hvals
  hincrby 、hincrbyfloat
  hsetnx

二、redis 持久化
rdb redis database
aof append only file
共存時,先加載aof,後加載rdb

rdb講解:

rdb : 在指定的時間間隔內將內存中的數據集寫入磁盤,也就是snapshot快照,(rdbsave)
快照恢復是將快照文件直接讀到內存裏(rdbload)

  save 秒鐘 寫操作次數
  觸發條件:1分鐘內改了1萬次;
  5分鐘內改了10次
  15分鐘內改了1次
  單個save或者bgsave命令 直接備份
    save時 只管保存,其他不管,全部阻塞
    bgsave:redis會在後臺異步進行快照操作,快照同時還可以響應客戶端請求,可以通過
    lastsave命令獲取最後一次成功執行快照的時間

如何恢復: 將備份文件移動到redis安裝目錄並啟動服務(config get dir 獲取目錄)

優勢:適合大規模的數據恢復,對數據的完整性和一致性要求不高
劣勢:在一定間隔時間做一次備份,所以redis意外down掉的話,就會丟失最後一次快照後的 所有修改;

   fork的時候,內存中的數據被克隆了一份,大致2倍的膨脹性需要考慮
如何停止: 動態所有停止rdb保存規則的方法:redis-cli config set save " "

aof講解:

aof:解決rdb最後一次數據丟失問題
以日誌的形式來記錄每個寫操作,將redis執行過得所有寫指令記錄下來(讀操作不記錄)
只允許追加文件但不可以改寫文件,redis啟動之初會讀取該文件重新構建數據,換言之, redis重啟的話就根據日誌文件的內容將指令從前到後執行一次以完成數據的恢復工作

aof 保存的是appendonly.aof文件
配置:appendonly 、appendfilename、
   appendfsync包括三個策略:Always:同步持久化,每次發生數據變更會被立即記錄到磁盤 性能較差但數據完整性比較好
                everysec:出廠默認推薦,異步操作,每秒記錄。如果一秒內 宕機,有數據丟失
                No
   No-appendfsync-on-rewrite:重寫時是否可以運用appendfsync,用默認no即可,保證數 據的安全性
   Auto-aof-rewrite-min-size:設置重寫的基準值
   Auto-aof-rewrite-percentage:設置重寫的百分比

aof啟動、修復、恢復
正常恢復: 啟動:設置yes,將有數據的aof文件復制一份保存到對應安裝目錄
     恢復:重啟redis然後重新加載
異常恢復:啟動:設置yes,備份被寫壞的aof文件
     修復:redis-check-aof --fix進行修復
     恢復:重啟redis然後重新加載

rewrite:

   aof采用文件追加方式,文件會越來越大為避免出現此種情況,增加了重寫機制,當aof文件的大小超過所設定的闕值時,redis就會啟動aof文件的內容壓縮,只保留可以恢復數據的最小指令集,可以使用命令bgrewriteaof

重寫原理:

   aof文件持續增長而過大時,會fork處一條新進程來將文件重寫(也是先寫臨時文 件最後再rename),遍歷新進程的內存中數據,每條記錄有一條set語句。重寫 aof文件的操作,並沒有讀取舊的aof文件,而是將整個內存中的數據庫內容用命令 的方式重寫一個新的aof文件,和快照有點類似
觸發機制:redis會記錄上次重寫時的aof大小,默認配置是當aof文件大小是上次rewrite後大 小的一倍且文件大小是64MB

優勢:靈活的配置
劣勢:相同數據集的數據而言aof文件要遠大於rdb文件,恢復速度慢於rdb;aof運行效率要慢於rdb,每秒同步策略效率較好,不同步效率和rdb相同

which one
  rdb持久化方式能夠在指定的時間間隔能對你的數據進行快照存儲
  aof持久化方式記錄每次對服務器的寫的操作,當服務器重啟的時候會執行這些命令來恢復原 始的數據,aof命令以redis協議追加保存每次寫的操作到文件末尾,redis還能對aof文件進行 後臺重寫,使得aof文件的體積不至於過大。

只做緩存:兩種都可以不使用

同時開啟兩種持久化方式:

  這種情況下,redis重啟的時候會優先載入aof文件來恢復原始數據,因為在通常情況下aof文件保存的數據集要比rdb文件保存的數據集 要完整。
rdb的數據不實時,同時使用兩者時服務器重啟也只會找aof文件,那 要不要只使用aof文件?建議不要,因為rdb更適合於備份數據庫( aof在不斷變化不好備份)兩手準備

三、集群

redis 主從復制,讀寫分離 info replication 查看角色
1配(庫)從不配主(庫)
2從庫配置:slaveof 主庫ip 主庫端口號(每次與master斷開之後,都需要重新連接,除非你 配置進redis.conf文件)
3修改配置文件細節操作:拷貝多個redis.conf文件
  開啟daemonize yes
  pid文件名字
  指定端口
  log文件名字
  dump.rdb名字
4 常用三招:4.1 一主二仆
4.2薪火相傳(去中心化,解決主機負擔):

  上一個slave可以是下一個slave的 master,slave同樣可以接受其他salves的連接和同步請求,那 麽該slave作為了鏈條中下一個的master,可以有效減輕master的 的寫壓力
中途變更轉向:會清除之前的數據,重新建立拷貝最新的 。slaveof 新主庫ip 新主庫端口號

4.3反客為主:slaveof no one 使當前數據庫停止與其他數據庫的同步,轉成主庫

復制原理:

  slave啟動成功連接到master後會發送一個sync命令,master接到命令啟動後臺的存盤進程,同時收集所有接受到的用於修改數據集命令,在後臺進程執行完畢之後,master將傳送整個數據文件到slave,以完成一次完全同步。
全量賦值 增量復制 但只要重連master們就會產生一次完全同步,即全量賦值

哨兵模式:反客為主的自動版,能夠後臺監控主機是否故障,如果故障了根據投票數自動將從庫轉換為主庫

怎麽搭建:

配置文件目錄下建立sentinel.conf文件,名字決不能錯;
配置哨兵,填寫內容;
  如:sentinel monitor 被監控的數據庫名字(自定義)127.0.0.1 1
  上面最後一個數字1,標示主機掛掉後slave投票看讓誰接替成為主機,得票數多少後成為主機
啟動哨兵:redis-sentinel sentinel.conf
     windows下啟動哨兵服務redis-server.exe sentinel.conf --sentinel
原有的master掛了 投票新選
重新主從繼續開工,info replication 查看
如果之前掛了的master重啟回來 會變成新master的salve

一組sentinel能同時監控多個master

復制缺點:復制延時

redis 五大類型 、持久化方式以及主從(哨兵模式)