乐趣区

关于java:面试题百日百刷Redis篇三


锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题 app、小程序现已上线,官网地址:https://www.demosoftware.cc/#…。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步,吊打面试官! 接下来的是今日的面试题:

====Redis 中 Pipeline 有什么益处,为什么要用 pipeline?
能够将屡次 IO 往返的工夫缩减为一次,前提是 pipeline 执行的指令之间没有因果相关性。应用 redis-benchmark 进行压测的时候能够发现影响 redis 的 QPS 峰值的一个重要因素是 pipeline 批次指令的数目。

==== 是否应用过 Redis 集群,集群的原理是什么?

  1. 、Redis Sentinal 着眼于高可用,在 master 宕机时会主动将 slave 晋升为 master,持续提供服务。
  2. 、Redis Cluster 着眼于扩展性,在单个 redis 内存不足时,应用 Cluster 进行分片存储。

====Redis 集群计划什么状况下会导致整个集群不可用?
有 A,B,C 三个节点的集群, 在没有复制模型的状况下, 如果节点 B 失败了,那么整个集群就会认为短少 5501-11000 这个范畴的槽而不可用。

====Redis 反对的 Java 客户端都有哪些?官网举荐用哪个?
Redisson、Jedis、lettuce 等等,官网举荐应用 Redisson。

====Jedis 与 Redisson 比照有什么优缺点?
Jedis 是 Redis 的 Java 实现的客户端,其 API 提供了比拟全面的 Redis 命令的反对;Redisson 实现了分布式和可扩大的 Java 数据结构,和 Jedis 相比,性能较为简单,不反对字符串操作,不反对排序、事务、管道、分区等 Redis 个性。Redisson 的主旨是促成使用者对 Redis 的关注拆散,从而让使用者可能将精力更集中地放在解决业务逻辑上。

====Redis 如何设置明码及验证明码?
设置明码:config set requirepass 123456 受权明码:auth 123456

==== 说说 Redis 哈希槽的概念?
Redis 集群没有应用一致性 hash, 而是引入了哈希槽的概念,Redis 集群有 2 的 14 次方 (16384) 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定搁置哪个槽,集群的每个节点负责一部分 hash 槽。

====Redis 用了哈希槽的概念,而没有用一致性哈希算法,这样做的起因是为什么呢?
Redis Cluster 是本人做的 crc16 的简略 hash 算法,没有用一致性 hash。Redis 的作者认为它的 crc16(key) mod 16384 的成果曾经不错了,尽管没有一致性 hash 灵便,但实现很简略,节点增删时解决起来也很不便。

====Redis 集群的主从复制模型是怎么的?
为了使在局部节点失败或者大部分节点无奈通信的状况下集群依然可用,所以集群应用了主从复制模型, 每个节点都会有 N-1 个复制品。

====Redis 集群会有写操作失落吗?为什么?
Redis 并不能保证数据的强一致性,这象征这在理论中集群在特定的条件下可能会失落写操作。

====Redis 集群之间是如何复制的?
异步复制

====Redis 集群最大节点个数是多少?
2 的 14 次方(16384)

====Redis 集群如何抉择数据库?
Redis 集群目前无奈做数据库抉择,默认在 0 数据库。

==== 说一说 Redis 中的事务?
1、Redis 事务能够一次执行多个命令,并且带有以下三个重要的保障:
1)批量操作在发送 EXEC 命令前被放入队列缓存。
2)收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令仍然被执行。
3)在事务执行过程,其余客户端提交的命令申请不会插入到事务执行命令序列中。
2、一个事务从开始到执行会经验以下三个阶段:
开始事务。
命令入队。
执行事务。
3、redis 中相干的指令有:
DISCARD
勾销事务,放弃执行事务块内的所有命令。
EXEC
执行所有事务块内的命令。
MULTI
标记一个事务块的开始。
UNWATCH
勾销 WATCH 命令对所有 key 的监督。
WATCH key [key …]
监督一个 (或多个) key,如果在事务执行之前这个(或这些) key 被其余命令所改变,那么事务将被打断。
4、单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上减少任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务能够了解为一个打包的批量执行脚本,但批量指令并非原子化的操作,两头某条指令的失败不会导致后面已做指令的回滚,也不会造成后续的指令不做。
redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK

====Redis key 的过期工夫和永恒无效别离怎么设置?
应用 EXPIRE 和 PERSIST 命令。

====Redis 如何做内存优化?
尽可能应用散列表(hashes),散列表(是说散列表外面存储的数少)应用的内存十分小,所以你应该尽可能的将你的数据模型形象到一个散列表外面。比方你的 web 零碎中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,明码设置独自的 key, 而是应该把这个用户的所有信息存储到一张散列表外面.

更多面试题可关注 ”demo 锁屏面试题 ” 公众号通过小程序或 App 获取面试题和学习资源

退出移动版