- 1:Redis支持五种数据类型:
- 2:删除策略
- 3:什么是过期数据?
- 4:删除策略解决的问题?
- 5:redis中时效性数据的存储结构
- 6:redis中三种删除策略的比较
- 7:淘汰策略
- 8:当新数据进入redis时,如果内存不足怎么办?
- 9:主从复制(三高:高并发,高可用,高性能)
- 10:redis集群
- 11:缓存预热:
- 12:缓存雪崩:
- 13:缓存击穿:
- 14:缓存穿透:
- https://blog.csdn.net/weixin_42000552/article/details/106225913)">15:RDB与AOF(https://blog.csdn.net/weixin_42000552/article/details/106225913)
1:Redis支持五种数据类型:
string(字符串),hash(哈希),list(列表),set(集合)及 zset(sorted set:有序集合)。
2:删除策略
删除策略
①定时删除
在redis存储空间中,当计时器的大小等于expires中存储的过期时间时,先删除存储的数据,然后再删除expires中存储的关于该数据的内容
②惰性删除
在redis存储空间中,当计时器大小等于expires中存储的过期时间时,自动忽略,直到再次调用时进行数据删除
③定期删除
周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度
3:什么是过期数据?
4:删除策略解决的问题?
5:redis中时效性数据的存储结构
redis存储空间中以key—value形式存在,value还会有一个地址值,存放在expires空间,作为filed,有效时间作为value(相当于hash)
6:redis中三种删除策略的比较
定时策略:消耗cpu,节省内存
惰性策略:节省cpu,消耗内存
定期策略:cpu压力不大,内存消耗适中
7:淘汰策略
设置了有效时间:(最少使用,即将过期,随机)
- volatile-lru: 只限于设置了 expire 的部分; 优先删除最近最少使用(less recently used ,LRU) 的 key。
- volatile-random: 只限于设置了 expire 的部分; 随机删除一部分 key。
- volatile-ttl: 只限于设置了 expire 的部分; 优先删除剩余时间(time to live,TTL) 短的key。
所有数据通用:(最少使用,随机)
- allkeys-lru: 所有key通用; 优先删除最近最少使用(less recently used ,LRU) 的 key。
- allkeys-random: 所有key通用; 随机删除一部分 key。
**
- noeviction: 不删除策略, 达到最大内存限制时, 如果需要更多内存, 直接返回错误信息。 大多数写命令都会导致占用更多的内存(有极少数会例外, 如 DEL )。
8:当新数据进入redis时,如果内存不足怎么办?
在执行每一个命令前,会调用freeMemoryIfNeeded()检测内存是否充足。如果内存不满足新 加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。清理数据的策略称为逐出算法。
注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功则反复执行。当对所有数据尝试完毕, 如不能达到内存清理的要求,将出现错误信息
9:主从复制(三高:高并发,高可用,高性能)
(1)概念
将master(主服务器,主节点)上的数据及时有效的同步到slave(从服务器,从节点)中,master负责写也可用于读数据,slave负责读
(2) 主从复制的作用
(3) 主从复制的流程
建立连接阶段(即准备阶段,slave——》master)
数据同步阶段(master数据同步到slave中)
命令传播阶段(反复同步)
(4) 主从复制工作流程详解

命令传播:
当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的状态,同步的动作称为命令传播,master将接收到的数据变更命令发送给slave,slave接收命令后执行命令
(5) 主从复制如何完成数据同步
(6) redis中的心跳机制
进入命令传播阶段候,master与slave间需要进行信息交换,使用心跳机制进行维护,实现双方连接保持在线
(7)当master宕机后sentinel是如何知晓并判断出master是真的宕机了呢?
当哨兵的leader无法与redis集群的master进行交流,则通知其他的哨兵,其他哨兵开始与这个master进行交流,如果都无法交流,则哨兵的leader就告诉其他服务器,表示这个master已经不在线。需要根据一定原则选举出一个新的master,选举结束以后,告诉其他的slave,master已经更新,并且将信息发送过去,这些slave切换amster,原master作为slave故障恢复后连接。
(8)哨兵模式(leader宕机):
哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。
哨兵主要职责:监测,通知,故障转移。
执行流程:每个人都会发出一个指令,在内网里边告诉大家我要当选举人,比如说现在的sentinel1和sentinel4发出这个选举指令了,那么sentinel2既能接到sentinel1的也能接到sentinel4的,接到了他们的申请以后呢,sentinel2他就会把他的一票投给其中一方,投给谁呢?谁先过来我投给谁,假设sentinel1先过来,所以这个票就给到了sentinel1。那么给过去以后呢,现在sentinel1就拿到了一票,按照这样的一种形式,最终会有一个选举结果。对应的选举最终得票多的,那自然就成为了处理事故的人。需要注意在这个过程中有可能会存在失败的现象,就是一轮选举完没有选取,那就会接着进行第二轮第三轮直到完成选举。
10:redis集群
(1):redis集群作用:
降低单台服务器的访问压力,实现负载均衡
降低单台服务器的存储压力,实现可扩展性
降低单台服务器带来的业务灾难
(2):redis集群数据存储设计:
通过算法设计,计算出key应该保存的位置
将所有的存储空间计划切割成16384份,每台主机保存一部分
注意:每份代表的是一个存储空间,不是一个key的保存空间
将key按照计算出的结果放到对应的存储空间
当我们查找数据时,集群是如何操作的呢?
各个数据库相互通信,保存各个库中槽的编号数据
一次命中,直接返回
一次未命中,告知具体位置
11:缓存预热:
产生原因:服务器启动后迅速宕机
系统启动后,访问reids缓存获取数据,redis中没有数据,直接去访问数据库,然后将数据存入redis中,短时间内造成redis访问压力过大,从而导致宕机。
解决思路:
缓存预热:缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据
12:缓存雪崩:
产生原因:
由于数据库服务器崩溃,造成的一系列问题,简单来说。就是短时间范围内,大量key集中过期
解决思路:
缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造成压力。如能够有效避免过期时间集中,可以有效解决雪崩现象的 出现(约40%),配合其他策略一起使用,并监控服务器的运行数据,根据运行记录做快速调整。(灾难预警机制,灾难预警,限流降级)
13:缓存击穿:
产生原因:
数据库服务器崩溃,单个key高热数据,key过期
解决思路:
缓存击穿就是单个高热数据过期的瞬间,数据访问量较大,未命中redis后,发起了大量对同一数据的数据库访问,导致对数 据库服务器造成压力。应对策略应该在业务数据分析与预防方面进行,配合运行监控测试与即时调整策略,毕竟单个key的过 期监控难度较高,配合雪崩处理策略即可。
14:缓存穿透:
产生原因:
获取的数据在redis中不存在,数据库查询未得到对应数据,Redis获取到null数据未进行持久化,直接返回,下次此类数据到达重复上述过程
解决思路:
布隆过滤器
缓存击穿是指访问了不存在的数据,跳过了合法数据的redis数据缓存阶段,每次访问数据库,导致对数据库服务器造成压力。通常此类数据的出现量是一个较低的值,当出现此类情况以毒攻毒,并及时报警。应对策略应该在临时预案防范方面多做文章。
15:RDB与AOF(https://blog.csdn.net/weixin_42000552/article/details/106225913)
Redis持久化——RDB
指定的时间间隔内(m时间内至少n个数据改动)采用快照保存,恢复时候直接读取快照文件到内存中。
优点:创建子进程执行持久化操作,主进程不执行任何io操作,效率高
恢复速度快
节省磁盘空间
缺点:两次备份之间,如果redis意外关闭,可能会丢失数据
Redis持久化——AOF
日志形式记录文件,只可追加文件,不可修改文件,
优点:
缺点;
rewrite:
AOF采用文件追加方式,新增重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据集的最小指令集。可以使用命令bgrewriteaof。