반응형
REDIS 를 사용하여 운영중 REDIS 특정 key를 삭제해야하는 경우가 있다.
redis 서버에 들어가서 특정 key를 삭제할때는 Del key명 만 입력하면된다.
Del Key명
JAVA쪽에서는 연결된 redis 의 key를 제거하는 방법이 두가지있다.
(실제 나는 evict 하는 기능을 API 프로젝트에서 작업했다.
보통 관리자가 사용하는 admin에서 data가 변경되었을때 redis key 수정이 필요하기 때문에 key를 삭제하는 것이다.
이 후 해당 key를 사용하는 페이지에 재접속하게 되면 서비스에서는 key가 재생성 될 것이다.)
1. 특정 key명을 Evict하는 방법.
2. 원하는 key 명을 조회해서 Evict하는 방법.
(다만 2번은 REDIS 설정에 따라 가능여부가 다르다. Scan은 Redis 서버에 큰 부하를 줄 수 있다.)
1. 특정 key명을 Evict 하는 방법
@Caching(evict = {
@CacheEvict(cacheManager="cacheManager", value="dev-jj", key="new String(#this.target.getRemoteCachePrefix().concat('dev-jj.dev-jj.dev-jj.service.Servicegetdev-jjList').concat(#SQ))"),
@CacheEvict(cacheManager="cacheManager", value="dev-jj", key="new String(#this.target.getRemoteCachePrefix().concat('dev-jj.dev-jj.dev-jj.service.Servicegetdev-jjInfo').concat(#SQ))")
}
public void evictKey(String SQ) {
log.debug("evictKey....................." + SQ);
}
2. 원하는 key 명을 조회회해서 Evict 하는 방법.
final ScanOptions options = ScanOptions.scanOptions().count(10).match("*"+sq+"*").build();
List<String> keys = cacheRedisTemplate.execute(new RedisCallback<List<String>>() {
public List<String> doInRedis(RedisConnection connection) throws DataAccessException {
List<String> cacheKeys = Lists.newArrayList();
Cursor<byte[]> cursor = (connection).scan(options);
while (cursor.hasNext()) {
String value = new String(cursor.next());
cacheKeys.add(value);
// System.out.println("KEYS Evict===========>>>>>>>>>" + value);
}
return cacheKeys;
}
});
cacheRedisTemplate.delete(keys);
나는 Spring FrameWork 환경에서 작업했으며, Redis와 연결되어 있는 프로젝트라면 위 명령어는 충분히 활용 가능하다.
다만 다시말하지만 key를 all scan 하는 행동은 서비스와 redis 서버에 영향을 끼칠 수 있으니 조심하길 바란다.
반응형
'Delvelopment > Redis' 카테고리의 다른 글
[REDIS] Sorted Set 명령어 정리 (0) | 2021.08.06 |
---|---|
캐시(Cache) Local Cache & Global Cache (0) | 2021.03.11 |
Redis의 자료형, 특징과 시간복잡도 그리고 클러스터 (0) | 2021.03.10 |
REDIS 명령어 (keys, Scan, get, flushall, Del 등) (0) | 2020.03.13 |
커머스서비스에서 동접자 대응을 위한 REDIS 도입기. (0) | 2020.03.13 |
댓글