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

java面试题 --- Redis①

作者头像
贪挽懒月
发布2022-05-13 15:04:28
2110
发布2022-05-13 15:04:28
举报
文章被收录于专栏:JavaEE

1. Redis 是什么?

  • 非关系型的内存数据库,因为数据存储在内存中,因此速度非常快。

2. Redis 支持哪些数据类型?

  • string:键值对存储,类似 Java 中的 HashMap,一个 key 对应一个 value,value 最大为 512M;
  • list:一个双向链表,支持从两端去操作数据;
  • set:无序不重复的集合,类似 Java 的 HashSet,可以方便地求两个集合的交集差集并集等;
  • zset:与 set 相比,多了一个表示优先级的 score,可以用来做排行榜;
  • hash:映射表,一个 key 对应一组键值对,适合用来存储对象;

3. Redis 有哪些应用场景?

  • 做缓存,存储热点数据;
  • 做分布式锁;
  • 做消息队列;

4. 说说 Redis 的线程模型

  • Redis 基于 Reactor 模式开发了网络事件处理器,被称为文件事件处理器;
  • Reactor 模式就是由一个非阻塞的线程来接收所有请求,然后再分派不同的 handler中去执行具体逻辑;
  • Redis 的文件事件处理器由多个套接字、IO多路复用程序、文件事件分派器和事件处理器构成;
  • Redis 的文件事件处理器首先使用 IO 多路复用程序监听多个套接字,并根据套接字执行的任务来为套接字关联事件处理器;当被监听的套接字要执行 accept、read、write 等操作时,文件事件分派器就会调用之前关联好的事件处理器来执行相关操作。

5. Redis 到底是多线程的还是单线程的?

  • 整个 Redis 并不是单线程的,但是执行命令的模块是单线程的,所以我们说 Redis 是单线程的;另外,Redis 6.0 开始,对于网络事件的读写也引入了多线程,不过执行命令的模块还是单线程的。

6. 对于 Redis 管道技术有了解吗?

  • 管道技术是一种客户端技术,通过客户端执行 redis 命令的时候,正常流程是客户端请求服务端,服务端执行完了给客户端响应,客户端收到响应后继续请求服务端发送下一个执行的命令。就是每执行一条命令就需要经过 “请求 --- 响应” 这么一个来回。要执行的命令一多,这样的来回在网络中的消耗也就变多了,管道技术的原理简单地说就是把所有的命令先发送过去,然后等服务端执行完统一响应,这样就减少了网络消耗。

7. 什么是 Redis 的事务?

  • Redis 事务和关系型数据库的事务不一样,它是一组命令的集合,可以保证一组命令按照顺序执行,其他客户端提交过来的命令不能插入到事务管理的命令集合中。它不保证原子性,单条命令的执行是原子性的,但是不能保证一组命令的执行的原子性,即事务管理的某个命令执行失败了,其他命令还是会执行,也不支持回滚。事务相关命令有:watch,监视一个或多个 key,如果 key 被别的客户端修改,则事务被打断;multi,开启事务;exec,执行事务;discard,丢弃事务;unwatch,取消对 key 的监视。

8. 你是如何保证 Redis 数据的可靠性的? 对 Redis 进行持久化。持久化的方式有两种,RDB 和 AOF。

  • RDB 就是每隔一段时间以快照的方式将内存中的数据保存到磁盘的 dump.rdb 文件中,默认开启。触发 RDB 的方式有两种,手动触发和自动触发。手动触发就是手动执行 SAVE 或者 BGSAVE 命令,SAVE 会阻塞服务器进程,而 BGSAVE 会在后台完成执行。自动触发策略可以在 Redis 的配置文件中进行配置,比如 save 1000 1,就是在 1000 秒内,至少有 1 条数据发生了变化,那就会触发 BGSAVE,就数据写到磁盘中,这种策略可以配置多条。RDB 的缺点很明显,就是可能会导致一段时间内的数据丢失,优点就是恢复数据比较快。
  • AOF 就是会记录写操作的命令,追加到 appendonly.aof 文件中,Redis 还会对 appendonly.aof 文件进行重写,去掉重复命令,减小其体积。重写也可以手动触发和自动触发,手动触发就是执行 BGREWRITEAOF 命令即可重写 AOF 文件,自动触发可以在配置文件中配置策略,比如 auto-aof-rewrite-percentage 100 表示文件增量大于 100% 时进行重写,auto-aof-rewrite-min-size 64mb 表示 AOF 文件体积大于 64m 时就进行重写。可以在配置文件中配置 AOF 的写入命令的策略,appendfsync Everysec 表示每秒记录一次,默认就是该策略,还可以配置 appendfsync Always,记录每次写操作, appendfsync No,由操作系统决定何时记录写操作。AOF 的优点是可以不造成数据的丢失,缺点是 IO 操作比较多。

一般会同时开启 RDB 和 AOF,同时开启的情况下,会优先根据 AOF 文件来恢复数据。


9. 如何保证 Redis 中的数据都是热点数据? 当 Redis 中的数据集上升到一定程度后,会根据内存淘汰策略淘汰数据。内存淘汰策略有如下几种:

  • noeviction:内存不足时写操作报异常;
  • allkeys lru:在所有 key 中选择最近最少使用的进行删除;
  • allkeys random:在所有 key 中随机选择一个进行删除;
  • volatile lru:在过期 key 中选择最近最少使用的进行删除;
  • volatile random:在过期 key 中随机选择一个删除;
  • volatile ttf:优先删除更早过期的 key。

10. 对于过期的 key,Redis 是如何处理的? Redis 有三种过期键删除策略:

  • 定时过期:到了过期时间就删除,对内存友好,但是对 CPU 不太友好;
  • 惰性过期:当用到了 key 的时候去判断是否过期了,过期了就删除,对 CPU 友好,但是对内存不太友好;
  • 定期过期:定期检查 key 是否过期,过期就进行删除;

Redis 同时使用了惰性过期和定期过期两种策略。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档