redis缓存 cache

学习目标

(1)掌握默认缓存实现

(2)掌握redis缓存实现

(3)掌握自定义redis缓存序列化机制

(一)用Repository实现数据库操作

  1. 引入依赖

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

  1. 新建实体类 Comment
  2. 新增Repository实现数据库操作

public interface CommentRepository extends JpaRepository<Comment,Integer> {

// @Query("SELECT c FROM t_comment c WHERE c.aId = ?1")

// public List<Comment> findById(Integer aid, Pageable pageable);

// 根据评论id修改评论作者评论作者author

@Transactional

@Modifying

@Query("UPDATE t_comment c SET c.author= ?1 WHERE c.id = ?2")

public int updateComment(String author,Integer id);

}

  1. 编写CommentService 服务类,并且不添加 @Cacheable注解
  2. 编写Controler类 CommentController
  3. 编写配置文件

spring.datasource.url=jdbc:mysql://localhost:3306/blog_system?serverTimezone=UTC&useSSL=false

spring.datasource.username=root

spring.datasource.password=root123

spring.jpa.show-sql=true

  1. 测试

在postman或浏览器多次发起

http://localhost:8080/get/1

观察控制台变化

开启缓存:

(1)将@Cacheable缓存在CommentService

的查询方法配置上,

(2)在启动类引入 @EnableCaching //开启缓存。

再测试观察控制台变化

(二)实现默认缓存

  1. 启动类添加注解:

@EnableCaching //开启缓存。对应的类需要序列化,

CommentService的方法配置上

课后了解其他操作的注解 @CachePut @CacheEvict @Caching @CaheConfig

  1. 服务类的方法添加注解 CommentService

@Cacheable(cacheNames = "comment",unless = "#result==null")

  1. 测试

在postman或浏览器多次发起

http://localhost:8080/get/1

观察控制台变化

(三)基于注解实现redis缓存

  1. 引入依赖

<!-- 引入整合Redis缓存的依赖启动器 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

  1. 配置redis服务器信息

spring.redis.host=127.0.0.1

# Redis???????

spring.redis.port=6379

# Redis?????????????

spring.redis.password=

  1. 验证

实体类Comment 不实现 implements Serializable(使用的还是默认缓存,redis没有数据)

在postman或浏览器多次发起

http://localhost:8080/get/1

观察运行结果

实体类Comment 实现 implements Serializable后再运行查看结果(使用redis缓存,redis有数据)

  1. 查看redis数据(数据看不懂)

通过RedisDesktopManager查看结果

 

(四)基于API实现redis缓存

  1. 编写 ApiCommentService服务类 (没有实现Serializable
  2. 编写controller 类ApiCommentController
  3. 测试 http://localhost:8080/api/get/1

(五)实现redis序列化

  1. 定义redis序列化的配置类 RedisConfig (注意没有程序调用到此类,是因为@Configuration表示项目启动就自动注入容器)

@Configuration

public class RedisConfig {

//注入redis连接工厂服务

@Resource

private RedisConnectionFactory redisConnectionFactory ;

@Bean

public RedisTemplate<String, Object> redisTemplate() {

  1. 测试。

http://localhost:8080/api/get/1

通过RedisDesktopManager查看结果

项目结构:

yml配置:

server.port= 8081
# MySQL???????
spring.datasource.url=jdbc:mysql://localhost:3306/blog_system?serverTimezone=UTC&useSSL=false
spring.datasource.username=root
spring.datasource.password=root123

# ?????sql??
spring.jpa.show-sql=true

# Redis????
spring.redis.host=127.0.0.1
# Redis???????
spring.redis.port=6379
# Redis?????????????
spring.redis.password=

# ??????Redis????????????1???????
spring.cache.redis.time-to-live=60000

依赖配置:

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 引入整合Redis缓存的依赖启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- @Data -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值