Redis安全與持久化(適合小白閱讀)


前言:Redis的使用越來越重要、以下僅為個人學習的點點記錄、僅供參考。

一、簡單的redis安全性設置

1. 生產環境的redis最好建議在redis配置文件中設置bind。配置允許指定的ip登陸redis。

//下面ip僅供參考、具體根據您個人的生產環境進行配置
bind   127.0.0.1

2. 在redis.conf或者命令行中給redis設置密碼(建議密碼盡量設置復雜一些)

//redis.conf中添加配置
requirepass   "your password"

//或者執行命令
redis> CONFIG set requirepass "your password"

//重啟完redis后使用 redis-cli -a your password 應該就可以成功使用密碼登陸redis

一、redis持久化說明

1. RDB方式持久化方式 (save 和 bgsave方式)

  • save為同步的方式保存內存中的數據快照到磁盤。由於redis是單進程的。因此這種方式阻塞了redis client對redis的訪問。
  • bgsave方式、redis會fork出一個子進程來處理快照保存。
  • RDB持久化方式都是將內存數據完整的寫入磁盤上一個臨時RDB文件中。通常為 dump.rdb文件(保存着二進制數據),使用locate dump.rdb找到這個文件可以使用以下命令查看文件內容。或者通過redis.conf中的dir xxxxx配置也可以查看你的rdb文件保存位置。
  • localhost:redis miaoshiqian [master] $ od -c dump.rdb
    0000000    R   E   D   I   S   0   0   0   6 376  \0  \0 004   m   i   a
    0000020    o  \a   s   h   i   q   i   a   n 377   C 355   N   z 264 226
    0000040  243   a                                                        
    0000042
  • dump.rdb是經過壓縮的二進制文件、它占用的空間小於數據在內存中占用空間。
  • 以下簡單介紹下和RDB持久化方式關系較大的幾個配置項:
  • //dir配置rdb二進制文件保存再磁盤的那個位置
    dir /usr/local/var/db/redis/
    
    //dbfilename配置保存的文件名
    dbfilename dump.rdb
    
    //rdbcompression 配置是否使用壓縮來保存二進制文件 默認yes
    rdbcompress  yes
    
    //save配置(最重要)
    save 900 1 //900秒之內如果有1個鍵被修改的話進行快照
    save 300 10 //300秒之內如果有10個鍵被修改的話進行快照
    save 60 10000 //60秒之內如果有10000個鍵被修改的話進行快照

    由於redis在啟動的時候會讀入磁盤上面的rdb文件、以達到數據恢復。從而達到持久化的目的,因此像RDB這種從內存問磁盤dump快照的方式有幾個缺點:

  • 如果當redis異常死掉時,最近的數據會丟失(最后一次保存快照以后的所有數據修改會丟失、丟失數據的多少視你save策略的配置),所以這是它最大的缺點,當業務量很大時,丟失的數據是很多的。
  • 快照每次都是將內存中的全部數據dump到磁盤上面。勢必導致磁盤大量的IO開銷。數據量越大越明顯。

2. AOF持久化方式

  • 說白了其實aof方式就是一個xxx.aof文件保存下了所以redis執行的寫命令。因此在redis啟動的時候、只需要按順序執行該文件中保存的全部寫命令就可以實現數據持久化。
  • aof的實現分為 “命令追加”、“文件寫入”、“文件同步” 三個步驟。
  • 命令追加:redis再執行一條寫命令后,會以協議格式寫入redis在內存中開辟的一塊aof_buf緩沖區的末尾。
  • 命令寫入與同步:服務器結束一個事件循環之前調用flushAppendOnlyFile函數、考慮是否將aof_buf內的內容寫入保存到aof文件里面。此函數的行為由redis.conf中的appendfsync 的配置項來決定的。
  • appendfsync的配置項的值說明如下:
  • //將aof_buf中的所有內容寫入並同步到aof
    appendfsync  always
    
    //將aof_buf中所有內容寫入aof文件、是否同步取決於上次同步到當前的時間是否超過1s。超過則同步。且同步是由一個專門的線程來完成的。
    appendfsync  everysec
    
    //講所有aof_buf緩沖區中的內容寫入aof文件。但是不進行同步操作。
    appendfsync  no

    AOF持久化相關的redis配置項除了上面的appendfsync以外還有以下幾個:

  • //決定是否開啟aof持久化。默認為no。redis默認使用rdb實現持久化。
    appendonly no
    
    //同rdb種的dir配置一樣、決定了aof文件存放再哪里。
    dir /usr/local/opt/redis/
    
    //aof的文件名
    appendfilename   appendonly.aof
    
    //再aof文件的大小超過上次重寫時aof文件的大小的 百分之多少時會進行重寫。
    auto-aof-rewrite-percentage  100
    
    //當aof文件至少達到多大時才進行重寫
    auto-aof-rewrite-min-size  64mb
    
    //重寫概念的簡單解釋如下:
    //由於aof文件中保存各種寫命令、而會導致文件迅速膨脹。其實很多寫命令可以整理為少數幾條寫命令而達到一樣的效果。重寫簡單講就是負責對冗長的寫命令進行整理。auto-aof-rewrite-min-size 限制大小就意味着比這個配置小的aof文件沒有整理的必要。

     以上僅僅為個人總結~,各位選擇性的吸收即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM