1、什么是Redis
Redis 是一个基于内存的高性能 key-value数据库。支持多种数据类型
2、简单描述Redis的特点
Redis本质上是一个key-value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据(内存中)flush到硬盘上进行保存。
纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的key-value DB
Redis的出色之处,不仅仅是性能,Redis最大的魅力是支持保存多种数据结构;
此外,当个value的最大限制是1GB,不像memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能;
Redis的主要缺点,就是数据库容量受到物理内容的限制,不能用做海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上
3、Redis支持的数据类型
String 、List 、 Set、 Sorted Set、 Hash
4、为什么Redis需要把所有数据放到内存中
- 追求最快的数据读取速度,如果直接磁盘读取会非常慢
- 为了保证数据安全,也会异步方式将数据写入磁盘
- 可以设置Redis最大使用的内存,若达到内存限制后将不能继续存取数据
5、Redis是单线程的么?
Redis是单线程处理网络指令请求,所以不需要考虑并发安全问题。
所有的网络请求都是一个线程处理,但不代表所有模块都是单线程。
6、Redis的持久化机制有哪些?区别是什么?优缺点是什么?
- 1.RDB持久化:原理是将Redis在内存中的数据库记录定时dump到磁盘上的RDB持久化
- 2.AOF(append only file)持久化:原理是将Redis的操作日志以追加的方式写入文件
区别:
RDB持久化的指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储
image.png
AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录
image.png
RDB 优点:
- RDB是紧凑的二进制文件,比较合适备份,全量复制等场景
- RDB恢复数据远快于AOF
RDB缺点:
- RDB无法实现实时或者秒级持久化
- 新老版本无法兼容RDB格式
AOF优点:
- 可以更好地保护数据不丢失
- appen-only模式读取性能比较高
- 适合做灾难性的误删除紧急恢复
AOF缺点:
- 对于同一份文件,AOF文件要比RDB快照大
- AOF开启后,写的QPS会有所影响,相对于RDB来说,写QPS要下降
- 数据库恢复比较慢,不适合做冷备
7、Redis的缓存失效策略有哪几种
- 定时删除策略
在设置key的过期时间的同时,为该key创建一个定时器,让定时器在可以的过期时间来临时,对可以进行删除
优点:保证内存尽快释放
缺点:如果key过多,删除这些key会占用很多CPU时间,而且每个key创建一个定时器,验证影响性能 - 惰性删除策略
key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null
优点:CPU占用时间比较少
缺点:如果key很长时间没有被获取,将不会被删除,可能造成内存泄漏 - 定期删除策略
每隔一段时间执行一次删除(在redis.conf配置文件设置hz,1s刷新的频率)过期key的操作
优点:可以控制删除操作的时长和频率,来减少CPU时间占用,可以避免惰性删除时候内存泄漏的问题
缺点:对内存友好方面,不如定时策略;对cpu友好方面,不如惰性策略
Redis一般采用惰性策略+定期策略两个相结合
8、什么是缓存命中率?提高缓存命中率的方法有哪些??
- 命中:可以直接通过缓存获取到需要的数据
- 不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其他的操作,原因可能是由于缓存中根本不存在,或者缓存已经过期
命中率越高表示使用缓存作用越好,性能越高(响应时间越短,吞吐量越高),并发能力也越好。
重点关注访问评率高且时效性相对低一些的业务数据上,利用预加载(预热)、扩容、优化缓存丽都。更新缓存等手段来提高命中率