Redis基础 事物 基本数据结构 持久化 主从复制 缓存穿透和雪崩

Redis基础

  • Redis的基本概念
  • 数据结构
  • Redis为什么单线程还这么快?
  • redis事物
    • Redis事物与MySQL事物对比
    • 事物机制:
    • Redis乐观锁Watch:
  • Redis的持久化:
    • 默认用rdb
      • RDB优点
      • RDB缺点
    • AOF机制
      • 优点:
      • 缺点:
  • 主从复制:都是服务器端
    • 概念
    • 作用:
    • 哨兵模式 从库转换为主库
      • 哨兵优点:
      • 哨兵缺点:
  • Redis缓存穿透和雪崩
    • 缓存穿透
      • 定义
      • 解决方案:
    • 缓存击穿 一个key
      • 与缓存穿透的区别
      • 解决方案:
    • 缓存雪崩 好多个key集中过期
      • 解决方案1

Redis的基本概念

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作 数据库、缓存和消息中间件 。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 事务(transactions) 和不同级别的 磁盘持久化(persistence)-- RDB和AOF , 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)

数据结构

如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)
范围查询bitmaps, hyperloglogs 和 地理空间
(geospatial) 索引半径查询

Redis为什么单线程还这么快?

误区1: 高性能的服务器一定是多线程的
误区2: 多线程(CPU上下文切换)一定比单线程效率高
核心: Redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,相比多线程,减少了CPU上下文切换的耗时。对于内存系统来说,没有上下文切换效率就是最高的,多次读写都是在一个CPU上的。

redis事物

Redis事物与MySQL事物对比

MySQL中的事务,要么同时成功,要么同时失败,必须保证原子性!
Redis单条命令是保证原子性的,但是Redis的事务不保证原子性!
Redis事务是没有隔离级别的概念

事物机制:

开启事务 – multi
命令入队 – …
执行事务 – exec
放弃事务 discard
编译型异常(命令有错)比如 set写成 se, 事务中所有的命令都不会被执行
执行时异常, 如果事务队列中存在语法性错误,比如给字符串加一,执行命令的时候,其他命令可以正常执行,错误命令抛出异常

Redis乐观锁Watch:

检测某个值,其他线程不修改,该事物可以成功,如果其他线程修改了,该事物就会执行失败,
watch监视下的事务执行失败后,可以unwatch解锁,在重新开始监视

Redis的持久化:

默认用rdb

以快照的形式写入rdb文件。
如果需要进程大规模数据的恢复,且对数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

RDB优点

适合大规模的数据恢复
对数据的完整性要求不高

RDB缺点

需要一定的时间间隔进行操作,如果redis意外宕机,最后一次持久化后的操作数据就没有了
fork进程的时候,会需要占用一定的内存空间

AOF机制

优点:

每一次修改都同步,文件的完整性比较好
每秒同步一次,可能会丢失1s的数据

缺点:

相对于数据文件来说,aof远远大于rdb
修复的速度比rdb慢
AOF的运行效率也比rdb慢。

主从复制:都是服务器端

概念

指的是将一个Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower)。 数据的复制是单向的 ,只能从主节点到从节点。Master以写为主,Slave以读为主

作用:

数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,实际上是一种
服务冗余
负载均衡:分担服务器负载。尤其是在
写少读多的场景下,通过从节点分担读负载,可以大大提供Redis服务器的并发量

哨兵模式 从库转换为主库

能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库

哨兵优点:

哨兵集群,基于主从复制模式,所有的主从复制优点,它全有
主从可以切换,故障可以转移,系统的可用性会更好
哨兵模式就是主从模式的升级,手动转自动,更加健壮

哨兵缺点:

Redis不好在线扩展,集群容量一旦到达上限,在线扩容十分麻烦
实现哨兵模式的配置很麻烦,里面有很多选择

Redis缓存穿透和雪崩

缓存穿透

定义

就是用户想要查询一个数据,发现Redis中没有,也就是缓存没有命中,于是向持久层数
据库发起查询,发现也没有这个数据,于是本次查询失败。当用户很多的情况下,缓存都没有命中,又都去请求持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于缓存穿透

解决方案:

布隆过滤器 缓存空对象

缓存击穿 一个key

与缓存穿透的区别

这里需要注意和缓存穿透的区别,缓存击穿,是指一个key非常热点。在不停的扛着大量并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在也给屏蔽上凿开了一个洞

解决方案:

热点数据永不过期 加互斥锁

缓存雪崩 好多个key集中过期

解决方案1

Redis高可用 多个服务器负载均衡
限流降级 加锁
数据预热 设置过期时间,均匀分布

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