Redis面试总结

混江龙づ霸主 提交于 2020-11-05 00:33:54

一、Redis介绍

    C语言开发的高性能k-v缓存中间件,支持string、set、sorted set、list、hash数据结构。

二、Redis优势

    大部分操作都是纯内存操作,速度非常快

    数据结构简单,操作方便

    单线程,避免了频繁的上下文切换和竞争

    多路IO复用模型,非阻塞IO

三、应用场景

    计数器、常用缓存、回话缓存、消息队列(lpush、rpop)、分布式锁

四、Redis持久化

    两种模式都开启的情况下,重启会优先选择AOF恢复。

    RDB(默认):按照一定时间,将内存数据以快照形式保存到硬盘中

        优点:只有一个文件,方便持久化;fork子线程来进行持久化,保证了高性能;大数据集时启动比AOF快。

        缺点:安全性低、每隔一段时间进行持久化,若持久化过程中出现故障,会导致数据丢失,适合对数据严谨要求不高的场合。

    AOF:Redis将每次写命令记录到单独的日志文件中,当重启Redis会从日志文件的命令执行一遍恢复数据

        优点:安全性高,每一个写操作都会记录到aof文件中,即使备份过程中出现故障,也可通过redis-check-aof工具修复。aof文件过大时可以进行重写合并一些操作命令。

        缺点:比RDB文件大,恢复效率低

五、key删除策略

    定时删除+惰性删除

    定时删除:定期扫描随机获取一些key,如果过期进行删除。

    惰性删除:在访问的时候,发现key已经过期,再删除。

六、内存不足时的key淘汰策略

    全局键空间设置:

           写入报错、移除最近少使用的key、随机删除

    设置过期时间的键空间设置:

            移除最近少使用的key、随机删除、更早过期删除

七、Redis事务

    三阶段:事务开始、命令入队、事务执行(一次性、顺序性、排他性)

    不支持回滚、命令错误则事务内的所有命令都不执行、执行时有运行错误则正确的命令会被执行。

八、集群

1. 基于哨兵的主从模式

    哨兵是redis集群中一个非常重要的组件

    主要作用有:集群监控、消息通知、故障转移、配置中心

    故障转移时,判断一个master节点是否不可用,需要大部分哨兵都同意才行,涉及分布式选举的问题。

    即使部分哨兵节点挂掉,哨兵集群还是可以正常工作。

    至少需要3个节点实例保证健壮性、哨兵+redis主从集群是不能保证数据零丢失的。

2. 官方Redis Cluster集群方案

    slot卡槽,一共16384个槽,请求发送到任意节点上,接受到请求的节点会将查询请求发送到正确的节点上。

    通过hash将数据分片,每个节点上存储一定的hash槽区间

 

缓存穿透、缓存预热、热点数据

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!