数据库缓存是处理这些性能问题的最常见策略之一。缓存涉及将数据库查询的结果保存在更快,更容易访问的位置。正确完成后,缓存将减少查询响应时间,减少数据库负载并降低成本。

但是,缓存也需要小心处理,因为它们实际上是在另一个位置创建另一个信息副本。保持数据库和缓存同步并保持最新可能比您预期的更棘手。在下一节中,我们将讨论一些最常见的数据库缓存策略。

什么是不同的缓存策略?

手动缓存(也称为缓存搁置策略)涉及直接管理数据库和缓存。您的应用程序在启动数据库查询之前检查缓存,并在对数据库进行任何更改后更新缓存。

虽然如果正确实现有效,但手动缓存可能非常繁琐,尤其是在您需要查询多个数据库时。出于这些原因,开发人员发明了许多替代性的缓存策略。

直读缓存策略

在读取缓存中,应用程序首先查询缓存以查看其所需的信息是否在内部。如果没有,它将从数据库中检索信息并使用它来更新缓存。缓存提供程序或缓存库负责查询和更新缓存的详细逻辑。

当应用程序重复请求相同的数据时,读取策略最适合读取繁重的工作负载:例如,一遍又一遍地加载相同文章的新闻网站。

读取策略的一个缺点是对缓存的第一次查询将始终导致未命中,因为保证所请求的信息不在内部。为了解决这个问题,开发人员通常会使用用户可能要求的信息提前“加热”缓存。

直写缓存策略

在直写式高速缓存中,首先对高速缓存进行更新,然后对数据库进行更新。从应用程序到缓存以及从缓存到数据库都有一条直接线。与直读式缓存结合使用时,直写式策略可确保您的数据保持一致,从而无需手动缓存失效。

后写缓存策略

在后写式缓存(也称为回写式高速缓存)中,应用程序首先将数据写入高速缓存。经过一段设定的延迟后,缓存也会将此信息写入数据库。后写缓存最适合写入繁重的工作负载,即使出现一些故障和停机也可以很好地执行。

基于Java的Redis缓存与Redisson​​​​​​​

Redis是NoSQL数据库最受欢迎的选项之一,它使用键值系统来存储数据。Redisson是Java编程语言中的Redis客户端库,可以使用所有熟悉的Java集合轻松访问Redis功能。

Redisson允许您将数据放在外部存储中的地图中。您可以使用此功能实现数据库,Web服务或任何其他数据源的缓存。

Redis中的直读缓存

下面是一个Java示例,说明如何在Redis和Redisson中使用直读缓存。

如果请求的条目在缓存中不存在,则它将由MapLoader对象加载:

MapLoader mapLoader = new MapLoader() { @Override public Iterable loadAllKeys() { List list = new ArrayList(); Statement statement = conn.createStatement(); try { ResultSet result = statement.executeQuery("SELECT id FROM student"); while (result.next()) { list.add(result.getString(1)); } } finally { statement.close(); } return list; } @Override public String load(String key) { PreparedStatement preparedStatement = conn.prepareStatement("SELECT name FROM student where id = ?"); try { preparedStatement.setString(1, key); ResultSet result = preparedStatement.executeQuery(); if (result.next()) { return result.getString(1); } return null; } finally { preparedStatement.close(); } }};

配置使用案例:

MapOptions options = MapOptions.defaults() .loader(mapLoader);RMap map = redisson.getMap("test

java缓存_使用Redis和Java进行数据库缓存相关推荐

  1. java mysql 二级缓存_深入理解MyBatis中的一级缓存与二级缓存

    http://blog.csdn.net/weixin_36380516/article/details/73194758 先说缓存,合理使用缓存是优化中最常见的,将从数据库中查询出来的数据放入缓存中 ...

  2. 0基础java应聘_不想搞Java了,6年经验去面试10分钟结束,现在Java面试为这么难...

    垃圾回收算法有几种类型? 他们对应的优缺点又是什么? 类的加载过程是什么?简单描述一下每个步骤 JVM 预定义的类加载器有哪几种?分别什么作用? 什么是双亲委派模式?有什么作用? 什么是内存溢出, 内 ...

  3. 6年经验java笔试_不想搞Java了,6年经验去面试10分钟结束,现在Java面试为这么难...

    垃圾回收算法有几种类型? 他们对应的优缺点又是什么? 类的加载过程是什么?简单描述一下每个步骤 JVM 预定义的类加载器有哪几种?分别什么作用? 什么是双亲委派模式?有什么作用? 什么是内存溢出, 内 ...

  4. 常用的java虚拟机_带你了解 JAVA虚拟机 面试必备

    Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途.创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有 些区域则是依赖 ...

  5. java项目_好程序员Java分享从入门到服务端项目开发的过程

    好程序员Java分享从入门到服务端项目开发的过程,对于打算入门或者刚刚入门学习Java的人来说,刚开始接触这门学科,往往会觉得不知所措,也会觉得很迷茫.结合前人经验,就从入门到进阶对于Java的学习而 ...

  6. Java继承_这10道Java面试题!大部分的人回答不出来

    1.为什么等待和通知是在 Object 类而不是 Thread 中声明的? 2.为什么Java中不支持多重继承? 3.为什么Java不支持运算符重载? 4.为什么 String 在 Java 中是不可 ...

  7. 南通大学java期末_南通大学生学Java,掌握这20%知识点至关重要!

    南通大学生学Java,掌握这20%知识点至关重要! 嗨,南通的同学们,又见面了!今天我们来谈谈关于Java学习的那点事儿.不管手机前的你,是选择自学Java还是参加Java培训班,建议都来看看这篇文章 ...

  8. java风控_【A0538】[java视频教程]金融信贷风控的机器学习实战视频教程 it教程

    Java视频教程名称:金融信贷风控的机器学习实战视频教程  java自学   风控视频教程   it教程 7 E" b1 z7 `/ _& G百度网盘下载链接:8 }, g4 o5 ...

  9. 我的世界java路径_我的世界java路径在哪 路径有误怎么设置

    我的世界的各个版本中java都是十分重要的东西,许多玩家都会遇到Java路径有误的问题,并且不知道该如何解决,其实Java的路径这个东西在每个人的电脑中都是不太一样的,一般以你安装时的位置为准,在这里 ...

最新文章

  1. 20220211-CTF CRYPTO-base64-凯撒密码-摩丝密码--非常简单的三道题
  2. python核心编程第六章练习6-12
  3. 嵌入式软件工程师笔试题
  4. 匿名对象方案与实体对象方案对比
  5. 新安装的wampserver怎么使用本机已有的mysql作为数据库
  6. mysql日期函数转换_Mysql日期函数大全 转
  7. 搭建邮件系统,采用sendmail+dovecot+openwebmail架构
  8. 详解python多进程(含示例代码)
  9. Android入门基础教程1
  10. 面试题:用两个栈实现一个队列 Java语言实现
  11. 乐橙本地录像回放不了_解决大华或乐橙录像机添加摄像头不能显示的密码问题...
  12. Modelica技术教程 | 状态机教程
  13. usb gadget 端点halt的产生
  14. VTK读取序列DCM格式医学图像
  15. uniapp根据ui设计图实现新增和删除功能
  16. 利用Basemap画世界地图
  17. Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】
  18. 计算机购销存系统论文,企业进销存管理系统毕业论文.doc
  19. Mac 中不可错过的几款软件,相见恨晚!(基本免费)
  20. STM32F4 | 新建工程模板——寄存器版本 | HAL库入门 | 新建工程模板——库函数版本

热门文章

  1. 集结号!四大国产开源数据库共聚申城,共话未来技术演进
  2. 案例精解:insert逻辑读暴增至20万,只因Oracle Recyclebin过大
  3. Oracle 18c新特性:Schema-Only 帐号提升应用管理安全性
  4. 2018数据技术嘉年华-金融峰会·重庆站6.29相约相聚!
  5. 昇思MindSpore全场景AI框架 1.6版本,更高的开发效率,更好地服务开发者
  6. 技术实践丨Prometheus+Grafana搭建HBase监控仪表盘
  7. 大咖布道丨证券行业规模化敏捷和核心能力演进
  8. 谁说微服务是Spring Cloud的独角戏?Service Mesh了解一下?
  9. 利用微信实现自动发送监控告警
  10. 华为云服务器实战 之 Gitlab安装与配置使用