Spring Boot學習筆記——Spring Boot與Redis的集成


一.添加Redis緩存

1.添加Redis起步依賴

在pom.xml中添加Spring Boot支持Redis的依賴配置,具體如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
    <version>1.4.7.RELEASE</version>
</dependency>

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-redis/1.4.7.RELEASE

2.添加緩存注解

(1) 在引導類DemoApplication.java中,添加@EnableCaching注解開啟緩存,添加后的代碼:
DemoApplication.java:

package com.zifeiy.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

(2)在業務邏輯類UserServiceImpl的getAllUsers()方法上添加@Cacheable注解來支持緩存,添加后的實現代碼如下:
UserServiceImpl.java:

	// 查詢所有用戶
	@Override
	@Cacheable(value="UserCache",key="'user.getAllUsers'")
	public List<User> getAllUsers() {
		return this.UserMapper.getAllUsers();
	}

需要注意的是,@Cacheable注解中的key屬性除了需要被英文雙引號引用外,還需要加入英文單引號,否則系統在執行緩存操作時將出錯。
如果忘了加單引號,最后運行起來可能就會報這樣的錯誤:

EL1008E: Property or field 'user' cannot be found on object of type 'org.springframework.cache.interceptor.CacheExpressionRootObject' - maybe not public or not valid?] with root cause

3.使實體類實現可序列化接口

為了便於數據的傳輸,需要將實體類User實現序列化接口Serializable,具體代碼如下:

public class User implements Serializable {
    private Integer id;
    private String username;
    private String address;
    ...

4.制定Redis緩存主機地址

通常情況下,Redis緩存與Web應用並非部署在一台機器上,此時就需要遠程調用Redis。在application.properties中添加指定Redis所在主機及其端口號的配置,具體如下:

spring.redis.host=127.0.0.1
spring.redis.port=6379

5.啟動項目,測試緩存使用

啟動Redis服務,並啟動本地項目,在瀏覽器地址欄中輸入訪問地址http://localhost:8080/user.html,Eclipse控制台中的顯示信息如下:

2018-05-20 11:10:03.486 DEBUG 9369 --- [nio-8080-exec-8] c.z.demo.mapper.UserMapper.getAllUsers   : ==>  Preparing: select * from tb_user 
2018-05-20 11:10:03.519 DEBUG 9369 --- [nio-8080-exec-8] c.z.demo.mapper.UserMapper.getAllUsers   : ==> Parameters: 
2018-05-20 11:10:03.574 DEBUG 9369 --- [nio-8080-exec-8] c.z.demo.mapper.UserMapper.getAllUsers   : <==      Total: 3

可以看到,程序已經執行了SELECT語句,並查詢出3條數據。此時如果刷新瀏覽器,系統將會再次執行查詢操作。在沒有使用Redis緩存之前,每刷新一次頁面,都會執行一次查詢數據庫的操作,添加緩存后,會發現控制台中只出現了一次查詢語句(我這里好像什么都沒有出現),這也就說明所配置的Redis緩存已經生效。

二、刪除Redis緩存

Redis中的數據不會一直存在,當執行添加、更新和刪除操作后,數據庫中的數據會發生變化,而Redis緩存中的數據同樣也需要進行相應的變化。為了保證Redis緩存中的數據與數據庫中的一致,通常需要在執行添加、更新和刪除操作之前清除緩存,然后在下一次執行查詢操作時,將新的數據存儲到Redis緩存中。
要實現清楚緩存的功能很簡單,只需在相應方法中使用@CacheEvict注解即可。以刪除用戶為例,在用戶業務邏輯類的deleteUser()方法上添加@CacheEvict注解信息,如下:
UserServiceImpl.java:

	// 刪除用戶
	@Override
	@CacheEvict(value="UserCache",key="'user.getAllUsers'")
	public void deleteUser(Integer id) {
		System.out.println("刪除了id為 " + id + " 的用戶");
		this.UserMapper.delete(id);
	}

啟動項目后,進入http://localhost:8080/user/delete/1就會刪除id=1的用戶信息。
eclipse控制台的信息如下:

2018-05-20 13:07:45.709 DEBUG 13739 --- [nio-8080-exec-1] c.zifeiy.demo.mapper.UserMapper.delete   : ==>  Preparing: DELETE FROM tb_user WHERE id=? 
2018-05-20 13:07:45.761 DEBUG 13739 --- [nio-8080-exec-1] c.zifeiy.demo.mapper.UserMapper.delete   : ==> Parameters: 1(Integer)
2018-05-20 13:07:45.773 DEBUG 13739 --- [nio-8080-exec-1] c.zifeiy.demo.mapper.UserMapper.delete   : <==    Updates: 1

同時Redis中的緩存也會被相應地刪除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM