Redis(Remote Dictionary Server) 기본 정리

  • 고성능의 키-값(key-value) 저장소로, 거대 맵(Map)데이터 저장소 형태를 가지고 데이터를 메모리에 저장하여 빠른 읽기와 쓰기를 지원.(sql 쿼리 사용 불필요)
  • 맵 데이터 저장소 형태이기 때문에  매우 빠르다. (데이터 위치 확인이 매우 빠름)
    • 기본적으로 해시함수를 사용한다. + 해시 테이블 사용
    • 키를 생성하면 생성 직후 해시값과 그 키에 대한 물리적인 주소를 매핑시켜놓는다.
  • 데이터 베이스 16개가 자동으로 생성.
    • 기본 접속 시 0번 데이터 베이스로 접속
    • 1번데이터베이스 접속시 : select 1
    • 0-15번 까지 데이터 베이스가 있음
    • 총 16개 (추가가능)
  • 주로 캐싱, 세션관리, DB 동시성 제어 등에서 다양한 목적으로 사용
    • 세션 (로그인 인증값)
      • 난수값을 저장해놓고 해당 난수값이 있는지 없는지 확인하여 사용가능
      • 세션관리 이유 : 굉장이 빈번하게 조회가 되기 때문에 빠르게 처리할 수 있는 redis에 올려둠
    • DB 동시성 제어
      • RDBMS에서 동시성 제어로 A가 select문으로 조회 중일 때 B는 A로인해 락이 걸려서 조회를 못하여 속도가 느려지는 상황에서 redis를 활용하면 성능이 좀 빨라진다.
  • 싱글 스레드 구조로 동시성 이슈 발생 X
    • redis는 비동기적으로 동작하다보니까 싱글스레드여도 빠르게 처리 가능하다.
    • 동기 : 사용자의 request부터 → spring의 thread 1개 할당 → db 조회 → 사용자의 요청에 맞는 데이터 조립 → response
    • 비동기 : 작업을 thread가 할당처리 → 모두 다 완료될 때까지 기다리지 않는다. → 작업의 처리를 위임하고, 다른 사용자의 요청을 받으러 갑니다. (처리결과를 기다리지 않고 다음 처리를 위해 움직이기 때문에 동기적 방법보다 비동기가 더 빠르다.)
  • redis 자료구조
    • Strings : 텍스트나 숫자 저장
      • 키에 값을 설정 : SET key value
      • 키의 값을 가져옴 : GET key
      • NX 문법 : set key value NX
      • EX 문법 : 만료시간, set key value ex 10
    • list : 순서가 있다, 중복이 가능
      • 데이터 추가 : LPUSH, RPUSH
      • 데이터 추출 : LPOP key, RPOP key
      • 데이터 개수 : LLEN key
      • member 조회 : lrange key명 start end, 만약 끝까지 조회면 end에 -1
        • ex) lrange my_classes_name 0 -1
    • TTL(Time To Live), 즉 유효시간 사용
      • 만료시간 지정
        • EXPIRE mykey 3600
        • 여기서 만료시간은 초단위
      • ttl [key]
        • 남은 만료시간 확인
    • set : 순서가 없고, 중복이 없다. ⇒ 집합개념
      • set(집합)에 멤버 추가
        • SADD myset membe
      • set(집합)의 모든 멤버 반환
        • SMEMBERS myset
      • set의 멤버 개수 변환
        • SCARD myset
      • 특정 멤버 삭제
        • SREM myset member1 member2
    • zset : 사용자의 점수나 순위를 관리하는데 사용
      • 순서를 어떤 기준으로 보장하고 싶을 때
      • ZADD key score member
        • score : 멤버를 정렬하는데 사용되는 점수
        • member형식을 json 형식으로도 가능
          • ex) zadd my_key 1 ‘{”hello”:”world”}’
      • ZREM key member
        • 특정키의 특정멤버 삭제
      • ZRANK key member
        • 특정멤버의 위치 정보 반환
      • ZRANGE key명 0 -1
        • score기준 오름차순 조회
      • ZREVRANGE stock_prices 0 -1
        • score기준 내림차순 조회
  • 주요 명령어
    • 모든 key값 조회
      • keys *
    • 키 삭제
      • DEL key명
      • 전체 key 삭제는 FLUSHDB(현재 데이터베이스의 모든 key 삭제)