Java 面试系列:Redis 面试题汇总
2021-01-10 本文已影响0人
you的日常
1.Redis 使用场景有哪些?
答:Redis 使用场景如下:
- 记录帖子点赞数、点击数、评论数
- 缓存近期热帖
- 缓存文章详情信息
- 记录用户会话信息
2.Redis 有哪些功能?
答:Redis 功能如下:
- 数据缓存功能
- 分布式锁的功能
- 支持数据持久化
- 支持事务
- 支持消息队列
3.Redis 支持哪些数据类型?
答:Redis 支持的数据类型如下:
- String 字符串
- List 列表
- Set 无序集合
- ZSet 有序集合
- Hash 哈希类型
4.Redis 相比 Memcached 有哪些优势?
答:Redis 相比 Memcached 优势如下:
- Memcached 所有的值均是简单的字符串,Redis 支持更为丰富的数据类型
- Redis 的速度比 Memcached 要快
- Redis 可以持久化
- Redis 可以设置过期时间
- Redis 支持主从同步
5.Redis 支持哪些淘汰策略?
答:Redis 淘汰策略如下:
- noeviction:禁止淘汰数据;
- allkeys-lru:尝试回收最少使用的键,使得新添加的数据有空间存放;
- volatile-lru:尝试回收最少使用的键,但仅限于在过期集合的键,使得新添加的数据有空间存放;
- allkeys-random:回收随机的键使得新添加的数据有空间存放;
- volatile-random:回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键;
- volatile-ttl:回收在过期集合的键,并且优先回收存活时间较短的键,使得新添加的数据有空间存放。
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 的区别如下:
- Jedis 是 Redis 的 Java 实现客户端,其 API 提供了比较全面的 Redis 命令的支持;
- Redisson 实现了分布式和可扩展的 Java 数据结构,和 Jedis 相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等 Redis 特性。Redisson 的宗旨是促进使用者对 Redis 的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。
11.Redis 如何设置过期时间?如何设置永久有效?
答:Redis 通过 expire() 方法设置过期时间,语法:redis.expire(key, expiration)。当 expire 的过期时间设置为 -1 时,表示永不过期。
12.如何保证 Redis 的数据一致性?
答:可使用以下方法来保证 Redis 的数据一致性: