Redis持久化方式两种方式:RDB(默认)和AOF

1 : RDB持久化原理:通过bgsave命令触发,然后父进程执行fork操作创建子进程,子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换(定时一次性将所有数据进行快照生成一份副本存储在硬盘中)
优点:是一个紧凑压缩的二进制文件,Redis加载RDB恢复数据远远快于AOF的方式。
缺点:由于每次生成RDB开销较大,非实时持久化,
2 : AOF持久化原理:开启后,Redis每执行一个修改数据的命令,都会把这个命令添加到AOF文件中。
优点:实时持久化。
缺点:所以AOF文件体积逐渐变大,需要定期执行重写操作来降低文件体积,加载慢

redis是单线程的,但是为什么还是这么快呢,
  原因1: 单线程,避免线程之间的竞争
  原因2 :是内存中的,使用内存的,可以减少磁盘的io
  原因3:多路复用模型,用了缓冲区的概念,selector模型来进行的

1,缓存穿透: 缓存中没有对应数据,且数据库也没有对应数据,并用户频繁访问如(id=-1)导致数据库压力过大(考虑攻击者)
解决方案:加以(接口层,用户,id)等校验方式
2, 缓存击穿:缓存中对应得数据过期,数据库有对应数据,又有大批用户访问该数据导致数据库压力过大
解决方案:(1)可设置热点数据长期有效 (2)加互斥锁
3,缓存雪崩:缓存中大量得数据过期(而不是某一条)导致数据库压力过大甚至宕机
解决方案:(1)控制数据过期时间段不一致 (2)缓存数据分部署对应数据存不同数据库 (3)可设置热点数据长期有效

你可能感兴趣的:(redis,数据库,缓存)