Redis

作者把所有知道的redis知识进行总结,会有不全的地方,作者持续更新

Redis

为什么要使用Redis ?
  • 提高性能,缓存的查询速度比数据库的查询速度快(内存vs硬盘)
  • 提高并发能力,缓存分担了部分请求,支持高并发
一、雪崩
  • 产生原因:
    1 . 服务器崩了,导致缓存失效,所有查询都直接查询数据库
    2 . key的过期时间都是都同一时间,这段时间查询都是直接查询的数据库
  • 解决方案
    1 .Redis使用集群实现高可用
    2 .设置本地缓存短期应对Redis的雪崩
    3 .进行redis的持久化,事发后快速回复缓存
    4 .应对key统一的过期时间,在一个时间段内给过期时间添加一个随机数,让所有的key不在统一的时间过期(根据不同的需求:eg: 0:00~0.15)
二、穿透
  • 产生原因: 是由于客户端恶意请求一个缓存不存在的key ,缓存中没有,直接进行数据库的查询,而数据库进行全表的查询也会查询不到结果
  • 解决方案:
    1 添加过滤器(bloomFilter)
    2.查询出的空对象添加到缓存中,并且设置一个较短的过期时间
三、持久化
  • RDB: 当前进行数据生成的快照,保存到硬盘中,RDB分为手动/自动,
    1.优点:数据恢复快
    2.缺点:比较耗性能,没有办法做到实时备份,对版本要求比较高不能做到新老版本的兼容
  • AOF:一日志的方式记录每次写的命令,重启AOF文件中的命令达到数据的恢复,目前Redis的主流的方式
    1.优点: 可以实时的备份数据
    2.缺点:相同的数据AOF文件要比RDB文件大,加载恢复数据慢,一直进行日志追加,文件越来越大,需要定期执行重写操作来降低文件的体积
四、Redis的数据类型
  • String :value可以是string、int,可以存储 jpg图片序列化的对象
    数据结构:二进制
  • hash: 适合存储key/value类型的数据,使用 key+filed 进行查询
    数据结构:HashMap
  • List: 存储String列表,可以做消息队列
    数据结构: 双向链表
  • Set :String无序集合,set不存储重复数据,可以保证集合中的数据的唯一性
    数据结构:HashTable
  • ZSet(sorted set) : 有序的字符串队列,使用场景是(分数,名称排序),set集合可以保证数据的唯一性
    数据结构:HashMap+SkipList(跳跃表)
五、缓存与数据的双写一致
  • 读操作:数据库查不到不写入缓存
  • 两种情况
    1.先更新在删除: 缓存刚好失效,A查询数据库得到一个旧值,B更新数据库,后删除缓存,A将旧值写入缓存中(概率低,高并发优异,原子性破环不如意)
    2 .先删除在更新 :A删除缓存,B查询缓存发现发现没值,直接查询数据库得到旧值,B将旧址写入缓存,A将新值写入数据库(单线程很好,高并发不如意)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值