目录
[mybatis 二级缓存](#mybatis 二级缓存)
[1.MyBatis集成 Redis](#1.MyBatis集成 Redis)
[redis 缓存](#redis 缓存)
[一、String 字符串](#一、String 字符串)
[二、Llst 列表](#二、Llst 列表)
[三、Hash 哈希](#三、Hash 哈希)
[四、Set 集合](#四、Set 集合)
[五、Sorted Set 有续集合](#五、Sorted Set 有续集合)
介绍
mybatis 缓存 redis缓存 上下无强关联 根据需要读即可 持续更新
mybatis 很多相关还可阅读: 大道至简 少字全意 易经的方式看 Mybatis 事务实例 核心组件及运行 实力例 及Mybatis-Plus 适用于 懂而久未用回忆 ,不懂而需明正理而用-CSDN博客
mybatis缓存
一级缓存
1.是什么
级缓存是 SqlSession 级别的缓存,可以理解为"会话临时笔记"。在同一个数据库会话(SdlSession)中,如果多次执行相同的查询,第二次开始会直接从缓存中取数据,不再访问数据库
2.特点
- 默认开启,无需配置
- 会话隔离:不同 SqlSession 的缓存互不影响.
- 自动失效: 当执行增删改操作 (INSERT/UPDATE/DELETE)时,当前会话的一级缓存会被清空
3.场景
短时间内重复查询同一数据 (如用户多次刷新页面)但需注意数据实时性要求高的场景不适合。
mybatis 二级缓存
1.是什么
二级缓存是 Mapper级别的缓存,可以理解为"公共备忘录"。多个 SqlSession 访问同一个 Mapper 的查询时,可以共享缓存结
2.特点
- 默认关闭,需手动开启
- 跨会话共享:不同 SalSession 的相同查询可复用缓存
- 需序列化:实体类必须实现接口。Serializable
- 可能脏读:如果其他会话修改了数据,缓存可能未及时更新
3.配置步骤
- 配置文件设置:mybatis-plus.configuration.cache-enabled=true
- Mapper 文件开启:在对应 XML 中添加<cache/>标签
- 实体类实现序列化接口
注意
一级缓存问题
- 频繁更新操作会导致缓存频繁失效,可能降低性能
- 可通过 openSession.clearCache() 手动清空缓存
二级缓存问题
- 分布式环境下容易产生脏数据,推荐用 Redis 等外部缓存替代(MyBatis-Plus 支持整合 Redis 作为二级缓存
扩展
1.MyBatis集成 Redis
- 作为二级缓存: MyBatis默认提供基于内存的本地缓存(一级缓存为SqlSession级别,二级缓存为Mapper命名空间级别)。集成Redis后,将其作为二级缓存的存储介质,替代默认的HashMap实现
- 自动管理: 通过MyBatis的缓存接口(如 @Cacheable 、@cacheEvict)自动触发缓存的读写,无需手动操作Redis客户端,业务代码与缓存逻辑解。
2.直接使用Redis
- 独立缓存层: Redis作为独立于ORM框架的分布式缓存,需在业务代码中显式调用Redis API (如set、gt、incr) 管理数据。
- 灵活性高:可自定义缓存策略(如过期时间、数据结构选择),适用于非数据库查询场景(如计数器、分布式锁)
redis 缓存
一、String 字符串
**底层结构:**动态字符串 (SDS) 或整型 (int)
特点: 最大存储 512MB,支持二进制安全 (可存储图片、序列化对象等)
应用场景:
- **缓存加速:**高频访问数据 (如用户信息) 缓存,降低数据库压力
- 计**数器:**实时统计 (如阅读量、点赞数) ,通过 INCR /DECR 指令实现原子操作
- **分布式锁:**利用SETNX 指令实现互斥资源控制
- 短时数据存储 :短信验证码、临时令牌等设置过期时间自动清理
二、Llst 列表
**底层结构:**双向链表或压缩列表 (ziplist)
**特点:**元素有序可重复,支持两端插入/弹出。
应用场景:
- 消息队列:生产者通过 LPUSH 插入数据,消费者通过BRPOP阻塞获取 (类似先进先出队列)
- 时间线: 存储最新动态 (如微博 Feed 流) ,通过 LRANGE 分页查询
- 栈结构: 结合 LPUSH + LPOP 实现后进先出操作
三、Hash 哈希
底层结构: 压缩列表 (ziplist) 或哈希表 (hashtable)
特点:键值对集合,适合存储对象属性
应用场景:
- 对象存储: 用户信息 (如 user:id{name,age)) ,支持字段级读写,减少网络传输
- 购物车: 以用户 ID为 Key,商品 ID 和数量为 Field-Value,便于增删改查
- 配置管理 :存储多维度配置参数,如系统开关状态
四、Set 集合
底层结构:整数集合 (intset) 或哈希表 (hashtable)
特点:元素无序且唯一,支持集合运算 (交集、并集、差集)
应用场景:
- 标签系统:用户兴趣标签 (如"体育""科技") ,快速查找共同兴趣群体
- 去重统计:独立 IP 计数、抽奖活动防止重复参与
- 社交关系:存储用户好友列表,计算共同好友 (SINTER)
案例如存如:
- u1(1,2,3)
- u2(1,9,3)
- u3(1,3,5,8)
- 三个交集 1,3
五、Sorted Set 有续集合
**底层结构:**跳表 (skiplist) 和哈希表组合
特点 :元素按分数 (score)排序,唯一且支持范围查询.
应用场景:
- 排行榜: 实时更新游戏积分、视频播放量排名(ZREVRANGE 获取 Top N)
- 延迟队列:任务按执行时间排序,通过ZRANGEBYSCORE获取到期任务
- 地理围栏 :结合 GEO 模块计算附近的人或地点
总结
- 高频简单读写:优先使用 String 或 Hash。
- 顺序敏感操作:选择 List 或 Sorted Set。
- 去重与集合运算:采用 Set。
***************持续更新 易经的方式看技术*************************

***************持续更新 易经的方式看技术*************************
***************持续更新 易经的方式看技术*************************