redis面试这几个问题能回答上来吗?
背景
提到redis大家应该都不陌生,现阶段中小企业但凡对数据库读写能达到每秒上万次都会使用kv数据库来减轻对后端数据库的压力。redis也是kv数据库中性能和高可用方面做的比较好的,当然也是面试过程中面试官的战场,下面看看哪些知识点是我们应该在接下来面试中要准备的。
资料获取
文章内容有限,更多redis面试相关资料获取如下
redis高频面试题
提取码: wdof
提取码过期请关注公众号回复redis重新获取:*
常见问题
1、redis有哪些优缺点
- 优点:
- redis是基于内存高性能键值对服务器,每秒能达到10万次的读写;
- 支持多种数据类型(string、list、hash、set、zset等),提供了各种api供使用
- 支持数据持久化,提供了AOF和RDB两种持久化方案供使用
- 集群扩缩容方便
- 缺点:
- redis完全基于内存的,其存储的数据量受到物理内存大小的限制。
- aof模式下,在极端情况下可能会丢失数据,丢失数据的多少和aof同步数据的策略有关(always,everysec,no)
2、redis 数据持久化方式有哪些?
- RDB :是将内存中的快照保存在磁盘中,触发周期性保存可在配置文件中指定save 相关参数,
- 优点:
- rdb开始备份时,redis会fork出子进程进行数据操作,主进程响应请求,不会影响客户端的读写
- rdb备份后是一个问题,方便在远程服务器上存储,异地容灾
- rdb的数据恢复速度比aof要快很多
- 缺点:
- rdb是一段时间进行持久化,容易出现数据丢失
- 优点:
- AOF:append only file,意思将每次写操作追加记录到一个文件中(redis7为提高性能,出现了三个文件,只有一个文件会有变化),重启后默认会从aof加载文件对redis进行重载。
- 优点:
- aof使用apendfsync:always可以最大程度减少数据丢失。
- 命令写入aof文件时出现宕机,造成文件损毁,可通过redis-check-aof命令进行修复。
- 缺点:
- aof文件占用相对于rbd来书较大,当然对源文件重写会好点
- 数据量比较大的时候aof的恢复速度要慢很多。
- 优点:
3、redis失效策略
- 内存淘汰策略
- 全局键空间选择性移除
- noeviction: redis内存满的时候,新写入相关操作会报错
- allkeys-lru: 移除最少使用的key
- allkeys-random: 随机移除某个key
- 设置了过期时间的键空间选择性移除
- volatile-lru: 在设置了过期时间的键空间中,移除最少使用的key
- volatile-random: 在设置了过期时间的键空间中,随机删除某个key
- volatile-ttl: 在设置过期时间的键空间中,有更早要过期的key优先移除
- 全局键空间选择性移除
- 缓存失效策略
- 定期清除:对设置了过期时间的key都指定定时器,到期自定清除
- 惰性清除:访问key时是判断是否过期,对内存不是很友好
- 定期扫描清除:定时多长时间固定扫描过期的字典,如果存在超25%过期key未删除,则继续进行扫描删除
4、redis有哪几种常用的读写模式
- 旁路缓存:读请求未命中则查询数据库,查询完成后写入缓存;写请求更新数据库后删除缓存数据
- 读写穿透:先查询缓存中数据是否存在,如果存在则返回,否则,由缓存组件负责从数据库中同步加载数据
- 异步缓存写入
5、redis数据分区方式
- 哈希取余运算:对节点数取余,算法节点,但是不稳定,集群扩容缩容会出现大量数据迁移
- 一致性哈希运算:将redis节点依次3排列在首尾相接的hash环上,每个key在计算hash后顺时针找打第一次遇到的存储节点存放,集群节点伸缩只影响对应hash环上的后续节点,相对于哈希取余数据变动较小。
- hash槽:集群吧所有的物理节点映射到0-16383个槽位,对key采用crc64算法得到hash值后对16384取模,基本上连续分配和平均分配的方式