大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例

目录

介绍

mybatis缓存

一级缓存

1.是什么

2.特点

3.场景

[mybatis 二级缓存](#mybatis 二级缓存)

1.是什么

2.特点

3.配置步骤

注意

一级缓存问题

二级缓存问题

扩展

[1.MyBatis集成 Redis](#1.MyBatis集成 Redis)

2.直接使用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,支持二进制安全 (可存储图片、序列化对象等)

应用场景:

  1. **缓存加速:**高频访问数据 (如用户信息) 缓存,降低数据库压力
  2. 计**数器:**实时统计 (如阅读量、点赞数) ,通过 INCR /DECR 指令实现原子操作
  3. **分布式锁:**利用SETNX 指令实现互斥资源控制
  4. 短时数据存储 :短信验证码、临时令牌等设置过期时间自动清理

二、Llst 列表

**底层结构:**双向链表或压缩列表 (ziplist)

**特点:**元素有序可重复,支持两端插入/弹出。

应用场景:

  1. 消息队列:生产者通过 LPUSH 插入数据,消费者通过BRPOP阻塞获取 (类似先进先出队列)
  2. 时间线: 存储最新动态 (如微博 Feed 流) ,通过 LRANGE 分页查询
  3. 栈结构: 结合 LPUSH + LPOP 实现后进先出操作

三、Hash 哈希

底层结构: 压缩列表 (ziplist) 或哈希表 (hashtable)

点:键值对集合,适合存储对象属性

应用场景:

  1. 对象存储: 用户信息 (如 user:id{name,age)) ,支持字段级读写,减少网络传输
  2. 购物车: 以用户 ID为 Key,商品 ID 和数量为 Field-Value,便于增删改查
  3. 配置管理 :存储多维度配置参数,如系统开关状态

四、Set 集合

底层结构:整数集合 (intset) 或哈希表 (hashtable)

特点:元素无序且唯一,支持集合运算 (交集、并集、差集)

应用场景:

  1. 标签系统:用户兴趣标签 (如"体育""科技") ,快速查找共同兴趣群体
  2. 去重统计:独立 IP 计数、抽奖活动防止重复参与
  3. 社交关系:存储用户好友列表,计算共同好友 (SINTER)

案例如存如:

  • u1(1,2,3)
  • u2(1,9,3)
  • u3(1,3,5,8)
  • 三个交集 1,3

五、Sorted Set 有续集合

**底层结构:**跳表 (skiplist) 和哈希表组合

特点 :元素按分数 (score)排序,唯一且支持范围查询.
应用场景:

  1. 排行榜: 实时更新游戏积分、视频播放量排名(ZREVRANGE 获取 Top N)
  2. 延迟队列:任务按执行时间排序,通过ZRANGEBYSCORE获取到期任务
  3. 地理围栏 :结合 GEO 模块计算附近的人或地点

总结

  • 高频简单读写:优先使用 String 或 Hash。
  • 顺序敏感操作:选择 List 或 Sorted Set。
  • 去重与集合运算:采用 Set。

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

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

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

相关推荐
风口上的猪20152 分钟前
thingboard告警信息格式美化
java·服务器·前端
追光少年332231 分钟前
迭代器模式
java·迭代器模式
超爱吃士力架2 小时前
MySQL 中的回表是什么?
java·后端·面试
扣丁梦想家2 小时前
设计模式教程:装饰器模式(Decorator Pattern)
java·前端·装饰器模式
drebander2 小时前
Maven 构建中的安全性与合规性检查
java·maven
drebander2 小时前
Maven 与 Kubernetes 部署:构建和部署到 Kubernetes 环境中
java·kubernetes·maven
王会举2 小时前
DeepSeek模型集成到java中使用(阿里云版)超简单版
java·阿里云·deepseek
2025年一定要上岸2 小时前
JAVA EE初阶 - 预备知识(三)
java·java-ee
淡黄的Cherry2 小时前
istio实现灰度发布,A/B发布, Kiali网格可视化(二)
java·算法·istio
Familyism3 小时前
Redis
数据库·redis·缓存