学完springboot基础之后可以直接学redis吗

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在Ja学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得那么为什么会涉及到两个队列呢,这两个队列到底有什么用呢?到学习提升

学完spring boot基础之后,可以直接学red is没有关系的,他们两个之间一般都是互通的关系,学起来比较简单,可以直接进行学习,不用担心说学完这个车会影响后面的学习,可以直接去行探索的。

redis整合springboot redis整合到微服务项目redis整合springboot redis整合到微服务项目


redis整合springboot redis整合到微服务项目


这里主要配置三个东西,Data ID、Group 以及要配置的内容。

Redis过期删除策略和内存淘汰策略

1.依赖:

那对于过期数据,一般有三种方式进行处理:

nacos-config这个依赖就相当于SpringCloud Config,nacos-discovery这个依赖就相当于Eureka。

Redis的过期删除策略: 惰性删除 和 定期删除 两种策略配合使用。

springboot整在项目中创建bootstrap.yml文件,加入以下配置合Redis参考, SpringBoot整合Redis - (jianshu)

在整合Redis的基础上,在新加配置

配置类

将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。

Redis中有6种淘汰策略:

redis.conf 文件中配置策略,有2个地方:

阿里一手爆出:Springboot整合MybatisPlus(超详细)完整教程

其实它的原理,也是对 sql 进行了改写,进行了 sql 查询, 底层主要依赖 mybatis 的进行实现的, 这里不给大家过多深入讲解,后边会给大家介绍,我们先熟练掌握它的一个基本使用。

开发工具:idea2019.2,men3

建表:

执行GeneratorCodeConfig.ja文件,输入表名user:

解决方法:在数据库连接中配置添加allowPublicKeyRetrieval=true

查看生成的文件;

UserController.ja中新增接口:

没问题。

上面是mybatisplus测试成功,下面我们继续测试我们自己写的sql是否成功。

UserMapper.ja

IUserServ:解决方案

UserController.ja:

测试findAllUser接口:

常用的工具类:

ResultInfo.ja

Status.ja

一份详尽的yml配置文件(@EnableRedisHttpSession关于数据源的配置比较详尽):

总结:

所有的面试题目都不是一成不变的,特别是像一线大厂,上面的资料只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。给大家分享Spring系列的学习笔记和面试题,包含spring面试题、spring cloud面试题、spring boot面试题、spring教程笔记、spring boot教程笔记、阿里巴巴开发手册(63页PDF总结)、2022年Ja面试手册。一共整理了1184页PDF文档。私信博主(777)领取,祝大家更上一层楼!!!

原文作者:易水寒

原文出处:

SpringBoot与Nacos整合

我们首先来了解两个API

上一篇笔者已经介绍怎么安装Nacos了,这篇就开始重头戏。

先将nacos-discovery依赖进行注释,先来实现config

然后登录nacos,在nacos页面选择配置然后调用接口: 管理,创实际的项目开发过程中,我们通常基于某些主流框架平台进行技术开发,比如 SpringBoot,今天我们就以 SpringBoot 整合 ElasticSearch 为例,给大家详细的介绍 ElasticSearch 的使用!建配置文件

Data Id 的格式是 ${prefix}-${spring.profile.active}.${file-extension}

${prefix} 的值,默认为 spring.application.name 的值

${spring.profile.active} 表示项目当前所处的环境

提供测试的Controller

将nacos-discovery依赖注释放开

在nacos下增加配置

启动项目,登录nacos。可以看到 -》服务列表中有注册上来的服务的相关信息。

注:如果配置中心与当前应用的配置文件都配置了相同的key,优先使用配置中心的配置。

在实际开发中,我们不可能将所有的配置同时放在同一个配置文件中,那样会显得多而有杂。

接下来笔者会将product-dev.yaml里的有的配置拆分出来成为datasource-dev.yaml、mybatis-plus-dev.yaml。

然后在应用程序的bootstrap.yml里的config下增加配置:

基于Redisson实现延迟队列

这时候登录系统在不同的app之间跳转的时候,session都是一致了,redis上可以看到:

设有这样一个场景,我们有一个订单,或者工单等等。需要在超时30分钟后进行关闭。这个时候我们想到的应该是采用定时任务去进行轮训判断,但是呢,每个订单的创建时间是不一样的,这个时间怎么确定才好呢,5分钟。。1分钟。。执行一次吗。这样就会非常影响性能。且时间误很大。基于以上业务需要我们想到了有以下解决方案。

我们首先来回顾下JDK的延迟队列

基于延迟队列要实现接口 Delayed ,并且实现 getDelay 方法和 compareTo 方法

订单的实体,为了简单就定义基础几个字段。

为了简单我们暂且定义延迟时间为10s

输出结果

2022-07-01T15:00

当前时间:2022-07-01T15:10:37.375

3.创建配置类RedissonConfig,这里是为了读取我们刚刚创建在配置文件中的yml

4.测试

控制台输出:

订单生成时间2022-07-01T15:22:10.304

订单关闭时间2022-07-01T15:22:20.414

首先我们实际作的是RBl在resources目录下新建mapper文件夹,新建UserMapper.xml文件:ockingQueue阻塞队列,并不是RDelayedQueue队列,RDelayedQueue对接主要是提供中间转发的一个队列,类似中间商的意思

画个小图理解下

这里不难看出我们都是基于 RBlockingQueue 目标队列在进行消费,而 RDelayedQueue 就是会把过期的消息放入到我们的目标队列中

我们只要从 RBlockingQueue 队列中取数据即可。

好像还是不够深入,我们接着看。我们知道 Redisson 是基于redis来实现的那么我们看看里面到底做了什么事

打开redis客户端,执行monitor命令,看下在执行上面订单作时redis到底执行了哪些命令

monitor命令可以看到作redis时执行了什么命令

这里参考:

我们知道Zset是按照分数升序的也就是最小的分数在最前面,基于这个特点,大致明白,利用过期时间的2.创建redisson.yml时间戳作为分数放入到Zset中,那么即将过期的就在最上面。

直接上个图解

Spring Boot整合ElasticSearch实现增删改查基本示例

spring-session-data-redis

ElasticSearch被命名为大数据搜索引擎,在文件检索、数据存储方面具有天然的优势。而SpringBoot作为服务整合中间件,在服务组装方面是一款粘合器,本文主要提供Spring Boot整2、RedisAutoConfiguration配置类生效的一个条件是在classpath路径下有RedisOperations类存在,因此springboot的自动装配机制会会UseServImpl.ja:去classpath下去查找对应的class文件。合ElasticSearch基本增删改示例。

SpringBoot自动装配原理

同样的,修改一下我们的 pom.xml

初看@SpringBootApplication有很多的注解组成,其实归纳就是一个"三体"结构,重要的只有三个Annotation:

这个就太扯了,我把数据放到缓存中,然后重启了下,再去查缓存就不能用了,那这个缓存有啥用。

(1)@Configuration注解

(2)@ComponentScan

(3)@EnableAutoConfiguration

从源码中可以知道,最关键的要属@Import(EnableAutoConfigurationImportSelectospring-boot-starter-data-redis 包中提供了过期的类,对于key过期,需要得到通知,做业务处理的,可以做此。r.class),借助EnableAutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。同时借助于Spring框架原有的一个工具类:SpringFactoriesLoader,@EnableAutoConfiguration就可以实现智能的自动配置。

1、从spring

3.如果pom.xml有对应的jar包,就能匹配到对应依赖class,

4、匹配成功,这个功能配置类才会生效,同时会注入默认的属性配置类@EnableConfigurationProperties(RedisProperties.class)

5.Redis功能配置里面会根据条件生成最终的JedisConnectionFactory、RedisTemplate,并提供了默认的配置形式@ConditionalOnMissingBean(name = "redisTemplate")

6.最终创建好的默认装配类,会通过功能配置类里面的 @Bean注解,注入到IOC当中

7.用户使用,当用户在配置文件中自定义时候就会覆盖默认的配置@ConditionalOnMissingBean(name = "redisTemplate")

1.通过各种注解实现了类与类之间的依赖关系,容器在启动的时候Application.run,会调用EnableAutoConfigurationImportSelector.class的selectImports方法(其实是其父类的方法)-- 这里需要注意,调用这个方法之前发生了什么和是在哪里调用这个方法需要进一步的探讨

2.selectImports方法最终会调用SpringFactoriesLoader.loadFactoryNames方法来获取一个全面的常用BeanConfiguration列表

3.loadFactoryNames方读取FACTORIES_RESOURCE_LOCATION(也就是spring-boot-autoconfigure.jar 下面的spring.factories),获取到所有的Spring相关的Bean的全限定名ClassName,大概120多个

4.selectImports方法继续调用filter(configurations, autoConfigurationMetadata);这个时候会根据这些BeanConfiguration里面的条件,来一一筛选,最关键的是

@ConditionalOnClass,这个条件注解会去classpath下查找,jar包里面是否有这个条件依赖类,所以必须有了相应的jar包,才有这些依赖类,才会生成IOC环境需要的一些默认配置Bean

5.把符合条件的BeanConfiguration注入默认的EnableConfigurationPropertie类里面的属性值,并且注入到IOC环境当中

spring-boot 2.0.0 M1 配置redis启动报错,不知道该怎么解决

1、增加reitory到pom.xm启动springboot的application启动类:会报错,提示找不到mapper文件,es 中最重要的就是索引库,客户端如何创建呢?请看下文!我们需要在springboot启动类上添加扫描mapper的注解:l

repo.spring. io/libs- milestone

2、增加相关依赖

org.springframework.boot

spri当然今天的主角是它了,我们主要围绕着基于Redisson的延迟队列来说。ng-boot-starter-redis

org.springframework.session

1.0.0.RC1

pom

3、RedisSessionConfig.ja

package com.wisely.base;

import org.springframework.context.annotation.Configuration;

import org.springframework.session.data.redis.config.annotation.web..EnableRedisHttpSession;

@Configuration

public class RedisSessionConfig {

在application.properties修改redis配置信息(请自行安装redis),请根据实际修改。如:

spring.redis.host=192.168.1.103

5、所有实体类实现Serializable接口

public class SysResource implements Serializable

6、查看效果

7、总结

学妹想学SpringBoot,连夜整理一篇SpringBoot入门最详细教程笔记

很滑稽的一个问题,相同的类型还出现类型转换错误

凭借开箱即用,远离繁琐的配置等特性,Spring Boot 已经成为 Ja 开发者人人必学必会的开源项目。那么开发者该如何快速上手Spring Boot 呢?

当cache将数据放入缓存时,使用了默认的序列化方式(JdkSerializationRedisSerializer),该序列化使用了二进制保存了对象的上下文ClassLoader,而由于devtools导致服务重启,然后重启后ClassLoad和原来的ClassLoader不是同一个对象了,所以导致对象的Class也不一样,虽然看上去都是User,但是它就是不同的类型,因为它的Class也不相等。

那请问Spring Boot 到底是啥?Spring Boot是Spring框架的扩展和自动化,它消除了在Spring中需要进行的XML(EXtensible Markup Language)文件配置(若习惯XML配置,则依然可以使用),使得开发变得更快、更高效、更自动化。

总结 :@EnableAutoConfiguration作用就是从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Ja Refletion)实例化为对应的标注了@Configuration的JaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。这些功能配置类要生效的话,会去classpath中找是否有该类的依赖类(也就是pom.xml必须有对应功能的jar包才行)并且配置类里面注入了默认属性值类,功能类可以引用并赋默认值。生成功能类的原则是自定义优先,没有自定义时才会使用自动装配类。

在men 的settings.xml配置文件的profiles标签添加以下配置:

把men整合到idea。

项目目录:

HelloWorldMainApplication:

HelloController:

运行结果:

打开浏览器访问:

1、我们在pom.xml文件中如以下代码:

2、然后,我们将应用打包

3、然后再target文件夹下就可以看到 spring-boot-01-helloworld-1.0-SNAPSHOT.jar

4、到桌面(随便哪,个人选择),打开cmd窗口,切换到jar包所在位置,我的是桌面,然后输入: ja -jar spring-boot-01-helloworld-1.0-SNAPSHOT.jar ,运行效果如下。

5、打开浏览器访问:

这样的部署就变得十分简单了。

小伙伴们,帮忙一键三连呀

题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

故此将并 将重要的Ja进阶资料包括并发编程、JVM调优、SSM、设计模式、spring等知识技术、阿里面试题精编汇总、常见源码分析等录播视频免费分享出来,需要领取的麻烦 评论区领取

SpringBoot进阶之Mybatis分页插件

SpringBoot 连接 ElasticSearch,主流的方式有以下四种方式

大家好,一直以来我都本着 用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫

「大佬可以绕过 ~」

如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了 Springboot 基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础 中间件 的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有 收获 ~

上期带大家学习了 Springboot 中如何集成 redis 以及它的一个基本使用, 本期将带大家学习 mybatis 的一个 分页插件 的使用,同样的,我们集成到 Springboot 中。最近github可能会被墙,所以我把源码放到了国内gitee上,本节我们依然使用上期的代码

分页好比你买的书一样,它内容多了,总不能放一页吧,一页也放不下,所以得分页,页翻完就翻第二页,所以很好理解。在程序中,一般分页常用于列表的接口比如用户列表、文章列表等等,而列表项的数据一般都返回很简单的数据用于前端展示,详情页一般会展示比较全的一个数据,所以大家写接口的时候可以注意下,不要全部返回数据。有的详情是要带着权限去查询的,如果列表就返回了全部数据,万一对方是个懂技术的,不就曝光了表里的全部数据了。

我们再说使用这些代码之后 ,无论你使用nginx或者apache,都无须在关心多个app之间的session一致的问题了。一下分页的算法, 分页里主要有两个变量一个是 page , 另一个是 pageSize ,一般由前端传过来,服务端会接收这两个数值,在接收的时候要判断一下,如果对方为空或者0,你可以设置一个基础值比如 page=1 , pageSize=10 ,不至于用户看到的是空列表

其实分页,在 sql 中就可以做分页功能了,之前讲 mysql 没给大家介绍,主要是想结合这一节一起讲。那么 sql 怎么做分页呢?以之前的用户角色列表为例:

同样的,主要是 limit , offset 这两个值, 个很好理解,限制数量,就是一页多少个数据,第二个也很好理解,位移,就是向下位移多少条数据,一般可以通过如下公式计算:

很简单的数学题,不要说不会 ~

好,有了以上基础,大家可以自行试一下,在 Mapper.xml 写一下试试,这种方式也是可以的, 下面给大家介绍个神器

这里直接帮大家封装好,因为一般列表项数据主要涉及几个属性, list(数据) , total(总条数) , pageSize(一页多少条) , pageNum(当前第几页) ,主要涉及这几项,因为前端一般也会根据这几个值,进行列表,页码的一个展示,好,我们直接看代码:

然后,我们去调用它, 修改我们之前写的列表:

请求成功后会返回如下:

本期}4、相关配置修改就到这里结束了,总结一下,本节主要带大家学习了 sql 如何进行分页查询和介绍了 mybatis 分页插件 的基本使用,建议大家多去试着写写

SpringBoot 整合 Elasticsearch 实现海量级数据搜索

其实Redisson延迟队列内部也是基于redis来实现的,我们先来进行整合使用看看效果。基于springboot

今天给大家讲讲 SpringBoot 框架 整合 Elasticsearch 实现海量级数据搜索。

在上篇ElasticSearch 文章中,我们详细的介绍了 ElasticSearch 的各种 api 使用。

还有一个需要大家注意的地方,那就是版本号的兼容!

为什么要这样做呢?主要原因就是 es 的服务端,高版本不兼容低版本;es6 和 es7 的某些 API 请求参数结构有着很大的区别,所以客户端和服务端版本号尽量保持一致Redis可以用使用 expire 指令设置过期时间,在Redis内部,每当我们设置一个键的过期时间时,Redis就会将该键带上过期时间存放到一个过期字典中。当我们查询一个键时,Redis便首先检查该键是否存在过期字典中,如果存在,那就获取其过期时间。然后将过期时间和当前系统时间进行比对,比系统时间大,那就没有过期;反之判定该键过期。。

废话也不多说了,直接上代码!

本文采用的 SpringBoot 版本号是 2.1.0.RELEASE ,服务端 es 的版本号是 6.8.2 ,客户端采用的是的 Elastic Ja High Ll Rest tman测试: 版本号是 6.4.2 ,方便与 SpringBoot 的版本兼容。

在 application.properties 全局配置文件中,配置 elasticsearch 自定义环境变量

至此,客户端配置完毕,项目启动的时候,会自动注入到 Spring 的 ioc 容器里面。

所谓文档,就是向索引里面添加数据,方便进行数据查询,详细作内容,请看下文!

本文主要围绕 SpringBoot 整合 ElasticSearch 接受数据的插入和搜索使用技巧,在实际的使用过程中,版本号尤其的重要,不同版本的 es,对应的 api 是不一样的。