Redis的數據管理持久化

一、持久化

因爲Redis的數據都在內存中,爲了使得Redis在重啓後仍能保證數據不丟失,需要將數據從內存中以某種形式同步到硬盤中,這一過程就是持久化。
Redis支持兩種方式的持久化:RDB方式、AOF方式
1、RDB方式
RDB持久化方式是通過快照完成的,當符合一定條件時Redis會自動將內存的所有數據進行快照並存儲在硬盤上。
進行快照的條件可以由用戶在配置文件中自定義,由兩個參數構成:時間和改動的鍵的個數。當在指定時間內,被更改的鍵的個數大於指定的數值時就會進行快照。
RDB是Redis默認的持久化方式。
快照的過程

  • Redis使用fork函數複製一份當前進程(父進程)的副本(子進程)
  • 父進程繼續接受並處理客戶端發來的命令,而子進程開始講內存中的數據寫入硬盤的臨時文件中
  • 當子進程寫入完所有的數據後,會用該臨時文件替換舊的RDB文件,至此,一次快照操作完成

2、AOF方式
開啓AOF持久化後每執行一條會更改Redis中的數據的命令,Redis就會將該命令寫入硬盤中的AOF文件。

二、複製

一臺服務器上的數據庫更新後,自動將更新的數據同步到其他服務器上。
redis-server –port 6380 –slaveof 127.0.0.1 6379

此時在數據庫中的任何變化都會同步到從數據庫
或者SLAVEOF 127.0.0.1 6379 命令同樣可以設置哪一個主數據庫
通過複製的功能可以實現讀寫分離以提高服務器的負載能力,主數據庫負責寫入,而從數據庫負責讀取。

  • 從數據庫的數據持久化
    另一個相對耗時的操作是持久化,爲了提高性能,可以通過複製功能建立一個(或若干個)從數據庫,並在從數據庫中啓用持久化,同時在主數據庫禁用持久化。當從數據庫崩潰時,重啓主數據庫會自動將數據同步過來,所以無需擔心數據的丟失。而當主數據庫崩潰時,需要在從數據庫中使用slaveof no one 命令將從數據庫提升爲主數據庫繼續服務,並在原來的主數據庫啓動後,使用slaveof 命令,將其設置爲新的主數據庫的從數據庫,即可將數據同步回來。

三、安全性

1、Redis默認配置會接受來自任何地址發送過來的請求,要修改這一配置,在配置文件中修改bind參數
bind 127.0.0.1
2、配置文件中的requierpass參數,爲Redis設置密碼,發送密碼需要 AUTH password
3、重命名Redis的命令

  • Redis支持在配置文件中將命令重命名,比如將flushall命令重命名爲一個比較複雜的名字,以保證只有自己的應用可以使用該命令,如下示例:
    rename -command FLUSHALL iqoejduedncjde
  • 如果希望直接禁用某個命令可以將命令重寫爲空字符串
    rename -command FLUSHALL “”
  • 注意,無論設置密碼還是重命名命令,都需要保證配置文件的安全性,否則就沒有任何意義了。

四、通信協議

Redis支持兩種協議:一種是二進制安全的統一協議,一種是比較直觀的便於在telnet程序中輸入的簡單協議。
telnet host port
Redis的AOF文件和主從複製時,主數據庫向從數據庫發送的內容都使用了統一請求協議。如果要開發一個和Redis直接通信的客戶端,推薦使用此協議。

五、管理工具

1、耗時命令日誌
配置文件slowlog-log-slower-than參數設置時長限制
SLOWLOG GET 查看耗時的命令信息
2、命令監控
MONITOR 監控打印所有的命令操作,非常耗費性能
3、phpRedisAdmin
支持以樹形結構查看鍵列表,編輯鍵值,導入/導出數據庫,查看數據庫信息和查看鍵信息功能
4、Rdbtools
Redis快照文件解析器,根據快照文件導出JSON數據文件、分析Redis中每個鍵的佔用空間情況等
rdb –command json /path/to/dump.rdb > output_filename.json

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章