Giới thiệu
Redis là viết tắt của Remote Dictionary Server. Redis là một hệ thống cơ sở dữ liệu NoSQL, lưu trữ dữ liệu theo dạng Key - Value và được lưu trên bộ nhớ RAM của Server. Cơ chế này giúp Redis đọc dữ liệu trở nên nhanh hơn nhiều lần so với đọc từ database.
Ở bài này, chúng ta sẽ tích hợp Redis Cache với Spring. Mặc dù Redis là một kho lưu trữ cấu trúc dữ liệu trong bộ nhớ nguồn mở, được sử dụng làm cơ sở dữ liệu, cache và message broker, bài này sẽ chỉ trình bày tích hợp bộ nhớ đệm cache.
Cài đặt Redis
MacOS: Sử dụng HomeBrew để cài đặt Redis
brew install redis
brew services start redis
Kiểm tra
redis-cli ping
Ubuntu: Chạy các lệnh sau
sudo apt install redis-server
sudo nano /etc/redis/redis.conf
Cập nhật supervised
supervised systemd
sudo systemctl restart redis.service
Kiểm tra
redis-cli ping
Sử dụng Redis
Project Spring
Trước tiên, chúng ta cần có một project Spring Boot hoặc các bạn có thể download project của mình ở bài trước
Xem thêm: Tạo Rest CRUD API đơn giản trong Spring Boot
Thư viện Maven
Thêm dependency vào pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Cấu hình Redis Cache
Chúng ta có thể khai báo cấu hình Redis chỉ với 3 dòng trong application.properties
# Redis
spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379
Ngoài ra, thêm annotation @EnableCaching
vào Spring Boot main class
@SpringBootApplication
@EnableCaching
public class RestfulSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(RestfulSpringBootApplication.class, args);
}
}
Cách sử dụng
Ở đây chúng ta sẽ cache dữ liệu ở Controller
@Cacheable
Chúng ta sẽ cache user theo id của user.
@GetMapping("{id}")
@Cacheable(value = "user", key = "#id")
public User findUser(@PathVariable Integer id) {
return userService.findUser(id);
}
Method findUser
sẽ lưu một user vào bộ nhớ cache được xác định bằng key id. Sau khi lưu, mỗi khi gọi nó sẽ lấy dữ liệu từ Redis mà không cần gọi vào database.
@CachePut
Cập nhật dữ liệu sử dụng @CachePut
. Một user được xác định bằng id và được cập nhật dữ liệu.
@PutMapping
@CachePut(value = "user", key = "#user.id")
public User update(@RequestBody User user) {
return userService.update(user);
}
@CacheEvict
Xoá dữ liệu khi dữ liệu trong database bị xoá sử dụng @CacheEvict
@DeleteMapping
@CacheEvict(value = "user", key = "#user.id")
public void delete(@RequestBody User user) {
userService.delete(user);
}
Lưu ý: Redis không giới hạn lưu trữ dữ liệu trên hệ thống 64bit. Tuy nhiên trên hệ thống 32bit, nó chỉ cho phép lưu tối đa 3GB dữ liệu. Khi bộ nhớ đạt giới hạn, dữ liệu cũ sẽ bị xoá và nhường chỗ cho dữ liệu mới.
Tổng kết
Trên đây là bài viết tích hợp Redis vào Spring Boot một cách cấu hình đơn giản, nhanh chóng. Chúc các bạn thành công!