1、Redis的优缺点
优点:基于内存,读写速度快,可以达到每秒10万次的操作,
缺点:内存空间有限,存储数据量小,只能处理少量数据的高并发操作
2、Redis常见的缓存同步方案
同步缓存:更改代码逻辑,在在数据库保存完数据之后,在添加将数据保存到缓存中的代码
异步缓存:在数据库完成数据的保存之后,将数据发送到MQ中,消费者监听到队列中的数据之后尽心数据的缓存
3、Redis常见的数据结构
String:字符串结构
hash:键值对数据
list:数组(有序可重复)
set:集合(无需不可重复)
zset:可根据分值来指定集合中数据的存取顺序
4、Redis的删除策略
在向redis中存储key时,会指定一个过期时间,到key到达过期时间时,会进行删除,有3中删除策略
定时删除:在指定数据过期时间时,会创建一个定时器,当定时器的过期时间到达时,会立即删除这个key
优点:对内存友好,内存中不会存在过期的key
缺点:对CPU不友好,当过期数据过多时,会延迟对前端的响应时间,降低吞吐量
惰性删除:当用户在使用到某一个key时,会先检查这个key是否过期,过期删除,
缺点:对于不常用且过期的数据,会一直存在内存中占用空间
定期删除:每过一段时间,会对内存中的一部分数据/或对整个内存的数据进行检查看是否过期,然后决定是否删除
缺点:对于只检查一部分数据是否过期的删除策略,可能有些过期数据监测不到,而造成返给用户过期的数据
5、Redis的淘汰策略
redis的内存空间不足,在加入新的数据时,会根据某种规则进行数据删除,这种规则就是淘汰策略
1、无法添加新数据,也不会删除已有数据,直接报错
2、删除使用历史时间最久的数据
3、删除使用次数最少的数据
4、随机挑选一部分数据进行删除
6、Redis的缓存穿透、击穿、雪崩
穿透:用户在访问一个没有的数据时,缓存中没有,则访问数据库,然后返回null,当有大量这种请求时,对数据库造成压力可能导致宕机
解决办法:当该请求没有查到这个数据,返回null时,将这个null值也保存到缓存中,并设置一个较短的过期时间,使得下次再有此类请求可以在缓存中获取数据返回 / 也可使用布隆过滤器来解决
击穿:对于一个设置了过期时间的key,在请求该key时,恰好此时这个key过期了,当有多个请求同时访问这个过期key时,大量请求会访问数据库,造成数据库压力
解决办法:用互斥锁,有一个请求访问数据库数据时其他请求无法访问,当该请求访问完毕之后缓存中会保存该数据,后面其他的请求会从缓存中获取数据
对于热点数据,不设置过期时间
雪崩:类似击穿,只不过是多个key同时过期,多个请求同时访问数据库造成压力
解决办法:给每个key设置不同的过期时间,将key的到期时间错开,比如说在原本到期时间上加一个1-5分钟的随机值
7、什么是布隆过滤器
布隆过滤器会通过数据库中保存的数据,初始化一个很大的容器,将每个数据通过三个算法计算出来三个不同的hash值放入到这个容器中,有请求进会计算该请求的数据的3个hash值,再在容器中比对有没有对应的组合,有就 放行,没有就拦截
8、Redis的集群方案
主从复制:一个master负责写,多个slave负责读,实现高可用,出现故障需要手动实现故障转移,不能存储海量数据
哨兵机制:由一个哨兵集群来检测redis集群节点的健康状态,实现高可用,故障自动转移,不能存储海量数据,一个哨兵每个一段时间向redis中的集群节点发出ping命令接收回应来检测集群节点健康状态,当有一个哨兵认为某一个节点出现故障时,此时为主观下线,当有一半以上的哨兵认为此节点故障时,为客观下线,
分片集群:多个主从集群,多个master,一个master对应一个或多个slave节点,多集群中的master互相检测对方的健康状态,实现高可用,故障自动转移,存储海量数据,
9、Redis的哈希槽
在redis的分片集群中,每个master节点有有一部分插槽,插槽与数据进行映射,根据key的有效部分通过一个算法计算得到一个数,这个数决定key存储在哪个插槽上,当key有{}时,根据{}里面的字符计算这个数,当无{}时,根据整个key的字符计算这个数,当某个master节点发生故障时,将故障节点上的插槽转移到健康节点上就可完成故障后的数据同步,或者集群中有新增的master节点,可以将某一个master节点上的插槽分一部分给新的master节点,
插槽还有一个好处,可以通过控制key,将多个数据保存在同一个插槽上,插槽数量是固定的,一共有16834个,只有master节点上才有插槽
9、Redis如何批量添加数据
在向redis中添加大量数据时,如果是用普通的方式添加,会耗费很多时间,因为在客户端向redis发送一条添加命令时,要先完成通信连接,每次连接会耗费大概10毫米,时间会随着添加数据的数量增加而增长,redis中有一个管道技术,在创建管道之后,在进行数据的批量添加,相当于客户端和redis值进行了一次通信连接,降低连接的耗时来提高效率
10、Redis的事务理解
在redis的事务中,可以把多个命令看做是一个集合,要么都执行,要么都不执行
在事务开启后,会按顺序一次执行命令,在执行的过程中,其他客户端发出的命令不会插入到当前事务中
三个特性:原子性、顺序性、一致性
11、
标签:缓存,过期,Redis,key,数据,节点 From: https://www.cnblogs.com/jiaocha/p/16848876.html