首页 > 编程知识 正文

redis的五种数据类型,redis是干嘛的

时间:2023-05-03 13:26:52 阅读:232117 作者:4000

redis 关系数据库跟redis的区别redis持久化哨兵主从同步缓存雪崩穿透击穿

关系数据库跟redis的区别 完全基于内存绝大部分就是内存操作非常快类似于HashMapHashMap的优势就是查找和操作的时间复杂度都是O1数据结构简单对数据操作也简单采用单线程避免了不必要的上下文切换和竞争条件也不存在多进程或者多线程导致的切换而消耗的cpu不用考虑各种锁的问题

上下文切换 通俗的讲就好比你看了一本书看到第十页你加上书签不看了后来又开始从书签那里读。这里没问题但是别的小伙伴好奇你看的什么就翻看了一下书签位置被改变。一个人怎么看都没事但是人多就换来换去的操作一本书数据就会乱。

使用多路i/o复用模型非阻塞ioRedis直接自己构建了VM 机制 因为一般的系统调用系统函数的话会浪费一定的时间去移动和请求 redis持久化

持久化是redis高可用中比较重要的一个环节因为redis数据在内存这一特性持久化就必须有不然一断电或者电脑关机就会丢失数据。

RDBRDB持久化就是对数据进行周期性持久化AOFAOF机制就是对写入命令作为日志以append-only的方式写入一个日志文件中因为这个模式就是追加的方式所有没有任何磁盘的开销很快类似于mysql中的binlog

注意两种机制全部开启的情况下redis在重启的情况下默认使用AOF去重新构建数据。

两种机制优缺点 RDB优点

他会生成多个数据文件每一个数据文件都代表某一时刻redis中的数据适合做冷备定时同步到远程服务器上比如阿里云的服务器一旦线上挂了就去远端拷贝一份之前的数据就好了。

RDB对redis的性能影响非常小在数据恢复的时候速度比AOF快

RDB缺点

RDB都是快照文件默认是五分钟甚至更久才会生成一次这意味着这次同步到下次同步的这段时间数据可能丢失AOF最多丢一秒数据。如果生成快照的时候文件特别大就会使客户端卡顿几毫秒甚至几秒

AOF优点

它是以追加的方式进行写数据自然就少了很多磁盘寻址开销写入性能惊人文件还不容易破损适合做灾难性数据误删除的紧急恢复

AOF缺点

一样的数据AOF要比RDB大数据恢复没有RDB快 哨兵

哨兵主从同步不能保存数据不丢失但是可以保证集群的高可用

哨兵组件的主要功能

集群监控负责监控Redis master 和slave进程是否正常工作消息通知如果某一个redis实例有故障那么哨兵负责发送消息作为报警通知管理员故障转移如果master node挂掉了会自动转移到slave node上配置中心如果故障发生了通知client客户端新的master地址 主从同步

你启动一台slave 的时候他会发送一个psync命令给master 如果是这个slave第一次连接到master他会触发一个全量复制。master就会启动一个线程生成RDB快照还会把新的写请求都缓存在内存中RDB文件生成后master会将这个RDB发送给slave的slave拿到之后做的第一件事情就是写进本地的磁盘然后加载进内存然后master会把内存里面缓存的那些新命名都发给slave。

缓存雪崩

举个例子假如首页的key都是12小时后过期中午12点刷新的我零点有一个秒杀活动假设每秒有6000个请求本来缓存可以扛住每秒5000个请求的但是缓存中的所有key都失效了这个时候1秒6000个请求就全部落入数据库数据库扛不住的如果没有什么特别好的方案来处理这个故障就算重启数据库数据库也会被新的流量给打死。

如何处理雪崩

在批量往redis存数据的时候把每一个key的失效时间都加个随机值这样可以保证数据不会在同一时间大面积失效我相信失效一部分redis还是能扛住这点流量的。如果Redis是集群部署将热点数据均匀分布在不同的Redis库中也能避免全部失效的问题设置热点数据永远不过期有更新操作就更新缓存就好了保险 穿透

缓存穿透是指缓存和数据库中都没有的数据而用户不断发起请求我们的数据库的id都是1开始自增上去的如发起者id值为-1的数据这时的用户可能就是攻击者会导致数据库压力过大严重会击垮数据库。

解决办法

在接口层增加校验比如用户鉴权校验参数校验不合法的参数直接拦截在网关层有配置项讲每秒访问量超过阈值的进行拉黑布隆过滤器他的原理也很简单就是利用高效的数据结构和算法快速判断出你这个Key是否在数据库中存在不存在你return就好了存在你就去查了DB刷新KV再return。 击穿

至于缓存击穿和缓存雪崩有点像缓存雪崩是因为大面积的缓存失效打崩了DB而缓存击穿不同的是缓存击穿是指一个Key非常热点在不停的扛着大并发大并发集中对这一个点进行访问当这个Key在失效的瞬间持续的大并发就穿破缓存直接请求数据库就像在一个完好无损的桶上凿开了一个洞。

解决办法

缓存击穿的话设置热点数据永远不过期。或者加上互斥锁就能搞定了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。