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