JAVA互联搬砖工人▲快看看这40道面试题,面试还搞不懂Redis( 三 )


(1)如果数据呈现幂律分布 , 也就是一部分数据访问频率高 , 一部分数据访问频率低 , 则使用allkeys-lru
(2)如果数据呈现平等分布 , 也就是所有的数据访问频率都相同 , 则使用allkeys-random
【JAVA互联搬砖工人▲快看看这40道面试题,面试还搞不懂Redis】为什么edis需要把所有数据放到内存中?
答:Redis为了达到最快的读写速度将数据都读到内存中 , 并通过异步的方式将数据写入磁盘 。 所以redis具有快速和数据持久化的特征 。 如果不将数据放在内存中 , 磁盘I/O速度为严重影响redis的性能 。
在内存越来越便宜的今天 , redis将会越来越受欢迎 。 如果设置了最大使用的内存 , 则数据已有记录数达到内存限值后不能继续插入新值 。
Redis的同步机制了解么?
答:Redis可以使用主从同步 , 从从同步 。 第一次同步时 , 主节点做一次bgsave , 并同时将后续修改操作记录到内存buffer , 待完成后将rdb文件全量同步到复制节点 , 复制节点接受完成后将rdb镜像加载到内存 。
加载完成后 , 再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程 。
Pipeline有什么好处 , 为什么要用pipeline?
答:可以将多次IO往返的时间缩减为一次 , 前提是pipeline执行的指令之间没有因果相关性 。 使用redis-benchmark进行压测的时候可以发现影响redis的QPS峰值的一个重要因素是pipeline批次指令的数目 。
是否使用过Redis集群 , 集群的原理是什么?
1、RedisSentinal着眼于高可用 , 在master宕机时会自动将slave提升为master , 继续提供服务 。
2、RedisCluster着眼于扩展性 , 在单个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如何设置密码及验证密码?
设置密码:configsetrequirepass123456
授权密码:auth123456
说说Redis哈希槽的概念?
答:Redis集群没有使用一致性hash,而是引入了哈希槽的概念 , Redis集群有16384个哈希槽 , 每个key通过CRC16校验后对16384取模来决定放置哪个槽 , 集群的每个节点负责一部分hash槽 。
JAVA互联搬砖工人▲快看看这40道面试题,面试还搞不懂Redis
文章图片
Redis集群的主从复制模型是怎样的?
答:为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用 , 所以集群使用了主从复制模型,每个节点都会有N-1个复制品.
Redis集群会有写操作丢失吗?为什么?
答:Redis并不能保证数据的强一致性 , 这意味这在实际中集群在特定的条件下可能会丢失写操作 。
Redis集群之间是如何复制的?
答:异步复制
Redis集群最大节点个数是多少?
答:16384个 。
Redis集群如何选择数据库?
答:Redis集群目前无法做数据库选择 , 默认在0数据库 。
怎么测试Redis的连通性?
答:使用ping命令 。
怎么理解Redis事务?
1、事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行 。 事务在执行的过程中 , 不会被其他客户端发送来的命令请求所打断 。


推荐阅读