什么是Redis
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的保存频率
缺点
AOF 日志增量
优点:
需要配置开启,Redis重启之后会读取AOF中的数据
每次持久化都是将操作命令追加AOF文件中,所以单次命令写入比较快
可以灵活选择持久化的频率,每秒持久化一次或者每次命令都持久化
选择每次命令都持久化可以保证数据绝对不丢失
缺点:
RDB 转 AOF 有bug
问题:数据丢失
解决:热切换
redis的数据类型
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)