Java常见面试题_2022最新版
- Java常见面试题_2022最新版持续更新中…
文章目录
Redis官网
Redis官网(仅支持Linux系统)
Redis对于windows的支持
一、基本概念了解
Redis是什么
Redis(R) 本质上是一个 Key-Value 类型的基于内存的缓存型数据库,由 C 语言开发,NoSQL非关系型数据库,Redis本身也会对数据进行持久化处理。
Redis版本
Windows版本:Reids 官网本身对于 windows 操作系统没有支持,但是由于是开源软件,微软开发小组,针对于 Redis 开发了 windows 的版本,最新版本为 3.2.100,下载地址见上方链接
Linux版本: Reids 官网下载即可,地址见上方链接
二、常见面试题
Redis 支持的数据类型有哪些(***)
- String
- 字符串,整数,浮点数
- List
- 列表
- Set
- 无序集合
- Sorted Set(ZSet)
- 有序结合
- Hash
- 散列表
Redis的应用场景:
- 计数器
- String数据类型能做自增自减操作,实现计数功能
- 缓存
- 热点数据
- 临时数据(验证码信息)
- 会话缓存
- Session服务器
- token
- 消息队列
- 发布订阅功能
- 分布式锁
- 分布式的场景下,无法使用正常的锁对于多个节点的进程进行同步,可以使用Redis自带的SETNX命令或者RedLock分布式锁去实现这个功能
- 排行榜功能
- ZSet 可以实现有序操作
- 实现共同好友功能]
- Set可以实现交集和并集操作
Redis是否能做持久化操作
可以,Redis本身可以对于数据进行持久化处理,将内存中的数据写到磁盘上去,防止服务器宕机导致的数据丢失。
Redis提供了两种持久化机制:RDB(默认)快照,AOF(持久化)
Redis持久化机制是什么?各自的优缺点
Redis提供了两种持久化机制:RDB(默认)快照,AOF(持久化)
- RDB(Redis DataBase)
- RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。
- 优点
- 只有一个文件 dump.rdb,方便持久化
- 容灾性好,一个文件可以保存到安全的磁盘
- 性能最大化,fork 子进程来完成写操作,让主进程继续处理令,所以是 IO 最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能
- 相对于数据集大时,比 AOF 的启动效率更高
- 缺点
- 数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候)
- AOF(Append-only file)
- 是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志文件执行一次来恢复数据
- 优点
- 数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次
- 通过 append 模式写文件,即使中途服务器宕机,可以通过redis-check-aof 工具解决数据一致性问题
- AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令 进行合并重写),可以删除其中的某些命令(比如误操作的 flushall)
- 缺点
- AOF 文件比 RDB 文件大,且恢复速度慢
- 数据集大的时候,比 rdb 启动效率低
- RDB和AOF两种持久化的优缺点
- AOF文件比RDB更新频率高,优先使用AOF还原数据
- AOF比RDB更安全也更大
- RDB性能比AOF好
- 如果两个都配了优先加载AO
缓存预热
缓存预热就是在启动项目(项目上线后),将相关的缓存数据直接加载到缓存中,这样可以避免在用户请求数据的时候,先查询数据库,再进行数据缓存,而是直接可以查询事先被预热的数据(加载到缓存中的数据),增加了用户查询效率,提高了用户的使用体验感。
- 增加手动刷新数据功能,上线时手动操作
- 数据量不大时,可以在项目启动的时候进行自动加载
- 定时刷新缓存
缓存命中
- 可以直接通过缓存获取到需要的数据,而不需要通过再次查询数据库或者执行其他操作。
- 缓存命中不成功的原因:
- 缓存中根本不存在
- 缓存已过期
缓存穿透
- 由于缓存中没有用户想要查询的数据,用户请求透过redis直接去请求数据库服务器,导致数据库服务器压力过载。
- 解决方案:
- 当缓存不存在,MySQL数据库也不存在这条信息,在redis中缓存成一个空对象,返回给对象。(代码维护简单,但是效果不是很好)
- Redis为我们提供了一种解决方案,布隆过滤器(代码维护比较复杂,效果很好)
缓存雪崩
- 缓存雪崩指的是在某一个时间段,集中获取大量请求,引起数据库压力过大甚至宕机。
- 缓存雪崩的原因:
- Redis 突然宕机
- 大部分数据失效(数据缓存时间同一时间失效)
- 解决办法:
- reids 高可用
- 多增加 Redis 服务器,大家Redis服务器集群,做主从复制
- 限流降级
- 缓存失效后,通过锁或者队列来控制读取数据库写缓存的线程数量
- 单体环境(Lock,Synchronized等)
- 分布式环境(基于Redis,zookeeper,nacos的分布式锁)
- 缓存失效后,通过锁或者队列来控制读取数据库写缓存的线程数量
- 缓存预热
- 将可能大量访问的数据在项目部署之前先加载到缓存中。在即将发生大并发访问前手动触发加载缓存。
- 设置不同的过期时间
- 设置不同的过期时间,让缓存失效的时间尽量均匀
- reids 高可用
– [x] 持续更新中…
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107627.html