ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • memcacedClient.set에 대해
    flash 2024. 3. 31. 21:46

     

    게시글을 작성하면 열람권한을 2시간을 얻는 로직을 구현해야한다.

     

    원래는 redis를 사용하려 하였으나, 라이센스 문제가 생겨 memcached를 사용하게 되었고

     

    로직을 완성하기 위해 memcached를 공부한 내용들을 포스팅하며 프로젝트를 진행하고자 한다.

     

     

     

    게시글을 작성하면 userId를 key값으로 사용하고 

     

    memcachedClient.set 메서드를 사용하여 서버에 데이터를 저장하였다.

     

     

    key 는 저장할 데이터에 대한 고유한 키이며, 나중에 이 키를 사용해서 데이터에 접근할 수 있다.

    exp는 만료시간이며  memcached에 데이터가 보관될 시간을 초 단위로 지정한다.   0 설정 시 만료되지 않는다.

    value는 저장할 데이터 객체이며 나중에 해당 키를 사용해서 검색할 수 있다.

     

     

    1. set메서드는 동기적으로 실행되어, 메서드 호출이 끝날때까지 호출 스레드가 블로킹 된다.

    2. 저장하려는 객체는 직렬화가 가능해야한다.  memcached는 네트워크를 통해 데이터가 전송되기 때문에, 객체를 바이트 스트림으로 변환할 수 있어야한다.

     

     

     

    그리고 userId를 get으로 가져와서 2시간 미만이면 2시간을 추가하는 로직을 쓰는데

     

    Object currentExpirationObj = memcachedClient.get(userId);

     

    왜 Object 타입을 받아야하는지 의문이 생겼다.

     

    Object로 받아야하는 이유는  Memcached의 get 메서드가 제네릭 타입을 사용하지 않기 때문이다.

    그래서 기존 타입 정보가 없이 Object로 반환하기 때문에  반환된 객체를 형변환해서 사용해야 한다.

     

    long, int, String 등 특정 타입으로 직접 받지 않는 이유는 get이 어떤 타입의 객체도 반환할 수 있기 때문에

    반환되는 객체의 실제 타입을 먼저 알 수 없다.

    잘못하면 ClassCastException이 발생할 수 있기 때문.

     

     

     

     

    'flash' 카테고리의 다른 글

    memcached 설치  (0) 2024.03.30
    flash project (1)  (0) 2024.03.17
Designed by Tistory.