期末测试-这些 Redis 核心知识,你都掌握了吗?
# 选择题
# 单选题
在秒杀场景下,你可以在下面哪个环节应用 Redis?
前端静态页面缓存
秒杀商品
拦截恶意
数据库订单异常处理
Redis 6.0 开始支持多 IO 线程,关于多线程 IO 的描述,以下哪个说法是正确的?
- 多 IO 线程可以并行执行 GET、SET 等请求操作
- Redis 6.0 中默认启用了多 IO 线程
- 可以使用 io-threads 配置项设置多线程的个数
- 可以使用 io-threads-enable 来启用或关闭多线程机制
当使用 RESP 2 协议的客户端想要使用 Redis 6.0 中推出的客户端缓存功能,可以使用以下哪和模式?
- direct
- redirect
- broadcast
- 普通模式
NVM 是近年来存储设备发展的一个大变化,会对 Redis 等系统软件产生巨大影响,以下哪个特性不是非易失存储器件具备的特性?
- 读延迟和 DRAM 一样
- 写延迟接近 DRAM
- 可以持久化保存数据
- 密度大,容量大
假设一个客户端的 ID 号是 100,该客户端想使用名为
mylock 的 key 作为锁变量,并设置锁变量的过期时间是 10s,请问应该使用以下哪个命令来进行加锁操作?- SET mylock 100 PX 10
- SET mylock 100 PX 10000
- SET mylock 100 NX EX 10
- SET mylock 10 NX EX 100
当 Redis 用作缓存时,如果同时有大量数据失效,那么此时会发生什么问题?
- 缓存击穿
- 缓存穿透
- 缓存雪崩
- 没有问题
在使用 Redis 作为缓存时,如果有一个应用的负载是对一个大数据集中的所有数据扫描一遍,那么使用下面哪种数据淘汰策略会更加合适?
- allkeys-lru
- allkeys-Ifu
- allkeys-random
- noeviction
在应用 Redis 切片集群时,使用了 Hash Tag 对数据进
行切片,现有数据的 key 是 user:info:{330},value 是
1024,请问切片集群使用数据的哪一部分内容计算 CRC 值?- user:info:{330}
- 1024
- 330
- info
当 Redis 用作只读缓存时,如果数据发生了修改,以下哪个说法是正确的?
- 通过先删除缓存值,后更新数据库值,就可以避免数据不一致问题
- 通过先更新数据库,再删除缓存,就可以避免数据不一致问题
- 在先删除缓存值,后更新数据库时,如果有并发读操作,可以使用重试数据库更新操作,避免数据不一致
- 在先删除缓存值,后更新数据库时,如果有并发读操作,可以使用延迟双删,来应对数据不一致问题
以下哪个命令不属于 Redis 事务机制所需的关键命令?
- MULTI
- SET
- EXEC
- DISCARD
# 多选题
对于切片集群来说,数据倾斜是需要关注的问题,以下
哪些原因会引起数据倾斜?存在 bigkey
RDB 快照的生成
数据分布不均衡
Hash Tag 的使用
关于 Redis 6.0 的 ACL 控制机制的描述,哪些是不正确的?
- ACL 支持不同用户用不同密码登录
- ACL 只支持按一类命令的粒度设置访问规则
- ACL 可以禁止客户端调用所有命令操作
- ACL 使用短横线 - 和 key 前缀,来表示控制访问的 key
为了保证数据在主从库间的一致性,我们需要将数据的过期时间设置为绝对时间,可以使用以下哪些命令来进行设置?
- EXPIRE
- PEXPIRE
- EXPIREAT
- PEXPIREAT
大面这些关于 Redis 事务机制的描述,哪些是正确的?
- Redis 事务可以保证原子性
- Redis 事务可以保证一致性
- Redis 事务不能保证隔离性
- Redis 事务无法保证持久性
假设我们将 Redis 的 min-slaves-to-write 配置项设置
为 1,哨兵的 down-after-milliseconds 设置为 15s
哨兵主从切换需要 5s。主库因为某些原因卡住了 18s
那么,min-slaves-max-lag 设置为多少时,可以避免
脑裂?- 15
- 16
- 23
- 33
假设有一个业务应用想使用如下代码实现分布式锁,你觉得,这段代码有什么问题吗?
SETNX lock key 1 DO THINGS DEL lock key
1
2
3- 没有对锁变量设置过期时间,会导致锁可能一直被持有
- 应该使用 SET 命令加上 NX 选项
- lock key 这个键值对的键名称应该改为客户端的唯一 ID
- 锁变量可能被并发的客户端释放掉
假设有多个客户端同时读取键值对 a、b 的值,并对键值对 c 的值做加 1 操作,下面哪些代码片段能保证数据
的正确性?GET a GET b INC C
1
2
3// 以下 5 句使用 Lua 脚本实现 GET a GET b GET C c=c+1 SET C
1
2
3
4
5
6GET a GET b // 以下三句用 Lua 脚本实现 GET C c=c+1 SET C
1
2
3
4
5
6GET a GET b // 以下三句用 Lua 脚本实现 GET C c=c+1 SET C
1
2
3
4
5
6
Pika 是一个基于 SSD 实现的大容量键值数据库,下面
这些关于 pika 的说法中,有哪些是正确的?- Pika 虽然可以实现大容量存储,但是数据类型
和 Redis 不兼容 - pika 内部使用 RocksDB 来保存落盘的数据
- pika 使用多线程来处理客户端请求
- pika 使用 binlog 机制实现写命令的增量同步
不过,和 Redis 一样,仍然会受内存缓冲区的大小限制
- Pika 虽然可以实现大容量存储,但是数据类型
下面这些关于 Codis 集群的描述,哪些是正确的?
- Codis 集群默认使用 16384 个 Sot 进行 key 的分配
- 为了保证迁移数据的完整性,Codis 只支持同步迁移
- Codis proxy 接收客户端请求,并进行请求转发
- Codis 集群可以使用 etcd 保存集群元数据
Redis 缓存一旦发生缓存击穿,就会导致大量请求发送到数据库层进行处理,可能会导致数据库压力过大而崩溃,以下哪些方法可以应对缓存击穿问题,缓解数据库压力?
- 给数据的过期时间增加随机量,避免同时过期
- 数据库限流
- 在业务应用接入层检查是否有恶意请求
- 不给热点数据设置过期时间