赞
踩
答:Redis 使用场景如下:
答:Redis 功能如下:
答:Redis 支持的数据类型如下:
答:Redis 相比 Memcached 优势如下:
答:Redis 淘汰策略如下:
答:Redis 官方是不支持 Windows 版的,因为目前 Linux 版本已经相当稳定,如果开发 Windows 版本,反而会带来兼容性等问题。
答:因为 Redis 的瓶颈最有可能是机器内存或者网络带宽,而非单线程,既然单线程不是 Redis 的性能瓶颈,并且单线程又比较容易实现,所以 Redis 就选择使用单线程来实现。
单线程并不代表运行速度就慢,比如,Nginx 和 NodeJs 都是单线程高性能的代表。
答:Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘,这样 Redis 就拥有了快速查询和数据持久化等特征。
答:最大容量 512 MB,官方说明如下图所示:
答:Jedis 和 Redisson 的区别如下:
答:Redis 通过 expire() 方法设置过期时间,语法:redis.expire(key, expiration)。当 expire 的过期时间设置为 -1 时,表示永不过期。
答:可使用以下方法来保证 Redis 的数据一致性:
答:Redis 的数据结构是跳跃表,跳跃表是一种基于链表的扩展,跳跃表还是一个链表,是一个有序的链表,在遍历的时候基于比较,但普通链表只能遍历,跳跃表加入了一个层的概念,层级越高元素越少,每次先从高层查找,直到找到合适的位置,从图中可以看到高层的节点远远少于底层的节点数,从而实现了跳跃式查找。
跳跃表优点:
跳跃表缺点:
答:第一是因为红黑树存储比较复杂,调整涉及到多个节点的并发修改;第二是越接近根节点的地方越容易产生竞争,即使是不同叶子节点的操作由于平衡操作也可能逐级向上涉及到接近根的节点,而跳跃表可以用 CAS(Compare And Swap)来并发操作节点,比较容易实现,且更加局部化。
答:缓存穿透是指查询一个一定不存在的数据,由于缓存中没有,因而每次需要从数据库中查询,但数据库也没有相应的数据,所以不会写入缓存,这就将导致每次请求都会去数据库查询,这种行为就叫缓存穿透。
解决方案是不管查询数据库是否有数据,都缓存起来,只不过把没有数据的缓存结果的过期时间设置为比较短的一个值,比如 3 分钟。
答:指缓存由于某些原因,比如,宕机或者缓存大量过期等,从而导致大量请求到达后端数据库,进而导致数据库崩溃的情况。
解决缓存雪崩的方案如下:
答:缓存预热是指系统上线后,将相关的缓存数据直接加载到缓存系统,这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题。
缓存预热的实现方式,可分为以下两种:
答:在 Java 程序中可使用 Jedis 来操作 Redis,使用步骤如下:
1)添加 Jedis 引用
解释
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>x.x.x</version>
- </dependency>
2)连接并操作 Redis
解释
- Jedis jedis = new Jedis("127.0.0.1",6379);
- // 存值
- jedis.set("hello","world");
- // 取值
- jedis.get("hello");
- // 关闭连接
- jedis.close();
答:Redis 持久化是指将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis 有以下两种持久化方案:
Redis 默认支持的持久化方式是 RDB 方式。
答:RDB 和 AOF 的区别如下:
总体来说如果对数据的完整性要求不高,RDB 是最好的解决方案,反之则选择 AOF。
答:常用的 Redis 监控工具如下:
答:使用 slowlog get 来定位慢查询操作,如下所示:
127.0.0.1:6379> slowlog get
1) 1) (integer) 0
2) (integer) 1565937939
3) (integer) 28003
4) 1) "lpush"
2) "list" 3) "1" 4) "2" 5) "6" 6) "3" 7) "4" 8) "9" 9) "8"
其中:
1) 表示慢查询记录 id
2) 表示发起命令的时间戳
3) 表示命令耗时,单位为微秒
4) 表示该条记录的命令及参数
答:SAVE 和 BGSAVE 都是用于 Redis 持久化的,它们的区别如下:
答:Redis 可以实现主从同步和从从同步。当第一次同步时,主节点做一次 BGSAVE,并同时将后续修改操作记录到内存中,待完成后将 RDB 文件全量同步到复制节点,复制节点接受完成后将 RDB 镜像加载到内存,加载完成后再通知主节点将期间修改的操作记录,同步到复制节点进行重放,这样就完成了同步过程。
答:Redis 不像 MySQL 等关系型数据库那样有数据库的概念,不同的数据存在不同的数据库中,Redis 数据库是由一个整数索引标识,而不是一个数据库名称,默认情况下客户端连接到数据库 0,可以在配置文件中控制数据库总数,默认是 16 个。
可以使用 select index 来切换数据库,如下所示:
127.0.0.1:6379> select 0
OK
答:Redis 集群策略有以下 3 种:
答:Redis 集群实现方案如下:
答:把相关的信息整体存储,而不是把每个信息独立存储,这样就可以有效的减少内存使用。
答:通常分布式锁在设计时,需同时满足以下四个约束条件。
答:集群的实现原理和集群的实现方式有关,如下所述:
答:Redis 常见性能问题如下:
为了方便分享,我把这些面试资料都上传到了百度网盘,提取地址如下:
链接:https://pan.baidu.com/s/1naAr7TIpsI6N_WSiAHytsQ?pwd=hx5z
如果链接失效了,请加这个百度网盘群890162707,资料在群共享里面。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。