首页 > 数据库 >redis自学(41)JVM进程缓存

redis自学(41)JVM进程缓存

时间:2024-05-06 14:23:30浏览次数:25  
标签:缓存 本地 数据库 redis Caffeine 41 修改 JVM 数据

 

 

前置数据库的表规划:数据库的表尽量做分离,是因为一个商品的数据事实上是非常多的,需要对商品的数据进行解耦,字段太多查询的效率会比较低;另一方面,系统需要给数据加缓存,如果都在一张表里,那么作为缓存的话,就只有一整条数据作为缓存,一旦一条数据里的任意一个字段做了修改,整个商品的缓存就全都失效了,这样缓存失效的频率太高了,导致缓存经常性的未命中,随意要数据分离,把经常修改的和不经常修改的分开,做成好几张表,好几个不同的缓存

 

商品的查询页面需要放在反向代理的Nginx服务器中(充当静态资源服务器),而页面需要的数据通过ajax想服务端(nginx业务集群)查询

 

 

反向代理配置

 

 

 

本地进程缓存

缓存在日常开发中启至关重要的作用,由于是存储在内存在,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力。我们把缓存分为两类:

分布式缓存,例如reids:

  优点:存储容量更大、可靠性更好、可以在集群间共享

  缺点:访问缓存有网络开销

  场景:缓存数据量较大、可靠性要求较高、需要在集群间共享

进程本地缓存,例如HashMap、GuavaCache:

  优点:读取本地内存,没有网络开销,速度更快

  缺点:存储容量有限、可靠性较低、无法共享

  场景:性能要求较高,缓存数据量较小

Caffeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能 的本地缓存库。目前Spring内部的缓存使用的就是Caffeine。

下图是工作效率

 

 

 

 

驱逐策略

 

 

在默认情况下,当一个缓存元素过期的时候,Caffeine不会自动立即将其清理和驱逐。而是在一次读或写操作,或者在空闲时间完成对失效数据的驱逐。

 

测试:

 

 

定义两个缓存

 

 

注入两个cache对象

 

 

方法进行修改

 

 

之后的操作,第一次肯定是要查询数据库的,同时寸入了缓存,第二次就发现没有走数据库了,而是走缓存。

标签:缓存,本地,数据库,redis,Caffeine,41,修改,JVM,数据
From: https://www.cnblogs.com/bulesea/p/18174947

相关文章

  • Redis开源社区持续壮大,华为云为Valkey项目注入新的活力
    摘要:作为Valkey社区的TechnicalSteeringCommitteemember,华为云将持续参与社区建设。一、背景今年3月21日,RedisLabs宣布从Redis7.4版本开始,将原先比较宽松的BSD源码使用协议修改为RSAv2和SSPLv1协议,意味着Redis在OSI(开放源代码促进会)定义下不再是严格的开源产品。Redis......
  • Redis多数据源,看这篇就够了
    背景Redis多数据源常见的场景:分区数据处理:当数据量增长时,单个Redis实例可能无法处理所有的数据。通过使用多个Redis数据源,可以将数据分区存储在不同的实例中,使得数据处理更加高效。多租户应用程序:对于多租户应用程序,每个租户可以拥有自己的Redis数据源,以确保数据隔离和安全性......
  • JVM从零到进阶
    JVM进阶字节码​ 字节码为编译后的class文件,比如java、scala这些语言都是可编译成字节码的,字节码借助jvm就可以在任何平台运行,可以理解成跨平台的实现一、运行时数据区​ 在程序运行时,由jvm提供的几块内存区域,分别为以下几个区域:本地方法栈:执行native关键字的方法栈java......
  • Redis基础篇笔记
    一、Redis入门1.认识NoSQL1.1 什么是NoSQLNoSQL最常见的解释是"non-relational",很多人也说它是"NotOnlySQL"NoSQL仅仅是一个概念,泛指非关系型的数据库区别于关系数据库,它们不保证关系数据的ACID特性NoSQL是一项全新的数据库革命性运动,提倡运用非关系型的数据存储,相对于......
  • 测试 springboot 项目苍穹外卖,解决 Unable to connect to Redis 错误问题
       使用IDEA启动springboot项目苍穹外卖后台项目sky-take-out,测试“菜品批量删除”接口时,能够正常完成操作,但是服务器始终显示下面错误信息:2024-05-0320:54:24.134ERROR24360---[nio-8181-exec-3]o.a.c.c.C.[.[.[/].[dispatcherServlet]  :Servlet.service()fo......
  • [转帖]深入JVM - Code Cache内存池
    https://juejin.cn/post/6985913007142354958 1.本文内容本文简要介绍JVM的CodeCache(本地代码缓存池)。2.CodeCache简要介绍简单来说,JVM会将字节码编译为本地机器码,并使用CodeCache来保存。每一个可执行的本地代码块,称为一个nmethod。nmethod可能对应一个......
  • Redis常用命令
    Redis数据类型: String字符串Lists列表Sets集合Sortedsets有序集合Hashs哈希表 常用命令#插入数据setnamephp#读取getname#删除键值delname#验证键值是否存在existsname#setnx;,设置key对应的值为string类型的value。如果key已经存在,返回......
  • cryostat jvm 容器化环境安全的jfr管理工具
    cryostat属于一个jfr管理工具,由红帽团队开发,可以用来安全的管理容器环境中的jfr处理包含的工具operator 可以方便的集成到k8s,openshift中agent 可以实现cryostat发现以及jfr数据的推送grafanadatasource支持 数据grafanadatasource的一个插件,可以方便使用grafan......
  • 构建包含mysql和redis服务的docker镜像
    直接上dockerfile代码1FROMcentos:centos7.9.20092RUNyuminstall-ywget&&\3wgethttps://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm&&\4yum-ylocalinstallmysql80-community-release-el7-11.noarch.rpm......
  • redis实战优化二
    参考:图灵课堂缓存穿透之布隆过滤器对于恶意攻击,向服务器请求大量不存在的数据造成的缓存穿透,还可以用布隆过滤器先做一次过滤,对于不存在的数据布隆过滤器一般都能够过滤掉,不让请求再往后端发送。当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在。......