自学内容网 自学内容网

Day05 Redis 面试题 下

Redis 面试题

21、Redis 集群的主从复制模型是怎样的?

答:为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所 以集群使用了主从复制模型,每个节点都会有 N-1 个复制品.

22、Redis 集群会有写操作丢失吗?为什么?

答:Redis 并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可 能会丢失写操作。

23、Redis 集群之间是如何复制的?

答:异步复制

24、Redis 集群最大节点个数是多少?

答:16384 个。

25、Redis 集群如何选择数据库?

答:Redis 集群目前无法做数据库选择,默认在 0 数据库。

26、怎么测试 Redis 的连通性?

答:使用 ping 命令。

27、怎么理解 Redis 事务?

1)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

2)事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

28、Redis 事务相关的命令有哪几个?

答:MULTI、EXEC、DISCARD、WATCH

29、Redis key 的过期时间和永久有效分别怎么设置?

答:EXPIRE 和 PERSIST 命令。

30、Redis 如何做内存优化?

答:尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的 web 系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的 key,而是应该把这个用户的所有信息存储到一张散列表里面.

31、Redis 回收进程如何工作的?

答:一个客户端运行了新的命令,添加了新的数据。Redi 检查内存使用情况,如 果大于 maxmemory 的限制, 则根据设定好的策略进行回收。一个新的命令被执 行,等等。所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地 回收回到边界以下。如果一个命令的结果导致大量内存被使用(例如很大的集合 的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。

32、都有哪些办法可以降低 Redis 的内存使用情况呢?

答:如果你使用的是 32 位的 Redis 实例,可以好好利用 Hash,list,sorted set,set 等集合类型数据,因为通常情况下很多小的 Key-Value 可以用更紧凑的方式存放 到一起。

33、Redis 的内存用完了会发生什么?

答:如果达到设置的上限,Redis 的写命令会返回错误信息(但是读命令还可以正 常返回。)或者你可以将 Redis 当缓存来使用配置淘汰机制,当 Redis 达到内存 上限时会冲刷掉旧的内容。

34、一个 Redis 实例最多能存放多少的 keys?List、Set、

Sorted Set 他们最多能存放多少元素?

答:理论上 Redis 可以处理多达 232 的 keys,并且在实际中进行了测试,每个实 例至少存放了 2 亿 5 千万的 keys。我们正在测试一些较大的值。任何 list、set、 和 sorted set 都可以放 232 个元素。换句话说,Redis 的存储极限是系统中的可 用内存值。

35、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如

何保证 redis 中的数据都是热点数据?

答:Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

相关知识:Redis 提供 6 种数据淘汰策略:

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最 少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过 期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意 选择数据淘汰

allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据


原文地址:https://blog.csdn.net/weixin_69595694/article/details/140539134

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!