Skipalong's tistory
240213 TIL - CacheEvict 본문
전 TIL에 캐시를 저장해두고 캐시를 만료시키거나 삭제시켜주는 작업을 해두지 않으면 데이터의 변동이 있어도 캐싱된 데이터를 그대로 불러오게 되므로 잘못된 데이터를 가져오게 된다. 그래서 캐시를 만료시키거나 삭제해주는 작업을 해두는 것이 중요하다.
우선 만료시키는 방법은 전에 올린 CacheConfig 클래스에서 Map<String, RedisCacheConfiguration> 형태로 CacheName을
키로 사용해서 Value 에 entryTtl(Duration.of~) 형식으로 값을 주어 CacheName별로 만료시간을 따로 정할 수 있다.
@Override
@CacheEvict(cacheNames = CacheNames.FEED, key = "#user.userId")
public void uploadPost(User user, String content, List<MultipartFile> images) {
PostUploadInfo postUploadInfo = new PostUploadInfo(user.getUserId(), content);
postMapper.insertPost(postUploadInfo);
int postId = postMapper.getLatestPostId(user.getUserId());
if (!images.isEmpty()) {
if (images.size() == 1) {
FileInfo fileInfo = fileService.uploadFile(images.get(0), user.getUserId());
fileService.uploadImage(postId, fileInfo);
} else {
List<FileInfo> fileInfos = fileService.uploadFiles(images, user.getUserId());
fileService.uploadImages(postId, fileInfos);
}
}
}
또 이런식으로 @CacheEvict 어노테이션 는 지정된 키에 해당하는 캐시를 삭제한다. 만약 @CacheEvict 을 적용하지 않고 데이터를 수정한다면 데이터베이스의 데이터는 수정되지만 캐시 저장소의 데이터는 수정 전의 상태로 남아있게 된다. 이때 캐시가 만료되기 전에 수정된 데이터를 조회하면 데이터 불일치가 발생하므로 데이터 변경이 일어난다면 기존 캐시 데이터를 제거해야 한다.
@Override
@Caching(evict = {@CacheEvict(cacheNames = CacheNames.POST, key = "#postId"),
@CacheEvict(cacheNames = CacheNames.FEED, key = "#user.userId")})
public void updatePost(User user, int postId, String content) throws AccessException{
boolean isAuthorizedOnPost = postMapper.isAuthorizedOnPost(user.getUserId(), postId);
if (isAuthorizedOnPost) {
postMapper.updatePost(postId, content);
} else {
throw new AccessException("해당 게시물의 수정 권한이 없습니다.");
}
}
@Caching 은 여러 캐싱 작업을 한 번에 적용시키기 위한 어노테이션이다. 주로 조건식이나 표현식이 다른 경우 혹은 여러 종류의 캐시에 함께 작업을 지정해야 하는 경우 사용하게 된다.
이렇게 캐싱을 할 때는 캐싱작업을 할 때는 캐싱대상을 적절히 설정하는 것부터 해당 캐시를 언제 만료시킬지, 언제 삭제시킬지 등에 대한 적절한 전략이 굉장히 중요하다. 적절히 사용한다면 매우 효율적인 기술이 될 것 같다. 이제 캠프의 정규과정이 모두 끝났다. 과정동안 많이 성장했지만 배우면 배울수록 부족함을 많이 느끼고 배움에 대한 갈증을 느끼는 것 같다. 앞으로도 지금까지 해온 것 처럼 느슨해지지말고 정진해서 취업이라는 목표를 이루어야겠다.
'TIL' 카테고리의 다른 글
240215 TIL - RDBMS의 정규화 (0) | 2024.02.16 |
---|---|
240214 TIL - 대용량트래픽 처리법 (0) | 2024.02.15 |
240208 TIL - 최종프로젝트 마무리 (1) | 2024.02.09 |
240207 TIL - Cache (0) | 2024.02.08 |
240206 TIL - Cache (1) | 2024.02.07 |