当前位置:   article > 正文

redis的数据持久化、数据删除策略、雪崩\穿透\击穿问题处理_redis删除持久化数据

redis删除持久化数据

什么是Redis

Redis是一个基于内存读写数据的高性能非关系型数据库,数据格式以key-value形式存储。企业开发中常用来存放缓存数据,减少关系型数据库的压力,提高请求的响应效率。

数据持久化

Redis使用内存来提高读写数据的效率,但是数据在内存中容易丢失,所以Redis提供了两种数据持久化机制。

  1. AOF
    持久化机制: 当Redis数据发生更新时,会将操作命令记录在一个日志文件当中,在日志文件结尾追加。Redis重启时,将日志文件的命令重新执行一遍,以达到数据恢复的目的。

    优点: 每次数据变化都会记录下来,数据不易丢失

    缺点:
    耗性能:每次记录操作时,都会开启一个进程来记录操作命令。
    恢复数据慢:恢复数据时需要将日志中的全部命令执行一遍

  2. RDB
    持久化机制: 每间隔一段时间,将当前Redis数据库中的所有数据以快照的形式存储到文件当中,当Redis重启时会将快照中的数据加载到Redis中。
    优点: 恢复数据快,直接恢复快照中的数据
    缺点:
    数据容易丢失:在保存快照的时间间隔时发生宕机,这段时间的数据是无法恢复的
    耐久性差 :保存快照是需要耗费性能的,如果在保存快照时对数据进行读写,会存在等待响应的时间

  3. 当然,两者可以组合使用,既可以保证数据的快速恢复又可以保证数据不丢失

数据删除策略

Redis的数据可以设置有效时间,当Redis数据失效时,Redis有多种机制来清除失效的数据。

  1. 定期删除(立即删除)

     数据一旦过期立即删除	
    
    • 1

    优点: 快速删除不需要的数据,及时释放内存,节约内存
    缺点: 如果到期的数据量过大过多,会对CPU造成压力,影响性能

  2. 定期删除(随机删除)

     根据CPU的性能和内存占用情况对已过期的数据进行不定时的清除
    
    • 1
  3. 惰性删除

     数据到期时不进行删除,直到数据被访问时才进行删除
    
    • 1

    优点: 发现时才删除数据,节约CPU性能
    缺点: 内存中可能会存在大量的过期数据,内存压力会较大

Redis缓存穿透、击穿、雪崩问题处理

Redis缓存数据流程:

一般来讲,redis在项目中缓存的逻辑是先判断缓存中是否存在数据,如果存在直接返回,如果不存在,从数据库查找后再缓存到Redis中,然后再返回数据。

流程图如下:
在这里插入图片描述

缓存穿透

问题场景:

缓存穿透是指用户查询的数据在缓存和数据库中都不存在,然后请求量过大,导致数据库的压力过大,一般是有人恶意攻击的情况下导致,比如查根据用户id查询个人信息,但是有人一直通过 id = -1频繁访问接口,很明显用户id为-1的用户不存在。

解决方案:
1.可以设计访问请求监测机制,拦截非法请求用户
2.缓存的数据为key-value格式,可以将value设置为null,防止数据库产生过大压力

缓存击穿

问题场景:

缓存击穿一般是指缓存中没有的数据,数据库中存在,然后过大的并发量导致数据库压力过大。

举例说明:场假如某一商品为秒杀商品,将此商品信息放入缓存中,以减少查询数据库的压力,缓存有效期为商品秒杀结束前。此逻辑看似合理,但在实际应用场景中,秒杀结束后,用户依然会频繁访问此商品,此时缓存已过期,所有请求查询都会访问数据库,导致数据库压力过大。

解决方案:
1.延长数据的有效期或设置热点数据为永不过期
2.设置互斥锁减少访问数据库的请求

缓存雪崩

问题场景:

缓存雪崩一般是指某一时刻,缓存数据全部过期失效或者缓存服务器宕机,所有数据请求都通过数据库查询,数据库压力瞬间增大
缓存击穿与雪崩的区别:缓存击穿是指访问某一条数据,并发量过大。缓存雪崩是指缓存大量请求去访问不通的数据,而缓存中不存在。

解决方案:
1.随机延长数据的有效期,防止数据同时过期,减少访问数据库的频率
2.Redis集群防止单点故障

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/159901
推荐阅读
相关标签
  

闽ICP备14008679号