文章目录
3.2 websocket 实现定时给客户端推送数据任务的步骤
1.0 spring cache 概述
spring cache 是 spring 框架通过对方法调用结果进行缓存管理的技术。spring cache 提供了一种简单易用的方法来减少方法的调用时间,提高系统性能。
spring cache 通过将方法调用的结果缓存在缓存中,下次再次调用该方法时,直接从缓存中取数据,避免了重复计算,减少了系统的负担和资源消耗。
spring cache 支持多种缓存提供器,包括 ehcache、guava cache、caffeine、redis等,开发者可以根据实际需求选择合适的缓存提供器来进行缓存管理。
简单来说,spring cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。spring cache 提供了一层抽象,底层可以切换不同的缓存实现。
1.1 spring cache 具体使用
1.1.1 引入依赖
引入 spring cache 的依赖:
还需引入缓存中间件的依赖,这里使用的是 redis 的中间件:因此引入 redis 的依赖
接着就要在 application.yml 配置文件中配置 redis 相关的信息:
1.1.2 spring cache 相关注解的介绍
提供了几个常用的注解来管理方法调用的结果缓存。
1)@enablecacheing:开启缓存注解功能,通常加在启动类上。
代码演示:
2)@cacheable:在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,则会调用方法并将方法的返回值放到缓存中。
代码演示:
举个例子:根据 id 来查询用户信息,当前的 redis 中是不存在用户信息的。
现在要根据 id 查询用户信息,首先会查询缓冲中是否有相关的数据,如果没有就会到数据库中进行查询相关的数据:
使用 postman 发送请求:
当请求发送到服务端,先根据 (cachenames = "user",key = "#id") 查询 redis 缓存是否存在相应的数据,当前是第一次查询,因此缓存不存在相应的数据,所以会到数据库中查询数据,查询之后,会将结果自动放入到 redis 缓存中,那么下一次查询相同的数据,就会直接从 redis 缓存中获取到。
第一次查询之后,redis 缓存中的数据:
3)@cacheput:将方法的返回值放到缓存中。
举个例子:新增的用户数据之后,就可以直接将数据放入到 redis 缓存中。
代码演示:
使用 postman 发送请求:
当发送请求之后,服务端就会给数据添加到数据库中,接着将返回值放到 redis 缓存中来。
新增完之后的 redis:
4)@cacheevict:将一条或多条数据从缓存中删除。
举个例子:
删除一条数据:当从数据库中删除用户的数据,那么缓存中的该用户的数据也要删除。
代码演示:
使用 postman 来发送请求:
删除之前的 redis 的数据:
删除之后的 redis 的数据:
删除多条数据:删除 user/ 下的全部数据。
代码演示:
2.0 spring task 概述
spring task 是 spring 框架提供的任务调度工具,可以按照约定时间自动指定某个代码逻辑。
2.1 cron 表达式
cron 表达式其实就是一个字符串,通过 cron 表达式可以定义任务触发的时间,构成规则:分为 6 或 7 个域,由空格分隔开,每个域代表一个含义。每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)。
1)可以使用工具来根据需求来生成相应的 cron
cron 表达式在线生成器:cron - 在线cron表达式生成器 (ciding.cc)
相关的说明:
2.2 spring task 使用步骤
1)导入 maven 坐标
包含在 spring-boot-starter jar 包中,因此不需要引入额外的 jar 包了。
2)启动类添加注解 @enablescheduling 开启任务调度
3)自定义定时任务类
定义一个定时类,该类需要交给 spring 容器管理,因此需要加上 @component 注解。在类中定义的方法为:需要定时执行的具体任务,通过 @scheduled(cron = "") 注解来指定具体的时间。
运行结果:
3.0 websocket 概述
websocket 是一种基于 tcp 协议的网络通信协议,可以实现客户端和服务器之间双向通信。相对于传统的 http 协议,websocket 具有更低的延迟和更少的网络开销。通过 websocket,客户端和服务器可以建立持久性的连接,实现实时的双向数据传输,而无需每次请求都建立新的连接。
websocket 是基于 tcp 的一种新的网络协议。它实现了浏览器与服务器全双工通信,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。
3.1 websocket 与 http 的区别
3.2 websocket 实现定时给客户端推送数据任务的步骤
1)客户端浏览器发送一次握手请求给服务端来请求建立联系。
主要分为三个部分:
第一部分:向服务器发送建立连接请求。
通过 new websocket("请求的路径") 来请求与服务端建立联系。
第二部分:回调函数
自动调用的函数,比如说:当服务端发送的消息,那么客户端就会自动调用接收信息的函数。
第三部分:客户端调用的函数
客户端手动调用的函数,比如说:发送消息给服务端。
完整的客户端前端代码:
2)导入 websocket 的 maven 坐标。
3)导入 websocket 服务端组件 websocketserver,用于和客户端进行通信。
当有客户端发送请求建立连接时,服务端就会通过 @serverendpoint("/ws/{sid}") 注解来接收到请求。由于发送请求的客户端不止一个,所以需要用到 map 集合来接收 session 即会话对象。
同样的,服务端也会存在一些回调函数,比如说,当客户端发送消息给服务端,服务端就会自动接收到消息。
也会存在一些手动调用的函数,比如:发送消息给客户端。
完整的服务端代码:
4)导入配置类 websocketconfiguration,注册 websocket 的服务端组件。
5)导入定时任务类 websockettask,定时向客户端推送数据。
运行结果:
发表评论