什么是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 都支持sqlnosql 各自有各自的命令 没有统一的语法
基于内存:数据访问速度更快
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)



