嘉定网站公司,做跨境的网站有哪些,做任务领黄钻的网站,扬州高邮网站建设在Spring Boot中使用内缓存的时候需要预先知道什么是内缓存#xff0c;使用内缓存的好处。
什么是内缓存
内缓存#xff08;也称为进程内缓存或本地缓存#xff09;是指将数据存储在应用程序的内存中#xff0c;以便在需要时快速访问和检索数据#xff0c;而无需每次都从…在Spring Boot中使用内缓存的时候需要预先知道什么是内缓存使用内缓存的好处。
什么是内缓存
内缓存也称为进程内缓存或本地缓存是指将数据存储在应用程序的内存中以便在需要时快速访问和检索数据而无需每次都从外部数据源如数据库或网络获取数据。
内缓存通常用于提高应用程序的性能和响应速度因为内存访问比磁盘或网络访问更快。通过将经常使用的数据存储在内存中应用程序可以避免频繁地访问慢速的外部数据源从而提高数据访问的效率。
内缓存可以用于各种场景例如
数据库查询结果缓存将数据库查询的结果存储在内存中以便在相同的查询被再次执行时可以直接从缓存中获取结果而无需再次查询数据库。API响应缓存将API的响应结果存储在内存中以便在相同的API请求被再次发起时可以直接从缓存中获取响应结果而无需再次调用外部API。计算结果缓存将复杂的计算结果存储在内存中以便在相同的计算被再次触发时可以直接从缓存中获取结果而无需重新执行计算逻辑。
内缓存可以使用各种缓存框架或库来实现如Caffeine、EhCache、Redis等。这些缓存框架提供了方便的API和配置选项使开发人员能够轻松地在应用程序中使用内缓存。
需要注意的是内缓存是存储在应用程序的内存中的因此它的容量是有限的。过多地使用内缓存可能会导致内存占用过高从而影响应用程序的性能。因此在使用内缓存时需要根据实际需求和可用内存来进行合理的配置和管理。
案例
引入相关依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdscopeprovided/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency在配置文件中引入数据库相关属性
spring.datasource.urljdbc:mysql://localhost:3306/test?useUnicodetruecharacterEncodingutf-8useSSLtrueserverTimezoneUTC
spring.datasource.usernameroot
spring.datasource.password123456
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driverspring.jpa.show-sqltrue
spring.jpa.hibernate.ddl-autocreate-drop创建实体类对象其中数据库对象和实体类对象一一对应这里就不给出数据库SQL语句了
Entity
//Data
//NoArgsConstructor
public class User {IdGeneratedValueprivate Long id;private String name;private Integer age;public User(String name, Integer age) {this.name name;this.age age;}public Long getId() {return id;}public void setId(Long id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;}public User() {}
}User实体的数据访问实现
CacheConfig(cacheNames users)
public interface UserRepository extends JpaRepositoryUser, Long {CacheableUser findByName(String name);User findByNameAndAge(String name, Integer age);Query(from User u where u.name:name)User findUser(Param(name) String name);}创建一个测试类
Slf4j
RunWith(SpringRunner.class)
SpringBootTest
public class ApplicationTests {Autowiredprivate UserRepository userRepository;Autowiredprivate CacheManager cacheManager;Testpublic void test() throws Exception {// 创建1条记录userRepository.save(new User(AAA, 10));User u1 userRepository.findByName(AAA);System.out.println(第一次查询 u1.getAge());User u2 userRepository.findByName(AAA);System.out.println(第二次查询 u2.getAge());}}需要在启动类中加入EnableCaching注解:
EnableCaching
SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}如图我们可以看到在调用第二次的findByName的时候并没有执行select语句这样也就减少了对数据库的读取操作。 通过图片可以看到在第一次调用findByName函数之后CacheManager将这个查询结果保存下来在第二次访问的时候就可以匹配上而不需要再次访问数据库了。
Cacheable该注解用于标记方法的返回值应该被缓存。当调用带有Cacheable注解的方法时Spring Boot会首先检查缓存中是否存在对应的结果。如果存在则直接返回缓存的结果如果不存在则执行方法体中的逻辑并将结果存储到缓存中。该注解可以指定缓存的名称、缓存的键等参数。
CachePut该注解用于标记方法的返回值应该被更新到缓存中。与Cacheable不同CachePut注解会每次都执行方法体中的逻辑并将结果存储到缓存中。它通常用于更新缓存中的数据以确保缓存的数据与实际数据保持同步。
CacheEvict该注解用于标记方法的返回值应该从缓存中移除。当调用带有CacheEvict注解的方法时Spring Boot会从缓存中移除对应的结果。该注解可以指定要移除的缓存名称、缓存的键等参数。它通常用于在数据发生变化时清除缓存中的旧数据。
Caching该注解用于将多个缓存相关的注解组合在一起使用。通过Caching注解您可以在一个方法上同时使用多个缓存相关的注解以实现更复杂的缓存操作。
关于更多的Cache配置我们可以参照Spring Boot官方文档。