2018/08/14 《Redis 入門指南》 學習筆記(三)
讀
第五章《實踐》
第七章《持久化》
總結
PS:
在實踐章節涉及到了很多語言 Node/Python等。因為這些語言目前還沒有涉及。所以只挑選有關的 PHP 章節來做講解。
1:PHP 常用的客戶端有哪些?區別是什麽?
- 常用的 Redis 客戶端,官方推薦有兩種 Redis / Predis 兩種。
- Predis 是使用 PHP 來實現原生客戶端。不需要安裝擴展,Composer / Git 可以直接拉取使用。
- Redis 是一個 C 的擴展。
- 除非執行大量命令,否則兩者差別並不大。
2:Redis 管道命令簡單使用
- 在之前的章節中已經講解管道命令的優點和適用場景,今天著重的來實現看下。
- 試驗為 Predis 。
- 官方提供了兩種方式,也很簡單,看一下就明白
// Executes a pipeline inside the given callable block: $responses = $redis->pipeline(function ($pipe) { for ($i = 0; $i < 1000; $i++) { $pipe->set("key:$i", str_pad($i, 4, ‘0‘, 0)); $pipe->get("key:$i"); } });// Returns a pipeline that can be chained thanks to its fluent interface: $responses = $redis->pipeline()->set(‘NAME‘, ‘bar‘)->get(‘NAME‘)->execute();
3:RDB 的本質是通過什麽方式進行持久化的?
- 本質是通過 快照 方式來進行持久化。
4:RDB 生成快照的方式有哪些?
- 配置自動生成快照
- redis.conf 配置文件
- 解讀:15分鐘內(900秒)有一個鍵被修改,則生成快照。其余同理
- 執行 SAVE / BGSAVE 生成快照
- 在執行 SAVE 時, Redis會同步執行快照,同時堵塞其他客戶端命令,所以要避免在生產環境中直接使用。
- 手動快照推薦 BGSAVE ,後臺執行,對其他客戶端無影響。
- 執行 LASTSAVE 可以查看最近一次快照的時間戳。
5:RDB 生成快照的原理是什麽?
- Redis 在執行快照時使用 fock 函數復制一份當前進程(父進程)的副本(子進程);
- 父進程繼續接受客戶端請求,子進程寫入。
- 子進程寫入完成之後,用臨時文件替換舊的 RDB 文件,一次快照完成。
6:RDB 其他
- 默認的話 RDB 是經過壓縮的,可以 配置 rdbcompression 來關閉壓縮,減少CPU消耗
- 可以通過 dir 和 rdbfilename 來確定rdb的存儲路徑和名稱
4:AOF 是默認開啟的麽?如何開啟?
- AOF 默認是不開啟持久化的。配置 appendonly 開啟。
5:AOF 隨著時間文件越來越大,是如何處理的?
- Redis 可以使用 rewrite 重寫日誌
- auto-aof-rewrite-percentage 100 // 大於上次重寫的百分比
- auto-aof-rewrite-min-size 64mb // 允許重寫的最小
5:AOF 是當時就寫入磁盤了麽?
- 沒有,由於操作系統的緩存機制,AOF 進入了系統緩存,會進入 30S 一次的同步操作。
- 配置 appendfsync
- always 每次同步,最安全,最慢。
- everysec 每秒一次,默認
- no 不同步,使用系統同步,不推薦~
6:當 AOF 和 RDB 同時存在時,優先恢復哪個?
- AOF
2018/08/14 《Redis 入門指南》 學習筆記(三)