温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringBoot与SpringCache概念是什么

发布时间:2022-02-14 09:50:17 来源:亿速云 阅读:129 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关SpringBoot与SpringCache概念是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

    1.SpringCache的概念

    首先我们知道jpa,jdbc这些东西都是一些规范,比如jdbc,要要连接到数据库,都是需要用到数据库连接,预处理,结果集这三个对象,无论是连接到mysql还是oracle都是需要用到这个三个对象的,这是一种规范,而SpringCache是一种作为缓存的规范,具体实现有redis,EhCahe等

    2.SpringCache用法(redis版)

    2.1 .SpringCache基本用法

    1.pom.xml

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>2.6.3</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>     <groupId>com.yl</groupId>     <artifactId>cache_redis</artifactId>     <version>0.0.1-SNAPSHOT</version>     <name>cache_redis</name>     <description>Demo project for Spring Boot</description>     <properties>         <java.version>11</java.version>     </properties>     <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-cache</artifactId>         </dependency>             <artifactId>spring-boot-starter-data-redis</artifactId>             <artifactId>spring-boot-starter-web</artifactId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>     </dependencies>     <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build> </project>

    2.application.properties

    # redis的配置 spring.redis.host=192.168.244.135 spring.redis.port=6379 spring.redis.password=root123

    3.实体类

    package com.yl.cache_redis.domain; import java.io.Serializable; public class User implements Serializable {     private Integer id;     private String username;     private String password;     public Integer getId() {         return id;     }     public void setId(Integer id) {         this.id = id;     }     public String getUsername() {         return username;     }     public void setUsername(String username) {         this.username = username;     }     public String getPassword() {         return password;     }     public void setPassword(String password) {         this.password = password;     }     @Override     public String toString() {         return "User{" +                 "id=" + id +                 ", username='" + username + '\'' +                 ", password='" + password + '\'' +                 '}';     } }

    4.service

    package com.yl.cache_redis; import com.yl.cache_redis.domain.User; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service public class UserService {     @Cacheable(cacheNames = "u1") //这个注解作用就是将方法的返回值存到缓存中     public User getUserById(Integer id) {         System.out.println("getUserById:" + id);         User user = new User();         user.setId(id);         user.setUsername("root");         user.setPassword("root");         return user;     } }

    5.主程序,加上开启缓存的注解

    package com.yl.cache_redis; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication @EnableCaching //开启缓存功能 public class CacheRedisApplication {     public static void main(String[] args) {         SpringApplication.run(CacheRedisApplication.class, args);     } }

    6.测试

    6.1)userservice没加@Cacheable注解时

    SpringBoot与SpringCache概念是什么

    6.2)userservice加@Cacheable注解后,发现sevice中的方法只调用了一次

    SpringBoot与SpringCache概念是什么

    6.3)在redis中也可以看到缓存中有数据,key为定义好的cacheNames+::+方法的参数

    SpringBoot与SpringCache概念是什么

    2.2 .SpringCache自定义缓存key

    1.SpringCache默认使用cacheNames和方法中的参数结合组成key的,那么如果有多个参数呢?它又是如何组成key的呢?我们可以指定key吗?

    SpringBoot与SpringCache概念是什么

    SpringBoot与SpringCache概念是什么

    SpringBoot与SpringCache概念是什么

    2.如何自定义key呢?

    1)自定义key

    package com.yl.cache_redis; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.stereotype.Component; import java.lang.reflect.Method; import java.util.Arrays; @Component public class MyKeyGenerator implements KeyGenerator {     @Override     public Object generate(Object target, Method method, Object... params) {         return target.toString() + ":" + method.getName() + ":" + Arrays.toString(params);     } }

    2)测试

    SpringBoot与SpringCache概念是什么

    SpringBoot与SpringCache概念是什么

    SpringBoot与SpringCache概念是什么

    2.3 .SpringCache更新缓存

    1.使用@CachePut注解来更新,注意:@CachePut中的key要和@Cacheable中的key一样,否则更新不了!

    SpringBoot与SpringCache概念是什么

    SpringBoot与SpringCache概念是什么

    2.4 .SpringCache清空缓存

    1.使用@CacheEvict注解,主要key和要@Cacheable中的key一致

    SpringBoot与SpringCache概念是什么

    2.测试

    SpringBoot与SpringCache概念是什么

    2.5 .SpringCache其他用法

    1.@Caching注解,可以组合多个注解

    SpringBoot与SpringCache概念是什么

    2.@CacheConfig注解

    SpringBoot与SpringCache概念是什么

    3.SpringCache用法(EhCache版)

    1.pom.xml

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>2.6.3</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>     <groupId>com.yl</groupId>     <artifactId>ehcache</artifactId>     <version>0.0.1-SNAPSHOT</version>     <name>ehcache</name>     <description>Demo project for Spring Boot</description>     <properties>         <java.version>11</java.version>     </properties>     <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-cache</artifactId>         </dependency>             <artifactId>spring-boot-starter-web</artifactId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>             <groupId>net.sf.ehcache</groupId>             <artifactId>ehcache</artifactId>             <version>2.10.6</version>     </dependencies>     <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build> </project>

    2.实体类

    package com.yl.ehcache.model; import java.io.Serializable; public class User implements Serializable {     private Integer id;     private String username;     private String password;     public Integer getId() {         return id;     }     public void setId(Integer id) {         this.id = id;     }     public String getUsername() {         return username;     }     public void setUsername(String username) {         this.username = username;     }     public String getPassword() {         return password;     }     public void setPassword(String password) {         this.password = password;     }     @Override     public String toString() {         return "User{" +                 "id=" + id +                 ", username='" + username + '\'' +                 ", password='" + password + '\'' +                 '}';     } }

    3.service

    package com.yl.ehcache.service; import com.yl.ehcache.model.User; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service public class UserService {     @Cacheable(cacheNames = "user")     public User getUserById(Integer id) {         System.out.println("getUserById()...");         User user = new User();         user.setId(id);         user.setUsername("root");         user.setPassword("root");         return user;     }     @CacheEvict(cacheNames = "user")     public void delete(Integer id) {         System.out.println("delete"); }

    4.主程序

    package com.yl.ehcache; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication @EnableCaching public class EhcacheApplication {     public static void main(String[] args) {         SpringApplication.run(EhcacheApplication.class, args);     } }

    5.ehcache.xml

    <ehcache>     <diskStore path="java.io.tmpdir/shiro-spring-sample"/>     <defaultCache             maxElementsInMemory = "1000"             eternal = "false"             timeToIdleSeconds = "120"             timeToLiveSeconds = "120"             overflowToDisk = "false"             diskPersistent = "false"             diskExpiryThreadIntervalSeconds = "120"/>     <cache name = "user"            maxElementsInMemory = "1000"            eternal = "false"            overflowToDisk = "true"            diskPersistent = "true"            diskExpiryThreadIntervalSeconds = "600"/> </ehcache>

    6.测试

    SpringBoot与SpringCache概念是什么

    感谢各位的阅读!关于“SpringBoot与SpringCache概念是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI