读
第五章《实践》
第七章《持久化》
总结
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