본문 바로가기
Delvelopment/Redis

REDIS Key Evict 하는 두가지 방법 (키 삭제, 키 초기화)

by 제제킴 2020. 3. 13.
반응형

 

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 서버에 영향을 끼칠 수 있으니 조심하길 바란다.

 

 

반응형

댓글