Redis汇总
Redis以及缓存要素
缓存问题:
缓存是什么数据结构存储 K-V
缓存的开发语言 c语言
缓存运行环境 内存中
因为在内存中,如果断电则会全部删除,可以持久化
缓存一直在数据中,会发生内存溢出
redis是一个开源的,内存中的数据结构存储系统,可以用作数据库,缓存和消息中间件,支持多种类型的数据结构,字符串,散列,列表,集合,有序集合,速度达到11.2万次/秒,写为8.6万/秒,所有的操作都基于原子性的
redis和其他k-v结构区别不同的是,一,redis针对于原子性操作,二,redis可以持久到磁盘
redis分片机制
一致性hash说明
1.首先计算node节点
2.将用户的key进行hash计算,之后按照顺时针的方向找到最近的node节点之后执行连接,执行set操作
平衡性:是值hash的结果应该平均分配到各个节点,从算法上解决了负载均衡
单调性:在新增或者删减节点时,不影响系统正常运行因为可以实现自动的数据迁移
分散性:分散性是值数据应该分散的存放在分布式集群中的各个节点
redis哨兵的工作原理
1.当哨兵启动时,会监控当前主机信息,同时获取连接当前主机的从机信息
2.当哨兵利用心跳检查机制,校验主机是否正常,如果连续3次发现主机没有相应信息则开始选举
3.当哨兵选举完成后,其他节点将成为新的主库的从库
总结:哨兵是实现分片高可用的,因为本身分片本身不支持高可用,但哨兵本身没有实习高可用,所有存在风险
redis集群
redis集群算法
hash槽算法 分区算法
所有的键根据CRC16[key]%16384映射到0-16383槽内,每个节点维护部分槽及槽所映射的键值数据,根据主节点的个数,均衡划分区间
redis集群最多的槽为16384个
redis持久化
RDB模式
RDB模式可以定期的持久化,但是可能导致数据丢失,默认模式
模式采用:
RDB模式此采用的是内存数据快照,并且后面快照会覆盖之前快照,所有工作效率快,速度较快
运行操作:同步和异步
同步保存,会导致用户阻塞
异步保存,不保证立即执行
AOF模式
AOF模式默认条件下是关闭状态,需要手动开启
AOF模式记录的是用户执行的状态(收到的命令写入),所有持久化文件占用空间相对比较大,恢复数据较慢,数据尽可能不会丢失
两种模式应用场景,数据可以少量丢失,采用RDB,不允许采用AOF,主库用RDB,从使用AOF
redis内存优化
LRU算法:即最近少使用
LFU算法:点击少的
Random:随机
TTL:存活时间少的提前删除
redis面试汇总
缓存雪崩: 原有缓存失效新缓存未到期间
解决办法: 加锁或者采取队列保证不会有大量线程对数据库进行读写
缓存穿透: 用户查询数据,数据没有,缓存也没有,导致每次都要进入数据库查询
解决办法:简单的办法结束将结果空值返回,但是这样只能持续不到5分钟
采用布隆过滤器
缓存击穿:一个key在扛着大量并发,在失效期间,击穿大量进入数据库
解决办法:用一个短期key锁定访问,访问结束删除短期key
缓存预热:针对于刚上线系统,可以先添加缓存
缓存更新:1.定期清理 2.判断是否失效
缓存降级:当服务器出现问题,进行降级
redis单线程为什么快? redis基于内存的存储数据系统,在内存,当然快
redis集群方案? 我目前使用的是3.0自带,指定第三方,但没使用过
