前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis相关面试问题

Redis相关面试问题

原创
作者头像
java小黑
发布2023-04-25 10:15:07
4070
发布2023-04-25 10:15:07
举报
文章被收录于专栏:加哇加哇

Redis相关面试问题

1、请简单介绍一下Redis?

基于c语言的key、values型的非关系型数据库

2、Redis支持的数据类型有哪些?

字符串 哈希 list set zset

3、你们项目中使用的什么客户端工具操作的Redis?

4、Redis数据丢失怎么解决?

Redis 持久化、搭建集群、数据备份和恢复、合理的设置过期时间

5、Redis的持久化方式有哪些、谈谈它们的区别?

RDB和AOF

一个是数据快照一个写命令

RDB

AOF

是否默认开启

默认

手动开启

备份文件大小

性能

资源占用

数据完整性

文件存储方式

数据快照

写命令

恢复速度

6、你在项目中哪些地方用到了Redis,具体怎么用的?

热点数据、经常访问的数据

7、你还知道Redis的其他使用场景吗?

  1. 缓存:Redis最常用的场景之一是用作缓存。它可以将频繁读取但是不经常改变的数据存储在内存中,提高应用程序的性能和响应速度。
  2. 消息队列:Redis支持发布-订阅模式和列表操作,可以用作轻量级的消息队列。
  3. 计数器和计时器:Redis支持原子操作,可以用作计数器和计时器。
  4. 分布式锁:Redis可以用于实现分布式锁,控制对共享资源的访问,以避免竞争条件。
  5. 数据库:Redis支持持久化,并且支持多种数据结构,可以作为NoSQL数据库使用。
  6. 实时排行榜:Redis支持有序集合,可以用于实时排行榜的实现。
  7. 地理位置应用:Redis支持地理位置数据类型,可以用于实现地理位置应用,如附近的人功能。
  8. 分布式会话:将用户会话数据存储在Redis中,以实现分布式系统的无状态性。

8、了解Redis的删除策略吗,默认使用的什么删除策略?

Redis默认使用的是“惰性删除”(Lazy deletion)策略,即当一个键过期时,不会立即从内存中删除,而是在下次访问该键时检查是否过期,如果过期则删除。这种策略可以避免因为删除过期键造成的额外开销,提高性能。但是,如果过期键一直没有被访问,那么就会一直占用内存,造成内存浪费。为了避免这种情况,Redis也提供了主动删除过期键的策略。可以通过在配置文件中设置maxmemory-policy选项来选择删除策略。

9、Redis有哪几种数据淘汰策略?

  1. noeviction:不进行数据淘汰,当内存不足时,写入操作会返回错误。
  2. volatile-lru:从已设置过期时间的数据集(即带有 TTL 的 key)中挑选最近最少使用的数据淘汰。
  3. volatile-ttl:从已设置过期时间的数据集(即带有 TTL 的 key)中挑选即将过期的数据淘汰。
  4. volatile-random:从已设置过期时间的数据集(即带有 TTL 的 key)中随机选择数据淘汰。
  5. allkeys-lru:从所有数据集(即包括带有 TTL 的 key 和不带 TTL 的 key)中挑选最近最少使用的数据淘汰。

10、Redis服务器如果内存不足了怎么办?

增加服务器内存、使用数据淘汰策略、使用 Redis 持久化功能、使用 Redis 集群

11、Redis 常见的性能问题都有哪些、如何解决?

内存使用过高、持久化性能问题、并发操作过多、过多的 key 操作

12、Redis的有哪些集群模式?

主从集群、哨兵集群、分片集群

13、你们项目中采用那种集群模式,使用了几台服务器?

主从集群、哨兵集群、分片集群 6台服务器

14、什么是缓存击穿、怎么解决缓存击穿问题?

缓存击穿指的是当某个 key 在缓存中不存在,但是在数据库中存在,同时有大量并发请求同时请求该 key 时,会导致大量的请求直接穿透缓存,直接查询数据库,导致数据库压力过大,缓存失去了存在的意义。

办法

  1. 设置热点数据永不过期:将一些热点数据设置为永不过期,这样即使缓存失效,也不会导致请求直接穿透缓存,而是会在缓存中重新加载数据。
  2. 在缓存中添加空值占位符:在缓存中添加一个空值占位符,表示该 key 对应的数据不存在,这样在数据库中查不到数据的请求也不会直接穿透缓存。
  3. 使用分布式锁:使用分布式锁,避免多个线程同时查询数据库。当多个线程同时查询同一个 key 时,只有一个线程会查询数据库,其他线程则等待该线程查询完毕后从缓存中获取数据。
  4. 使用布隆过滤器:使用布隆过滤器判断请求的 key 是否存在于缓存中,避免一些不存在的 key 过多的访问数据库,减轻数据库的负载。
  5. 使用互斥锁+异步刷新:使用互斥锁,避免多个线程同时查询数据库,同时使用异步刷新,将数据库查询的结果先放入缓存中,然后再将缓存中的数据异步刷新。

15、什么是缓存穿透、怎么解决缓存穿透问题?

缓存穿透是指查询一个不存在的数据,由于缓存中没有该数据,每次请求都会穿透到数据库层,导致数据库压力过大,影响系统性能。

缓存穿透问题可以通过以下几种方式来解决:

  1. 数据预热:在系统启动或者数据发生变化时,将常用数据提前加载到缓存中,这样可以避免大量的请求直接穿透到数据库。
  2. 缓存空对象:对于数据库中不存在的数据,可以在缓存中设置一个空对象,这样可以防止对于同一个不存在的 key 不断请求数据库,从而减轻数据库的压力。
  3. 布隆过滤器:使用布隆过滤器来判断请求的 key 是否存在于缓存中,如果不存在,直接返回结果,避免访问数据库,减轻数据库的负载。
  4. 使用互斥锁+双重检测:使用互斥锁避免多个线程同时查询数据库,同时使用双重检测来避免缓存穿透问题,即在加锁前先在缓存中查找一遍数据,如果不存在,则加锁查询数据库,查询到数据后再放入缓存中。

16、什么是缓存雪崩、怎么解决缓存雪崩问题?

缓存雪崩是指由于缓存中的大量数据同时失效,导致一大批请求直接穿透到数据库,导致数据库瞬间压力过大,甚至崩溃,导致系统不可用的情况。

缓存雪崩问题可以通过以下几种方式来解决:

  1. 缓存数据过期时间随机化:将缓存数据的过期时间随机化,避免同时失效,分散缓存的更新时间,减少缓存失效的风险。
  2. 使用分布式缓存:使用多台缓存服务器,避免单点故障和缓存失效的风险,提高缓存的可用性。
  3. 多级缓存架构:将缓存按照热度和访问频率分级,将访问频率高的数据放到更快的缓存中,访问频率低的数据放到更慢的缓存中,避免大量数据同时失效。
  4. 数据预热:在系统启动或者数据发生变化时,将常用数据提前加载到缓存中,这样可以避免大量的请求直接穿透到数据库。
  5. 限流措施:对于请求过多的情况,可以使用限流措施来限制请求量,避免系统崩溃。

17、什么是全量复制和增量复制?

  • 全量复制:在刚开始进行主从复制时,主节点将自己的所有数据全部发送给从节点,从节点接收到数据后进行一次性加载,达到和主节点数据完全一致的目的。全量复制的优点是同步快,但缺点是对于数据量比较大的主节点来说,复制的过程会比较慢,同时全量复制会消耗大量的网络带宽和系统资源。
  • 增量复制:在完成了全量复制后,主节点将自己新写入的数据以增量的方式同步到从节点,从节点接收到数据后进行增量加载,达到和主节点数据一致的目的。增量复制的优点是同步快,网络带宽和系统资源消耗少,但缺点是如果主节点挂掉一段时间,从节点会因为没有数据同步而与主节点数据不一致。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis相关面试问题
    • 1、请简单介绍一下Redis?
      • 2、Redis支持的数据类型有哪些?
        • 3、你们项目中使用的什么客户端工具操作的Redis?
          • 4、Redis数据丢失怎么解决?
            • 5、Redis的持久化方式有哪些、谈谈它们的区别?
              • 6、你在项目中哪些地方用到了Redis,具体怎么用的?
                • 7、你还知道Redis的其他使用场景吗?
                  • 8、了解Redis的删除策略吗,默认使用的什么删除策略?
                    • 9、Redis有哪几种数据淘汰策略?
                      • 10、Redis服务器如果内存不足了怎么办?
                        • 11、Redis 常见的性能问题都有哪些、如何解决?
                          • 12、Redis的有哪些集群模式?
                            • 13、你们项目中采用那种集群模式,使用了几台服务器?
                              • 14、什么是缓存击穿、怎么解决缓存击穿问题?
                                • 15、什么是缓存穿透、怎么解决缓存穿透问题?
                                  • 16、什么是缓存雪崩、怎么解决缓存雪崩问题?
                                    • 17、什么是全量复制和增量复制?
                                    相关产品与服务
                                    云数据库 Redis
                                    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档