Spring Boot与Redis的缓存一致性问题
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@Service
public class CachingService {
// 假设这是一个更新数据库中用户信息的方法
public void updateUser(String userId, String newEmail) {
// 数据库更新逻辑...
}
// 使用@CachePut来确保缓存的同步更新
@CachePut(value = "users", key = "#userId")
public User updateUserCache(String userId, String newEmail) {
updateUser(userId, newEmail); // 更新数据库
return getUser(userId); // 返回更新后的用户对象
}
// 使用@Cacheable来缓存用户信息
@Cacheable(value = "users", key = "#userId")
public User getUser(String userId) {
// 数据库查询逻辑...
return new User(userId, "user@example.com");
}
}
这个示例中,updateUser
方法用于更新用户数据库中的邮箱地址,updateUserCache
方法通过@CachePut
注解确保每次更新数据库后,缓存中的对应用户对象也会被更新。getUser
方法使用@Cacheable
注解来从缓存中获取用户信息,如果缓存中没有,则会执行方法内的逻辑来查询数据库并返回结果,同时将结果存入缓存。这样,就确保了数据库与缓存之间的数据一致性。
评论已关闭