及时行乐|这些Redis面试题是不是让你有很多问号?一文带你吊打面试官( 三 )


13、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
Redisson、Jedis、lettuce 等等 , 官方推荐使用 Redisson 。
及时行乐|这些Redis面试题是不是让你有很多问号?一文带你吊打面试官
14、Redis 和 Redisson 有什么关系?
Redisson 是一个高级的分布式协调 Redis 客服端 , 能帮助用户在分布式环境中轻松实现一些 Java 的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap,List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock,ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog) 。
15、Jedis 与 Redisson 对比有什么优缺点?
Jedis 是 Redis 的 Java 实现的客户端 , 其 API 提供了比较全面的 Redis 命令的支持;Redisson 实现了分布式和可扩展的 Java 数据结构 , 和 Jedis 相比 , 功能较为简单 , 不支持字符串操作 , 不支持排序、事务、管道、分区等 Redis 特性 。 Redisson 的宗旨是促进使用者对 Redis 的关注分离 , 从而让使用者能够将精力更集中地放在处理业务逻辑上 。
16、说说 Redis 哈希槽的概念?
Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念 , Redis 集群有 16384 个哈希槽 , 每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽 , 集群的每个节点负责一部分 hash 槽 。
17、Redis 集群的主从复制模型是怎样的?
为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用 , 所以集群使用了主从复制模型,每个节点都会有 N-1 个复制品.
18、Redis 集群会有些操作丢失吗?为什么?
Redis 并不能保证数据的强一致性 , 这意味着在实际中集群在特定的条件下可能会丢失写操作 。
19、Redis 集群之间是如何复制的?
异步复制
20、Redis 集群最大节点个数是多少?
16384 个
21、Redis 集群如何选择数据库?
Redis 集群目前无法做数据库选择 , 默认在 0 数据库 。
22、Redis 中的管道有什么用?
一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应 , 这样就可以将多个命令发送到服务器 , 而不用等待回复 , 最后在一个步骤中读取该答复 。
这就是管道(pipelining) , 是一种几十年来广泛使用的技术 。 例如许多 POP3 协议已经实现支持这个功能 , 大大加快了从服务器下载新邮件的过程 。
23、怎么理解 Redis 事务?
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行 , 事务在执行的过程中 , 不会被其他客户端发送来的命令请求所打断 。
事务是一个原子操作:事务中的命令要么全部被执行 , 要么全部都不执行 。
24、Redis 事务相关的命令有哪几个?
MULTI、EXEC、DISCARD、WATCH
25、Redis key 的过期时间和永久有效分别怎么设置?
EXPIRE 和 PERSIST 命令
26、Redis 如何做内存优化?
尽可能使用散列表(hashes) , 散列表(是说散列表里面存储的数少)使用的内存非常小 , 所以你应该尽可能的将你的数据模型抽象到一个散列表里面 。
比如你的 web 系统中有一个用户对象 , 不要为这个用户的名称 , 姓氏 , 邮箱 , 密码设置单独的 key,而是应该把这个用户的所有信息存储到一张散列表里面 。
27、Redis 回收进程如何工作的?
一个客户端运行了新的命令 , 添加了新的数据 。 Redi 检查内存使用情况 , 如果大于 maxmemory 的限制, 则根据设定好的策略进行回收 。 一个新的命令被执行 , 等等 。 所以我们不断地穿越内存限制的边界 , 通过不断达到边界然后不断地回收回到边界以下 。 如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键) , 不用多久内存限制就会被这个内存使用量超越 。


推荐阅读