多级缓存
什么是多级缓存传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时,会对数据库产生冲击 多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提升服务性能: 浏览器访问静态资源时,优先读取浏览器本地缓存 访问非静态资源(ajax查询数据)时,访问服务端 请求到达Nginx后,优先读取Nginx本地缓存 如果Nginx本地缓存未命中,则去直接查询Redis(不经过Tomcat) 如果Redis查询未命中,则查询Tomcat 请求进入Tomcat后,优先查询JVM进程缓存 如果JVM进程缓存未命中,则查询数据库 在多级缓存架构中,Nginx内部需要编写本地缓存查询、Redis查询、Tomcat查询的业务逻辑,因此这样的nginx服务不再是一个反向代理服务器,而是一个编写业务的Web服务器了。 因此这样的业务Nginx服务也需要搭建集群来提高并发,再有专门的nginx服务来做反向代理,如图: 另外...
黑马 Redis 实战篇
代码地址:https://gitee.com/xiaowu_wang/hm-dianping 实战篇Redis开篇导读亲爱的小伙伴们大家好,马上咱们就开始实战篇的内容了,相信通过本章的学习,小伙伴们就能理解各种redis的使用啦,接下来咱们来一起看看实战篇我们要学习一些什么样的内容 短信登录 这一块我们会使用redis共享session来实现 商户查询缓存 通过本章节,我们会理解缓存击穿,缓存穿透,缓存雪崩等问题,让小伙伴的对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容 优惠卷秒杀 通过本章节,我们可以学会Redis的计数器功能, 结合Lua完成高性能的redis操作,同时学会Redis分布式锁的原理,包括Redis的三种消息队列 附近的商户 我们利用Redis的GEOHash来完成对于地理坐标的操作 UV统计 主要是使用Redis来完成统计功能 用户签到 使用Redis的BitMap数据统计功能 好友关注 基于Set集合的关注、取消关注,共同关注等等功能,这一块知识咱们之前就讲过,这次我们在项目中来使用一下 打人探店 基...
GraalVM 在 Windows 上的环境搭建
前言 GraalVM是一个高性能、云原生、支持多种语言的虚拟机。 GraalVM环境搭建分为两步: 1、下载配置GraalVM和下载native-image。 2,下载配置windows sdk和msvc。 GraalVM下载配置GraalVM 进入到 GitHub 上的 GraalVM 发布存储库。选择适用于 Windows 的基于 Java 11、17 或 19 的发行版,然后下载。我选择的是java17-22.3.0的。 将目录更改为要安装 GraalVM 的位置,然后将.zip存档文件移动到该目录。我这里是放在D:\JDK 将存档解压缩到文件系统。例如D:\JDK 配置环境变量12GRAALVM_HOME=D:\JDK\graalvm-ce-java17-22.3.0JAVA_HOME=D:\JDK\graalvm-ce-java17-22.3.0 验证1234D:\testNative>java -versionopenjdk version "17.0.5" 2022-10-18OpenJDK Runtime Environment G...
Spring Boot DevTools 的使用
参考:https://blog.csdn.net/renpeng301/article/details/124596782 Spring Boot DevTools 2.x(IDEA 热部署&远程调试&LiveReload)前言Spring Boot包括一组额外的工具,它们可以使应用程序开发体验更加方便。spring-boot-devtools模块可以包含在任何项目中,以提供额外的开发时特性。要包含devtools支持,请将模块依赖添加到你的项目中,如下面的Maven和Gradle清单所示: Maven 1234567<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </d...
Spring Boot 参数校验及全局捕获处理
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。 注意:JSR-303实现与 Hibernate ORM 没有任何关系。 JSR 303 用于对 Java Bean 中的字段的值进行验证。 Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。 @Valid注解使用使用步骤在Controller中使用 @Valid+BindingResult做参数校验非常好用。一般步骤如下: (1)引入pom依赖 123456789 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency><!-- @Js...
Spring Boot 整合 Redis 多数据源
基于配置文件 实现 redis 动态数据源和动态数据库的切换 MultiRedisConnectionFactory123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;import org.springframework.dao.DataAccessException;import org.springframework...
Spring Boot 配置全局日期格式转换
SpringBoot 设置后台向前台传递 Date 日期格式在 SpringBoot应用中,@RestController 注解的 json 默认序列化中,日期格式默认为:2020-12-03T15:12:26.000+00:00 类型的显示 在实际显示中,我们需要对其转换成我们需要的显示格式 方式一:配置文件修改配置文件配置 application.yml 12345spring: # 配置日期格式化 jackson: date-format: yyyy-MM-dd HH:mm:ss #时间戳统一转换为指定格式 time-zone: GMT+8 # 时区修改为东8区 application.properties 配置方式 12spring.jackson.date-format=yyyy-MM-dd HH:mm:ss #时间戳统一转换为指定格式spring.jackson.time-zone=GMT+8 # 时区修改为东8区 这里需要修改时区 time-zone:数据库默认时区是格林尼治的时间,如果不设置,会比实际时间少 8 个小时(北京时间) 方式...
Spring Boot 集成 Spring Data JPA 详细教程
SpringBoot集成SpringData JPA依赖引入SpringBoot项目工程,在pom.xml中引入相关依赖包即可: 12345678910<!-- 数据库相关操作 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency> 入口注解SpringData JPA提供了部分注解,可以添加在Application入口程序类上方,来满足相关诉...
Spring Boot 项目启动时初始化操作的 6 种方式
SpringBoot项目启动时初始化操作的6种方式1、监听容器刷新完成扩展点ApplicationListener<ContextRefreshedEvent>ApplicationContext事件机制是观察者设计模式实现的,通过ApplicationEvent和ApplicationListener这两个接口实现ApplicationContext的事件机制。 Spring中一些内置的事件如下: ContextRefreshedEvent:ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext接口中使用 refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用。 ContextStartedEvent:当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 star...
JWT知识小结
JWT/JWS/JWE/JWK JWT:指的是 JSON Web Token,由 header.payload.signture 组成。不存在签名的JWT是不安全的,存在签名的JWT是不可窜改的。 JWS:指的是签过名的JWT,即拥有签名的JWT。是一个有着简单的统一表达形式的字符串 ,基础三部分 (jwt实现方式之一) JWE:相对于JWS,JWE则同时保证了安全性与数据完整性(性能损失偏大)。JWE由五部分组成(jwt实现方式之一) JWK:既然涉及到签名,就涉及到签名算法,对称加密还是非对称加密,那么就需要加密的 密钥或者公私钥对。此处我们将 JWT的密钥或者公私钥对统一称为 JSON WEB KEY,即 JWK。 JWT工作流程 123456781. 用户登录:提供用户名和密码;2. JWT生成token和refresh_token,返回客户端;(注意:refresh_token的过期时间长于token的过期时间)3. 客户端保存token和refresh_token,并携带token,请求服务端资源;4. 服务端判断to...
