进行网站建设有哪些重要意义,windows优化软件排行,比特币简易网站开发,aspx网站跳转代码一. 演示Mybatis 一级缓存
首先我们准备一个接口 两个实现的方法#xff0c; 当我们调用这个queryAll#xff08;#xff09;方法时我们需要调用selectAll#xff08;#xff09;方法来查询数据 调用此接口实现效果 这个时候我们就可以发现了问题#xff0c;我们调用方法… 一. 演示Mybatis 一级缓存
首先我们准备一个接口 两个实现的方法 当我们调用这个queryAll方法时我们需要调用selectAll方法来查询数据 调用此接口实现效果 这个时候我们就可以发现了问题我们调用方法之后对数据库查询了两次但是只有一次请求这样进行了多次查询造成了资源的浪费 当我们加入Transactional事务注解第二次查询其实是执行的不过他读的是一级缓存的数据所以没有数据显示不会在查询出来查的是第一次的缓存数据这个就是事务的一级缓存了 一级缓存可以帮助我们减少重复的数据库查询
怎么可以关闭一级缓存只要在本模块中的配置文件配置就好了 二. 演示Mybatis 二级缓存
查询接口读多写少的接口适合做缓存
当开启缓存后数据的查询执行的流程就是 二级缓存 - 一级缓存 - 数据库。
MyBatis 是默认关闭二级缓存的因为对于增删改操作频繁的话那么二级缓存形同虚设每次都会被清空缓存。 开启二级缓存只需要在对应的SQLMapper文件中加入cache/cache 将对应的实体类序列化 在进行查询的时候不会查SQL而是显示查询的二级缓存的命中率0.5
三. SpringBoot内置缓存
导入依赖pom.xml !--spring内置缓存--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId/dependency
在模块的启动类中加入EnableCaching注解 开启缓存
开启缓存之后我们在service方法中加入一个注解
Cacheable(value DailyTrainTicketService.queryList3) 定义这个方法位置在调用这个方法的时候做缓存 当我们输入不同的参数的时候根据不同的请求参数空间会缓存多个解说会根据请求参数生成一个key需要对请求参数生成hashCode和equals方法用于生成key
四.SpringBoot集成redis缓存
导入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency 在配置文件中配置redis
spring.data.redis.host127.0.0.1
spring.data.redis.port6379
spring.data.redis.password123456
新建redis controller类测试redis是否连接成功
package com.jiawa.train.business.controller;import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.TimeUnit;RestController
public class RedisController {private static final Logger LOG LoggerFactory.getLogger(RedisController.class);Resourceprivate RedisTemplate redisTemplate;RequestMapping(/redis/set/{key}/{value})public String set(PathVariable String key, PathVariable String value) {redisTemplate.opsForValue().set(key, value, 3600, TimeUnit.SECONDS);LOG.info(key: {}, value: {}, key, value);return success;}RequestMapping(/redis/get/{key})public Object get(PathVariable String key) {Object object redisTemplate.opsForValue().get(key);LOG.info(key: {}, value: {}, key, object);return object;}
}启动之后访问两个接口方法可以看到访问成功了说明已经集成了redis没有其他的代码两个都是对redis的操作 接下来就是redis的缓存在模块配置文件中配置一下
# 设置缓存类型为Redis
spring.cache.typeredis
# 设置Redis缓存键前缀
spring.cache.redis.use-key-prefixtrue
spring.cache.redis.key-prefixtrain_cache_
# 允许缓存空值
spring.cache.redis.cache-null-valuestrue
# 设置缓存生存时间秒
spring.cache.redis.time-to-live60s
设置缓存时间太短的时候查询接口每次都会查数据库而不会查缓存 redis常用放用户的登录信息早起没有redis的时候登录信息都放在session中应用已重启登录就没有了多节点session又是另一个头大的问题