1.springboot-reids Redis简介

1.Redis简介

  • Redis是一个高性能的key-value内存数据库,支持持久化,可将数据保存在磁盘,重启时加载;
  • Redis是单线程模型,所有操作都是原子性的。单个操作是原子性的,多个操作也支持事务;
  • Redis单机支持多个数据库,每个数据库的数据是隔离的。数据库从0开始的递增数字命名,默认支持16个数据库。集群没有数据库的概念;

2.Redis数据类型

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • zset(sorted set有序集合)

3.Redis发布订阅

  • 一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息;
  • 一个队列可以被多个消费者同时订阅,当有消息到达时,会将该消息依次发送给每个订阅者;
  • 特性
    • 可靠性
      • 不可靠发布者发布消息,如没有订阅者或者订阅者中途掉线,消息将丢失
    • 实时性
      • 实时性高
    • 持久性
      • 是针对于整个redis缓存的内容持久化;
    • 队列监控
      • 监控比较困难
  • 特点
    • 轻量级,低延迟,高并发,低可靠性;
    • 适用于对可靠性要求不高的异步交互场景;

4.Redis事务

  • Redis事务可一次执行多个命令:
    • 在EXEC前把操作放入队列缓存;
    • 在EXEC后执行事务,任意命令执行失败,其余的命令依然被执行;
    • 在事务执行中,不能插入其它操作;
    • 批量指令非原子化操作,某条指令失败不会回滚已做指令,也不会取消后续指令
  • 事务执过程:
    • multi: 开始事务;
    • 命令入队;
    • exec: 执行事务;
  • 相关命令:
    • watch key1 key2 … : 监视一或多个key(类似乐观锁);
    • multi: 事务开始;
    • exec: 执行事务;
    • discard : 取消事务(放弃事务块中的所有命令);
    • unwatch : 取消watch对所有key的监控;
  • 说明
    • 若在事务队列中存在命令性错误,则所有命令都不会执行;
    • 若在事务队列中存在语法性错误,则其他正确命令会被执行,错误命令抛出异常;
    • watch类似于乐观锁,在事务提交时,果watch监控的任何KEY的值被更改,则事务队列将不会被执行;
    • EXEC执行事务后,无论事务是否成功, WARCH的监控都会取消;

5.Redis集群

  • 主从模式
    • 一个主redis服务器,多个从服务器。在master节点写入数据后,同步到slave节点,实现数据的备份,并且可以在slave节点进行查询,实现读写分离;
    • 优点
      • 数据备份
      • 读写分离
      • 高可靠性
        • slave节点下线不影响读取其他slave节点和写master节点,启动后可恢复数据;
        • master节点下线,不影响读slave节点,可手动切换到其它master节点;
    • 缺点
      • master节点下线,需要手动切换master节点,不能自动切换;
      • 每个节点都保存全量数据,对每个节点的资源要求较高,且不易扩展;
  • 哨兵(sentinel)模式
    • 一个或多个Sentinel实例组成的Sentinel系统监视任意多个redis主服务器和下属的所有从服务器,在被监视的主服务器下线时,自动将下属的某个从服务器升级为新的主服务器;
    • 优点
      • 数据备份
      • 读写分离
      • 高可靠性
        • master节点下线,Sentinel会自动推举其它slave节点为master节点,不影响系统运行;
      • 易维护
        • 相对于集群模式,需要的服务器数量较少,易于维护,适用于数据量一般的场景;
    • 缺点
      • 每个节点都保存全量数据,对每个节点的资源要求较高,且不易扩展;
  • 集群(cluster)模式
    • 采用去中心化的思想,使用hash slot方式将16348个hash slot覆盖到所有节点上,每个节点保存一部分数据;
    • 取值时先获取到对key对应的hash slot,然后找到他的hash slot所在节点,由当前访问节点从hash slot所在节点取数据;
    • 优点
      • 负载均衡
      • 每个节点保存部分数据,易扩展
      • 高可靠性
    • 缺点
      • 难维护
        • 一般至少需要三主三从架构,相对于哨兵模式难于维护,适用于数据量比较大的场景

你可能感兴趣的:(#,spring,cache,java,redis,集群)