写点什么

redis 面试知识点和内存算法了解

用户头像
Java 白
关注
发布于: 5 小时前

1 关于 Redis 配置说明

1.1 关于 Redis 持久化的说明

redis 默认条件下支持数据的持久化操作. 当 redis 中有数据时会定期将数据保存到磁盘中.当 Redis 服务器重启时 会根据配置文件读取指定的持久化文件.实现内存数据的恢复.

1.2 持久化方式介绍

1.2.1 RDB 模式

特点:1.RDB 模式是 redis 的默认的持久化策略.2.RDB 模式记录的是 Redis 内存数据的快照. 最新的快照会覆盖之前的内容 所有 RDB 持久化文件占用空间更小 持久化的效率更高.3.RDB 模式由于是定期持久化 所以可能导致数据的丢失.

命令:

  1. save 要求立即马上持久化 同步的操作 其他的 redis 操作会陷入阻塞的状态.

  2. bgsave 开启后台运行 异步的操作 由于是异步操作,所以无法保证 rdb 文件一定是最新的需要等待.

配置:1.持久化文件名称:


2.持久化文件位置 dir ./ 相对路径的写法 dir /usr/local/src/redis 绝对路径写法


3.RDB 模式持久化策略


1.2.2 AOF 模式

特点:1.AOF 模式默认条件下是关闭的,需要用户手动的开启在这里插入图片描述 2. AOF 模式是异步的操作 记录的是用户的操作的过程 可以防止用户的数据丢失 3. 由于 AOF 模式记录的是程序的运行状态 所以持久化文件相对较大,恢复数据的时间长.需要人为的优化持久化文件

配置:


1.2.3 关于持久化操作的总结

1.如果不允许数据丢失 使用 AOF 方式 2.如果追求效率 运行少量数据丢失 采用 RDB 模式 3.如果既要保证效率 又要保证数据 则应该配置 redis 的集群 主机使用 RDB 从机使用 AOF

2 关于 Redis 内存策略

2.1.1 关于内存策略的说明

说明:Redis 数据的存储都在内存中.如果一直向内存中存储数据 必然会导致内存数据的溢出.解决方式:

  1. 尽可能为保存在 redis 中的数据添加超时时间.

  2. 利用算法优化旧的数据.

2.1.2 LRU 算法

特点: 最好用的内存优化算法.LRU 是 Least Recently Used 的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当需淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。维度: 时间 T

2.1.3 LFU 算法

LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。维度: 使用次数

2.1.4 RANDOM 算法

随机删除数据

2.1.5 TTL 算法

把设定了超时时间的数据将要移除的提前删除的算法.

2.1.6 Redis 内存数据优化

volatile-lru 设定了超时时间的数据采用 lru 算法 2.allkeys-lru 所有的数据采用 LRU 算法 3.volatile-lfu 设定了超时时间的数据采用 lfu 算法删除 4.allkeys-lfu 所有数据采用 lfu 算法删除 5.volatile-random 设定超时时间的数据采用随机算法 6.allkeys-random 所有数据的随机算法 7.volatile-ttl 设定超时时间的数据的 TTL 算法 8.noeviction 如果内存溢出了 则报错返回. 不做任何操作. 默认值


3 关于 Redis 缓存面试题

问题描述: 由于海量的用户的请求 如果这时 redis 服务器出现问题 则可能导致整个系统崩溃.运行速度:

  1. tomcat 服务器 150-250 之间 JVM 调优 1000/秒

  2. NGINX 3-5 万/秒

  3. REDIS 读 11.2 万/秒 写 8.6 万/秒 平均 10 万/秒

3.1 缓存穿透

问题描述: 由于用户高并发环境下访问 数据库中不存在的数据时 ,容易导致缓存穿透.如何解决: 设定 IP 限流的操作 nginx 中 或者微软服务机制 API 网关实现.

3.2 缓存击穿

问题描述: 由于用户高并发环境下, 由于某个数据之前存在于内存中,但是由于特殊原因(数据超时/数据意外删除)导致 redis 缓存失效. 而使大量的用户的请求直接访问数据库.俗语: 趁他病 要他命如何解决:1.设定超时时间时 不要设定相同的时间.2.设定多级缓存


3.3 缓存雪崩

说明: 由于高并发条件下 有大量的数据失效.导致 redis 的命中率太低.而使得用户直接访问数据库(服务器)导致崩溃,称之为缓存雪崩.解决方案:1.不要设定相同的超时时间 随机数 2.设定多级缓存.3.提高 redis 缓存的命中率 调整 redis 内存优化策略 采用 LRU 等算法.


用户头像

Java 白

关注

还未添加个人签名 2021.06.21 加入

Java使我秃头

评论

发布
暂无评论
redis面试知识点和内存算法了解