一、介紹
1、Java開發,都會使用了Spring框架,可以使用spring-data-redis開源庫來簡化Redis操作的代碼邏輯,做到最大程度的業務聚焦。
2、創建緩衝
創建(Create)一個POJO實例的時候,對POJO實例進行分佈式緩存,一般以“緩存前綴+ID”爲緩存的Key鍵,POJO對象爲緩存的Value值,直接緩存POJO的二進制字節。前提是:POJO必須可序列化,實現java.io.Serializable空接口。如果POJO不可序列化,也是可以緩存的,但是必須自己實現序列化的方式,例如使用JSON方式序列化。
3、查詢緩衝
查詢緩存在查詢(Retrieve)一個POJO實例的時候,首先應該根據POJO緩存的Key鍵,從Redis緩存中返回結果。如果不存在,纔去查詢數據庫,並且能夠將數據庫的結果緩存起來。
4、更新緩衝
在更新(Update)一個POJO實例的時候,既需要更新數據庫的POJO數據記錄,也需要更新POJO的緩存記錄。
5、刪除緩衝
在刪除(Delete)一個POJO實例的時候,既需要刪除數據庫的POJO數據記錄,也需要刪除POJO的緩存記錄。
6、RedisConnection的API命令操作的對象都是字節級別的Key鍵和Value值。spring-data-redis庫在RedisConnection連接類的基礎上,針對不同的緩存類型,設計了五大數據類型的命令API集合,用於完成不同類型的數據緩存操作,並封裝在RedisTemplate模板類中。
- ValueOperations字符串類型操作API集合
- ListOperations列表類型操作API集合
- SetOperations集合類型操作API集合
- ZSetOperations有序集合類型API集合
- HashOperations哈希類型操作API集合
7、pom.xml依賴
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
8、緩衝增刪該查
package com.example.actuatordemo.redis.rediscache;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
/**
* @author haoxiansheng
*/
@Service
@Slf4j
public class UserServiceImpl implements UserService {
public static final String USER_UID_PREFIX = "user:uid";
public static final long CASHE_LONG = 60*4; //4分中
@Autowired
private RedisCacheOperationService redisCacheOperationService;
@Override
public Object saveUser(User user) {
// 先更新到數據庫,然後在更新緩衝
// 保存到緩衝
String key = USER_UID_PREFIX + user.getUid();
log.info("user=>", user);
redisCacheOperationService.setRedisTemplate(key, user, CASHE_LONG);
return null;
}
@Override
public Optional<User> getUser(Long uid) {
// 先去緩衝拿、緩衝沒有再去數據庫那
return Optional.empty();
}
@Override
public Object deleteUser(Long uid) {
// 先刪除緩衝,再更新數據庫
return null;
}
}
9、緩衝和數據庫的先後設計
package com.example.actuatordemo.redis.rediscache;
import java.util.Optional;
/**
* @author haoxiansheng
*/
public interface UserService {
// 創建、更新
Object saveUser(User user);
// 查詢
Optional<User> getUser(Long uid);
// 刪除
Object deleteUser(Long uid);
}
package com.example.actuatordemo.redis.rediscache;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
/**
* @author haoxiansheng
*/
@Service
@Slf4j
public class UserServiceImpl implements UserService {
public static final String USER_UID_PREFIX = "user:uid";
public static final long CASHE_LONG = 60*4; //4分中
@Autowired
private RedisCacheOperationService redisCacheOperationService;
@Override
public Object saveUser(User user) {
// 先更新到數據庫,然後在更新緩衝
// 保存到緩衝
String key = USER_UID_PREFIX + user.getUid();
log.info("user=>", user);
redisCacheOperationService.setRedisTemplate(key, user, CASHE_LONG);
return null;
}
@Override
public Optional<User> getUser(Long uid) {
// 先去緩衝拿、緩衝沒有再去數據庫那
return Optional.empty();
}
@Override
public Object deleteUser(Long uid) {
// 先刪除緩衝,再更新數據庫
return null;
}
}