缓存穿透:

 缓存穿透是比较严重的问题,就是一个业务请求先查询redis,redis没有这个数据,那么就去查询数据库,但是数据库也没有,但是请求到数据库,他就会挨着查,数据一多,这一趟下来,数据库估计就半残,万一请求再一多,那数据库干脆两腿一伸,那数据库寄了,我们服务器不就直接嗝屁了嘛,所以要避免这种情况 ,怎么解决呢,可以使用布隆过滤器,这玩意儿就像一个存数据库里面有的数据id的数组,然后在请求来的时候,就可以先在这里面查id,有,我再去数据库看,没有的话那不好意思出门左拐,然后它又是在内存中运行的,存的也就是id,那是不是就非常快,就避免了大量请求空数据导致缓存穿透。

缓存击穿:

 这玩意儿比较常见,就是redis里面数据过期了,然后请求打过来,就会直接去数据库里面拿,一般这个影响不大,而且我们为了同步信息本来就要设置缓存里面数据的过期时间。

缓存雪崩:

雪崩是什么,就是说,山上的一片片雪同时,大量的一起掉下来,缓存也一样,就是同时有大量的数据过期,本来数据库就是脆皮,你这前排坦克突然就跑了,伤害全打数据库身上了,那他不也寄了嘛,所以这种情况也需要避免,但是很简单,就是把数据的过期时间分散开来,这个时间你过期,那个时间我过期,就能保证数据库前面始终有盾牌挡住。

什么时候使用缓存:

1.数据量不能太大  2.使用越频繁,Redis保存这个数据越值得   3.保存在Redis中的数据一般不会是数据库中频繁修改的

缓存淘汰策略:

就是在redis中数据存满了,但是又想存新的,默认的是(返回错误noeviction),如果你就想存进去,那么就需要把老数据噶了,然后就有很多种方式来噶老数据(allkeys是根据所有数据作为基础条件,volatile是根据过期时间作为基础条件)

  • allkeys-random:所有数据中随机删除数据
  • volatile-random:有过期时间的数据中随机删除数据
  • volatile-ttl:删除剩余有效时间最少的数据
  • allkeys-lru:所有数据中删除上次使用时间距离现在最久的数据
  • volatile-lru:有过期时间的数据中删除上次使用时间距离现在最久的数据
  • allkeys-lfu:所有数据中删除使用频率最少的
  • volatile-lfu:有过期时间的数据中删除使用频率最少的

缓存持久化: 

redis的数据是在内存中的,所以说如果断电,就全没了,那再开机就只能找数据库要了呗,那数据库那么慢,这数据量这么大,数据库只能说你急吗?急也没用。所以打铁还需自身硬,redis就自己把数据保存在硬盘上。这就叫持久化。

第一种叫RDB(Redis Database Backup)

就是生成一个文件叫dump.rdb,重启后就可以去里面读了,可以在redis的配置文件中设置保存的时间间隔

      

save 60 5

           

上面配置中60表示秒,5表示Redis的key被更新的次数配置效果:1分钟内如果有5个及以上的key被更新,就启动rdb数据库快照程序

保存的只有数据,所以万一有啥指令啥的就要重新搞,而且从文件中读取效率也比较低。

然后第二种就是AOF(Append Only File)

这个就是保存你所有干过的指令,重启了跑一遍就ok了,可以在配置文件中

appendonly yes

来开启 ,但是实际情况下,Redis非常繁忙时,我们会将日志命令缓存之后,整体发送给备份,减少io次数以提高备份的性能 和对Redis性能的影响实际开发中,配置一般会采用每秒将日志文件发送一次的策略,断电最多丢失1秒数据。优点就是丢失的信息更少,缺点就是占空间更大。有一个AOF的小优化就是重写,可以删除部分无用的指令。

以上暂时就是几个redis相关的问题理解,希望可以帮助到需要的人(我自己)。