【Redis】Redis常见面试题总结

目录

一、谈谈对Redis 的持久化的理解

二、Redis的删除策略

三、当数据进入redis内存不足时,将会进行逐出算法

四、谈谈缓存雪崩、缓存穿透、缓存击穿以及其解决方案

五、为什么用redis做缓存


一、谈谈对Redis 的持久化的理解

首先redis的持久化分为两种RDBAOF

RDB的话他是基于快照的方式来存储的,将数据直接存储在物理磁盘中

他的优点存储效率高、恢复速度快、占用空间小缺点版本不兼容、并且无法做到实时存储容易丢失数据

AOF则是通过AOF重写最终结果数据转换为对应的命令来进行命令存储,通过执行指令来恢复数据。AOF可以通过每秒每次、或者由操作系统来决定redis持久化。

他的优点是可以最快每秒进行一次持久化保存的数据更完整不容易丢失消耗资源少缺点占用内存大恢复速度慢


二、Redis的删除策略

Redis是一种内存级数据库,所有的数据都存放在内容中,内存中的数据可以通过TTL指令来获取其状态

Redis的删除策略一共分为三种:

定时删除:是创建一个定时器,当key的过期时间到达后,会立即删除执行删除操作。

优点是能够很快的删除掉过期数据,不会再占用空间。

缺点对cpu的压力很大,无论此时cpu负载多高,都会立即执行删除操作,占用cpu,会影响响应时间和指令的吞吐量。

惰性删除:是指当访问到这个数据时,发现该数据已经过期,才会去执行删除操作。

优点是cpu没有什么压力,节约cpu性能

缺点是如果长时间没有访问过期数据的话,就会占用很多空间

定时删除:是周期性的采用随机收取的策略对数据进行检查,如果过期则删除。


三、当数据进入redis内存不足时,将会进行逐出算法

逐出算法的删除策略一共有 8种

检查易失数据

       挑选最近使用时间最少的数据淘汰

       挑选最近使用次数最少的数据淘汰

       挑选即将过期的数据淘汰

       任意选择数据淘汰

检查所有数据

       挑选最近使用时间最少的数据淘汰

       挑选最近使用次数最少的数据淘汰

       任意选择数据淘汰

放弃驱逐数据

       放弃驱逐数据


四、谈谈缓存雪崩、缓存穿透、缓存击穿以及其解决方案

缓存雪崩是指在同一时间有大量缓存过期或者服务器宕机,导致大量请求都传至去数据库中。

解决方案

        给不同key的TTL值添加随机值

        使用多级缓存

        使用redis集群

        使用流量限流策略

缓存穿透是指某一个高并发的缓存过期了,导致同一时间大量请求访问数据库。

解决方案

        使用互斥锁,就是当一个请求访问缓存时发现缓存过期了,这是会获取一个互斥锁,然后去访问数据库,获取数据并将数据存放缓存中,释放锁,在这个期间其他请求就会获取锁失败,进行休眠一会,重新请求,直到获取到数据为止。

        使用逻辑过期方案,就是在请求到数据发现失效了,则获取互斥锁,然后创建一个新线程,并返回过期数据,而新线程则去访问数据库,并将数据存储到缓存中,释放锁。在这期间如果有其他线程访问时,获取锁失败,则直接返回过期数据。

缓存击穿是指客户端的请求在缓存没有找到数据,在数据库中也没有找到数据,最终这些请求都会到数据库中。

解决方案

        返回空对象就是哪怕这个数据不存在,也会将他存在缓存中,到时候再有请求就会返回一个空对象。

        布隆过滤器是一个基于哈希冲突的思想来判断这个数据是否存在,如果判断不存在,直接拒绝这个请求,如果存在,则进入缓存中找,没有进入数据库中找,并存入缓存。


五、为什么用redis做缓存

因为redis的读取速度很快,他是直接存储在内存中的,相对于传统数据库,redis的读取速度可以提高几十倍甚至上百倍。

而且redis支持持久化便于数据的备份、恢复。

支持事务,操作满足原子性。

并且缓存有过期机制。


注:本篇文章都是我自己的理解,可能用词和语句不够严谨,如有错误请评论指正,谢谢!(持续更新中......)

你可能感兴趣的:(redis,java,github)