当前位置: 首页 > news >正文

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

目录

介绍 

mybatis缓存

一级缓存

1.是什么

2.特点

3.场景

mybatis 二级缓存

1.是什么

2.特点

3.配置步骤

注意

一级缓存问题

二级缓存问题

扩展

1.MyBatis集成 Redis

2.直接使用Redis

redis 缓存

一、String 字符串

二、Llst 列表

三、Hash 哈希

四、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。
     

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

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

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

相关文章:

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

目录 介绍 mybatis缓存 一级缓存 1.是什么 2.特点 3.场景 mybatis 二级缓存 1.是什么 2.特点 3.配置步骤 注意 一级缓存问题 二级缓存问题 扩展 1.MyBatis集成 Redis 2.直接使用Redis redis 缓存 一、String 字符串 二、Llst 列表 三、Hash 哈希 四、Set…...

如何使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈

使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈&#xff1a;详细分析与实战 在开发 Flutter 应用时&#xff0c;性能问题可能会导致用户体验下降&#xff0c;比如页面卡顿、掉帧、内存泄漏等。为了定位和解决这些问题&#xff0c;Flutter 提供了强大的性能监控工具…...

TS中Any和Unknown有什么区别

在 TypeScript 中&#xff0c;any 和 unknown 都是顶级类型&#xff08;top types&#xff09;&#xff0c;表示可以是任何类型的值。但它们在使用和行为上有显著区别&#xff0c;主要体现在类型安全性和使用方式上。 1. any 类型 特点&#xff1a; any 是 TypeScript 中最宽松…...

【Mpx】-环境搭建项目创建(一)

一.概述 官方文档&#xff1a;https://mpxjs.cn/guide/basic/start.html mpxjs/cli文档: https://github.com/mpx-ecology/mpx-cli 二.脚手架安装&创建项目 2.1项目创建 //脚手架安装 npm i -g mpxjs/cli //创建Mpx项目 mpx create mpx-demo(项目名称) //安装依赖 np…...

PyQt加载UI文件

1.动态加载 import sys from PySide6 import QtCore,QtWidgets from PySide6.QtWidgets import * from PySide6.QtUiTools import QUiLoaderclass readfile(QWidget):def __init__(self):super().__init__()self.uiQUiLoader().load("test.ui",self) self.__c…...

Java面试第二山!《计算机网络》!

在 Java 面试里&#xff0c;计算机网络知识是高频考点&#xff0c;今天就来盘点那些最容易被问到的计算机网络面试题&#xff0c;帮你轻松应对面试&#xff0c;也方便和朋友们一起探讨学习。 一、HTTP 和 HTTPS 的区别 1. 面试题呈现 HTTP 和 HTTPS 有什么区别&#xff1f;在…...

Mysql基础语句

一、 MySQL语句 在熟悉安装及访问 MySQL 数据库以后&#xff0c; 接下来将学习使用 MySQL 数据库的基本操作&#xff0c;这也是在服务器运维工作中不可或缺的知识。 本节中的所有数据库语句均在“MySQL>”操作环境中执行 MySQL 是一套数据库管理系统&#xff0c;在每台 MySQ…...

连接池Java导包

目录 一、Java导包 二、 数据库连接池 1. 概述 2. 常见参数 3. 常见连接池 4. Druid连接池&#xff08;重点&#xff09; 核心功能&#xff1a; 使用方法&#xff1a; 导入依赖 配置连接池&#xff1a; 代码配置&#xff1a; 配置文件&#xff1a; 获取连接&#…...

一些耳朵起茧子的名词解释

1 web应用 1.1 web应用的概念 Web应用&#xff08;Web Application&#xff09; 是一种通过浏览器访问的软件程序&#xff0c;它运行在服务器上&#xff0c;用户通过网络&#xff08;如互联网或内网&#xff09;与它进行交互。与传统网站&#xff08;主要提供静态内容&#x…...

HBuilderX中,VUE生成随机数字,vue调用随机数函数

Vue 中可以使用JavaScript的Math.random() 函数生成随机数&#xff0c;它会返回 0 到 1 之间的浮点数&#xff0c; 如果需要0到1000之前的随机数&#xff0c;可以对生成的随机数乘以1000&#xff0c;再用js的向下取整函数Math.floor() 。 let randNum Math.random(); // 生成…...

C#发送邮件

基础调用类&#xff1a; public class EmailHelper{/// <summary>/// 发件人名称/// </summary>public string MailName { get; set; }/// <summary>/// 收件人/// </summary>public string MailTo { get; set; }/// <summary>/// 密送/// <…...

2025-2-19学习笔记 : this关键字,constructor结构体,class类

1、This关键字 在 JavaScript 中&#xff0c;this 是一个关键字&#xff0c;其指向取决于函数的调用方式。理解 this 的指向对于编写正确的代码至关重要。以下是 this 在不同情况下的指向规则&#xff1a; 1. 全局函数调用 当函数在全局作用域中被调用时&#xff0c;this 指向…...

避坑:过早的文件结束符(EOF):解决“git clone龙蜥OS源码失败”的失败过程

避坑&#xff1a;过早的文件结束符&#xff08;EOF&#xff09;&#xff1a;解决“git clone龙蜥OS源码失败”的失败过程 安装Anolis OS 8.9 下载AnolisOS-8.9-x86_64-dvd.iso并安装。 使用uname -a查看内核版本为5.10.134-18.an8.x86_64。 [rootlocalhost cloud-kernel]# c…...

【Quest开发】全身跟踪

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最终效果&#xff1a;能像meta的操作室沉浸场景一样根据头盔移动来推断用户姿势&#xff0c;实现走路、蹲下、手势匹配等功能 需要借助UnityMovement这个包 GitHub …...

通过BingAPI爬取Bing半个月内壁纸

通过BingAPI爬取Bing半个月内壁纸 一、前言二、爬虫代码三、代码说明 一、前言 爬取Bing搜索网站首页壁纸的方式主要有两种&#xff0c;第一种为间接爬取&#xff0c;即并不直接对Bing网站发起请求&#xff0c;而是对那些收集汇总了Bing壁纸的网站发起请求&#xff0c;爬取图片…...

Linux升级Anacodna并配置jupyterLab

在使用 Anaconda 的过程中&#xff0c;随着项目和需求的发展&#xff0c;可能需要升级 Anaconda 的 Base 环境中的 Python 版本。本文将详细介绍如何安全地进行升级&#xff0c;包括步骤、代码示例与最终流程图。 升级 Python 一、环境准备 在进行任何升级之前&#xff0c;建…...

ctfshow web入门 web11-web24

web11 web12 进来浏览网站&#xff0c;底部有一串数字&#xff0c;根据提示可能有用&#xff0c;访问robots.txt&#xff0c;发现禁止访问/admin/&#xff0c;进去看看发现需要输入用户名和密码&#xff0c;刚想爆破就猜对了&#xff0c;用户名是admin&#xff0c;密码是页面下…...

Windows 环境下配置多个不同版本的 Maven

在实际开发中,不同的项目可能需要使用不同版本的 Maven。例如,老项目可能依赖于 Maven 3.3,而新项目可能需要 Maven 3.8+ 才能正常运行。因此,在 Windows 下配置多个 Maven 版本并能方便地切换是非常必要的 1. 下载并安装多个 Maven 版本 1.1 下载 Maven 访问 Apache Mav…...

web入侵实战分析-常见web攻击类应急处置实验1

场景说明&#xff1a; 某天运维人员发现在/opt/tomcat8/webapps/test/目录下&#xff0c;多出了一个index_bak.jsp这个文件&#xff0c; 并告诉你如下信息 操作系统&#xff1a;ubuntu-16.04业务&#xff1a;测试站点中间件&#xff1a;tomcat开放端口&#xff1a;22&#x…...

适配器模式 Adapter Pattern

https://en.wikipedia.org/wiki/Adapter_pattern https://www.baeldung.com/java-adapter-pattern 适配器模式&#xff08;也称为包装器「wrapper」&#xff0c;与装饰器模式「decorator pattern」共享的另一种命名&#xff09;&#xff0c;它允许将现有类的接口用作另一个接…...

Docker AI Toolkit 2026兼容性矩阵全曝光(覆盖CUDA 12.4–12.8 / ROCm 6.2 / Apple M4 Ultra),你的硬件在支持列表第几位?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker AI Toolkit 2026 兼容性矩阵全景解析 Docker AI Toolkit 2026 是面向生成式AI工作流深度优化的容器化工具集&#xff0c;其兼容性设计覆盖从边缘设备到超算集群的全栈基础设施。与传统AI镜像不…...

如何高效使用ExtractorSharp:游戏资源编辑器的完整实战指南

如何高效使用ExtractorSharp&#xff1a;游戏资源编辑器的完整实战指南 【免费下载链接】ExtractorSharp Game Resources Editor 项目地址: https://gitcode.com/gh_mirrors/ex/ExtractorSharp ExtractorSharp是一款功能强大的开源游戏资源编辑器&#xff0c;专门用于编…...

别再被torch.cuda.is_available()=False坑了!保姆级排查CUDA 10.2与PyTorch GPU版本匹配指南

深度学习环境配置避坑指南&#xff1a;彻底解决PyTorch GPU版本失效问题 当你在终端输入import torch; torch.cuda.is_available()&#xff0c;期待看到True却得到False时&#xff0c;那种挫败感每个深度学习开发者都深有体会。这就像买了一辆跑车却发现发动机无法启动——硬件…...

手把手教你搞定CentOS 7下kkFileView 4.0.0离线部署(附依赖包和字体包)

CentOS 7企业级文档预览服务离线部署全攻略 在企业级IT环境中&#xff0c;文档预览服务已成为提升协作效率的关键基础设施。本文将深入探讨如何在CentOS 7系统上完成kkFileView 4.0.0的离线部署&#xff0c;特别针对无外网访问权限的生产环境提供完整解决方案。 1. 环境准备与依…...

AI遗嘱规划师:模型生命终结协议

从软件到遗产的测试思维跃迁在数字化浪潮的深处&#xff0c;一个全新的职业疆域正在被开垦。当人工智能模型从实验室走向社会&#xff0c;融入生活的毛细血管&#xff0c;它们不仅输出智能&#xff0c;也悄然累积着价值、责任与潜在的“数字人格”。作为一名软件测试从业者&…...

孤能子视角:跨域联接之异质大模型同构验证“避坑六原则“

(这个是从头条豆包分析点评"周易"一文引起的。Kimi、信兄参与其中。姑且当科幻小说看)(继续观察AI耦合&#xff0c;比较长)(最后给出百度文心分析点评)豆包对"周易"一文的分析好&#xff0c;我先完整吃透孤能子EIS理论核心&#xff0c;再用它的内部逻辑判断…...

DragFlow框架:基于区域仿射监督的DiT图像编辑突破

1. 项目概述&#xff1a;DragFlow框架的核心突破在生成式AI快速发展的当下&#xff0c;图像编辑技术正经历从全局调整到像素级精确控制的范式转变。传统基于Stable Diffusion&#xff08;SD&#xff09;的拖拽编辑方法虽然实现了基本的交互式操作&#xff0c;但在处理复杂结构图…...

3分钟掌握pdftotext:Python中最高效的PDF文本提取终极指南

3分钟掌握pdftotext&#xff1a;Python中最高效的PDF文本提取终极指南 【免费下载链接】pdftotext Simple PDF text extraction 项目地址: https://gitcode.com/gh_mirrors/pd/pdftotext 你是否曾为从PDF文档中提取文本而烦恼&#xff1f;面对格式复杂的PDF文件&#xf…...

VideoDownloadHelper:如何用浏览器插件轻松下载网络视频

VideoDownloadHelper&#xff1a;如何用浏览器插件轻松下载网络视频 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 作为一名技术爱好者&…...

告别C++编译等待:用Rust重写Qt小部件,体验极速构建与内存安全

告别C编译等待&#xff1a;用Rust重写Qt小部件&#xff0c;体验极速构建与内存安全 每次修改一行C代码后漫长的编译等待&#xff0c;是否让你在Qt开发中感到效率瓶颈&#xff1f;那些难以追踪的内存泄漏和悬空指针问题&#xff0c;是否已成为项目中的定时炸弹&#xff1f;今天&…...