您的位置:首页 > 财经 > 金融 > Java后端面试题(redis相关1)(day7)

Java后端面试题(redis相关1)(day7)

2024/11/18 18:27:09 来源:https://blog.csdn.net/qq_57036151/article/details/140926546  浏览:    关键词:Java后端面试题(redis相关1)(day7)

目录

  • 为什么要用Redis?
  • Redis到底是多线程还是单线程?
  • Redis数据持久化机制
    • RDB方式
    • AOF方式
  • Redis是单线程,但为什么快?
  • Redis 过期删除策略
  • Redis 内存淘汰策略

为什么要用Redis?


  1. 基于内存操作,内存读写速度快
  2. 支持多种数据类型,包括String、Hash、List、Set、ZSet等
  3. 支持持久化,Redis支持 RDBAOF 两种持久化机制,持久化功能可以有效地避免数据丢失问题
  4. 支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
  5. 支持高并发,使用IO模型(epoll), 天生支持高并发.
  6. 工作线程单线程,即避免频繁的上下文切换,又避免了线程安全问题,Redis6.0之后IO线程引入了多线程

Redis到底是多线程还是单线程?


单线程&多线程
对于Redis到底是多线程还是单线程,分为两个阶段:

  • Redis 6.0 之前
    Redis是 单线程 的,IO操作和计算操作串行执行
  • Redis 6.0之后 :
    Redis 将IO操作交给IO线程处理,并且使用线程池,使 IO线程实现多线程 并行执行IO操作,而计算操作由工作线程处理,工作线程仍保持单线程

Redis数据持久化机制


持久化就是把内存的数据写到磁盘中,防止服务宕机导致内存数据丢失。

Redis支持两种方式的持久化,一种是 RDB 的方式,一种是 AOF 的方式。前者会根据指定的规则定时将内存中的数据存储在硬盘上,而后者在每次执行完命令后将命令记录下来。一般将两者结合使用。

RDB方式

RDB 是 Redis 默认的持久化方案。RDB 持久化时会将内存中的数据写入到磁盘中,也就是快照(Snapshot),数据恢复是将快照文件直接读到内存中。

RDB的优缺点:

  • 缺点
    1. 快照时间有间隔,不能实时备份,丢失数据可能会比较多
    2. 开启子进程备份数据,在数据集比较庞大时,fork()可能会非常耗时,造成服务器在一定时间内停止处理客户端。
  • 优点
    1. 恢复数据比较快
    2. 备份的文件就是原始内存数据的大小,不会额外增加数据占用

AOF方式

AOF(append only file)持久化:以独立日志的方式记录每次写命令,Redis重启时会重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,AOF 是Redis持久化的主流方式。

AOF的优缺点:

  • 优点
    1. 数据安全性高,不易丢数据
    2. AOF文件有序保存了所有写操作,可读性强
  • 缺点
    1. AOF方式生成文件体积变大
    2. 数据恢复速度比RDB慢

Redis是单线程,但为什么快?


  1. Redis 基于内存,内存的访问速度比磁盘快很多
  2. 单线程操作,避免了频繁的上下文切换
  3. 合理高效的数据结构
  4. 采用了非阻塞I/O多路复用机制 epool

Redis 过期删除策略


  1. 惰性删除 :放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
  2. 定期删除 每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定

Redis 内存淘汰策略


Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

Redis 提供 8 种数据淘汰策略:

LRU 全称Least recently used, 淘汰的是最近最久未使用的数据项。

LFU 全称Least-frequently used,淘汰的是最近访问频率最低的数据项,4.0及以上版本可用。

范围淘汰策略名称策略含义人话
默认策略noeviction不淘汰数据;写不进去返回错误不删除任意数据,这时如果内存不够时,会直接返回错误
只针对设置
过期的keys
volatile-lru根据 LRU 算法挑选数据淘汰从设置了过期时间的数据集中,选择最近最久未使用的数据释放
volatile-lfu根据 LFU 算法挑选数据淘汰 淘汰掉设置了过期时间的key过去被访问次数最少的数据
volatile-random随机挑选数据淘汰从设置了过期时间的数据集中,随机
volatile-ttl挑选越早过期的数据进行删除从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作 所有keys
所有keysallkeys-lru根据 LRU 算法挑选数据淘汰从数据集中(包括设置过期时间以及未设置过期时间的数据集中)
选择最近最久未使用的数据释放
allkeys-random随机挑选数据淘汰随机选择一个数据进行释放
allkeys-lfu LFU 算法挑选数据淘汰淘汰掉过去被访问次数最少的一条数据

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com