-
什么是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
问题:数据丢失
解决:热切换
- redis运行时 通过命令开启AOF 此时会在本地生成AOF文件
- 修改配置文件 开启AOF的配置
- 重启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缓存
-
缓存数据库数据一致性问题
- 失效模式
- 双写模式
-
失效模式基本思路
- 读的时候
- 先读取缓存
- 缓存没有 读取数据库 重建缓存
- 缓存中有 直接返回缓存中的数据
- 修改的时候
- 先删除缓存
- 在修改数据库
- 读的时候
-
AOP实现的思路
-
缓存添加的AOP
-
增强
- 先读取缓存
- 缓存没有 读取数据库 重建缓存
- 缓存中有 直接返回缓存中的数据
-
增强类型
环绕增强
-
切入点
切注解 更加灵活
-
-
缓存删除的AOP
-
增强
删除缓存
-
增强类型
前置
-
切入点
切注解 更加灵活
-
-
redis数据类型的选择 hash
-
key 是什么 类名
-
hashkey 是什么 方法名+参数
-
-
-
代码实现流程
-
先定义注解
元注解
@Target 定义位置
@Retention 定义生命周期
- 删除缓存的注解
- 添加缓存的注解
-
写切面类【代码写熟】
怎么获取key 通过连接点对象 反射获取(Spring定义好的API)
怎么获取hashKey 通过连接点对象 反射获取(Spring定义好的API)
-
ey 是什么 方法名+参数
-
代码实现流程
-
先定义注解
元注解
@Target 定义位置
@Retention 定义生命周期
- 删除缓存的注解
- 添加缓存的注解
-
写切面类【代码写熟】
怎么获取key 通过连接点对象 反射获取(Spring定义好的API)
怎么获取hashKey 通过连接点对象 反射获取(Spring定义好的API)
-