redis学习步骤

  • 什么是Redis

    • redis是一个性能优良,基于内存,key-value存储数据,可以进行自动持久化的nosql数据库

    nosql数据库 和 sql数据库的区别

    • 数据结构

      • sql 表格
      • nosql 其他形式 例如:key-value
    • 事务

      • sql 强事务 一组操作同时成功或者同时失败

        安全性高 效率低

      • nosql 弱事务

        redis 一组操作要么都执行要么都不执行,没有回滚的概念,有些命令不支持事务

        安全性低 效率高

    • 查询性能

      • sql 查询性能一般

        Mysql 每秒2000个查询

      • nosql 查询性能优秀

        redis 10W

    • 集群

      • Mysql 需要配置搭建集群,需要Mycat管理集群

      • Redis 直接有集群的默认设置,通过简单的命令就可以直接搭建集群,内置哨兵模式

        哨兵模式:哨兵是一个独立的进程,时时刻刻监控每一个redis节点,如果主节点宕机了,哨兵会选择一个从节点升级为主节点

    • 语法上的区别

      • sql 都支持sql
      • nosql 各自有各自的命令 没有统一的语法

基于内存:数据访问速度更快

key-value:该种数据结构访问性能好

自动持久化机制:

  • RDB 快照机制

    • 优点

      • 默认开启的就是RDB

      • 备份的是数据本身,备份后数据会保存在一个 XXX.rdb文件中,可以很方便的进行数据的迁移

      • 整体来说,RDB的备份频率不高,所以总体来说RDB性能更好

        5分钟次 15分钟 可以自定义RDB的保存频率

    • 缺点

      • 单次备份因为要备份整个数据库 所以速度慢 不能频繁进行RDB数据备份
  • AOF 日志增量

    优点:

    • 需要配置开启,Redis重启之后会读取AOF中的数据

    • 每次持久化都是将操作命令追加AOF文件中,所以单次命令写入比较快

    • 可以灵活选择持久化的频率,每秒持久化一次或者每次命令都持久化

      选择每次命令都持久化可以保证数据绝对不丢失

    缺点:

    • 如果选择了每次命令都持久化,性能会很差
    • 随着时间的增加,AOF文件会越来越大,解决方法:日志重做

RDB 转 AOF 有bug

问题:数据丢失

解决:热切换

  1. redis运行时 通过命令开启AOF 此时会在本地生成AOF文件
  2. 修改配置文件 开启AOF的配置
  3. 重启redis 此时Redis会读取AOF中的数据

redis的数据类型

  • string

    数据结构图示

    常见命令

    应用场景

    • String 【缓存】
    • 数字 【原子性自增】【点赞功能】
    • 二进制 【缓存】
  • hash

    数据结构图示

    命令

    作用:

    • 缓存
  • list

    数据结构图示

    作用:队列

  • set

    数据结构图示

    作用:交集 可能认识的人

  • zset

    数据结构图示

    作用:排序 排行榜

key的过期时间

应用场景

  • 验证码失效过期
  • 缓存自动过期

基本语法

  • expire

  • ttl

过期策略【了解】

  • 定期删除 概念

  • 惰性删除 概念

  • 内存淘汰 概念

    如果内存不够了怎么办?删除,那么删除谁?内存淘汰机制决定的就是要删除谁,一般都是删除最近最少使用的key 或者 从过期key中删除最近最少使用的key 或者 从过期key中挑选将要过期的key

实战【掌握】

  • Java操作Redis的API讲解

    • Jedis

      Jedis对象相当于数据库连接对象,用来连接Redis

      Jedis连接池【银行】

      • 对象的序列化和反序列化

        • JDK序列化

        • Json序列化

          糊涂工具类

    • RedisTemplate

      • Spring 集成

        spring.xml中的配置

        • 连接池参数

        • 连接工厂创建

        • RedisTemplate

          在 RedisTemplate 中修改序列化规则

      • SpringBoot

        配置简单 host就可以

        想要修改 序列化规则 需要通过配置类 重建创建RedisTemplate对象

        对象名字 必须是 redisTemplate

AOP实现Redis缓存

  1. 缓存数据库数据一致性问题

    1. 失效模式
    2. 双写模式
  2. 失效模式基本思路

    1. 读的时候
      1. 先读取缓存
      2. 缓存没有 读取数据库 重建缓存
      3. 缓存中有 直接返回缓存中的数据
    2. 修改的时候
      1. 先删除缓存
      2. 在修改数据库
  3. AOP实现的思路

    1. 缓存添加的AOP

      1. 增强

        1. 先读取缓存
        2. 缓存没有 读取数据库 重建缓存
        3. 缓存中有 直接返回缓存中的数据
      2. 增强类型

        环绕增强

      3. 切入点

        切注解 更加灵活

    2. 缓存删除的AOP

      1. 增强

        删除缓存

      2. 增强类型

        前置

      3. 切入点

        切注解 更加灵活

    3. redis数据类型的选择 hash

      1. key 是什么 类名

      2. hashkey 是什么 方法名+参数

  4. 代码实现流程

    1. 先定义注解

      元注解

      @Target 定义位置

      @Retention 定义生命周期

      1. 删除缓存的注解
      2. 添加缓存的注解
    2. 写切面类【代码写熟】

      怎么获取key 通过连接点对象 反射获取(Spring定义好的API)

      怎么获取hashKey 通过连接点对象 反射获取(Spring定义好的API)

ey 是什么 方法名+参数

  1. 代码实现流程

    1. 先定义注解

      元注解

      @Target 定义位置

      @Retention 定义生命周期

      1. 删除缓存的注解
      2. 添加缓存的注解
    2. 写切面类【代码写熟】

      怎么获取key 通过连接点对象 反射获取(Spring定义好的API)

      怎么获取hashKey 通过连接点对象 反射获取(Spring定义好的API)

上一篇:倒计时秒杀


下一篇:TP-LINK配置公网映射