[DB] 레디스 (Redis)

애이용·2021년 1월 18일
0

database

목록 보기
1/3

NoSQL 먼저 알아보고, Redis를 보자


NoSQL

  • No only SQL
  • SQL만을 사용하지 않는 DBMS, 비관계형 데이터베이스
    (데이터 관계를 정의하지 않고 사용하는 디비)
  • NoSQL은 정해진 규격이 없고, Column이 지정되지 않아 자유롭게 채울 수 있고, 분산처리도 쉬움
  • 트랜잭션 X
  • 문서형으론 MongoDB, key-value형으로는 Redis 등이 있음

SQL(RDS)와의 비교

NoSQLSQL
CollectionTable
DocumentRow
Key,FieldColumn

RDS(Relational Database Service)와의 차이점

: 스키마가 없으므로, 하나의 collection에 있는 Documens들은 각각 다른 field를 가질 수 있음
: 함께 사용하는 객체일 경우, 하나의 document에 합쳐서 사용(ex) 게시물 & 댓글)
: SQL의 JOIN을 사용하지 않음

NoSQL을 쓰는 이유

: 초당 데이터가 수십만개씩 쌓이는 서비스가 많아지면서(온라인 서비스, 소셜 등), NoSQL을 사용하는 경우가 많아지고 있음
: 데이터의 분산처리, 빠른 쓰기 및 데이터의 안정성이 필요할 때 사용
: 특정 서버에 장애가 발생했을 때도 데이터 유실이나 서비스 중지가 없는 형태의 구조


Redis 알아보자

  • Redis(Remote Dictionary Server) : 메모리 기반의 key-value 구조 데이터 관리 시스템
  • 비관계형 데이터베이스
  • 자바 자료구조와 유사한 영속적인 자료구조 제공
    (키는 자바에서 참조와 동일한 역할, 즉 객체를 식별)
  • 크게 String, Set, Sorted Set, Hash, List 데이터 형식 지원
  • 읽기 성능 증대를 위한 서버 측 복제를 지원
  • 쓰기 성능 증대를 위한 클라이언트 측 Sharding 지원

Redis의 장점

  • 리스트, 배열 데이터를 처리하는 데 유용
  • 리스트 형 데이터 입력 & 삭제가 MySQL에 비해 10배정도 빠름
  • 영속적인 데이터 보존

Redis Client & Server

레디스를 사용하려면 어딘가에서 레디스 서버를 실행하고, 레디스 클라이언트로 접속해야 함
RedisToGo - 무료 버전 서비스 사용해봄
클라이언트 - Jedis, Lettuce

Lettuce는 Netty 기반의 Redis Client로 비동기로 요청을 처리해 성능면에서 장점이 있다
Jedis 기반처럼, Pool을 별도로 사용하지 않아도 돼서 개발에 더 편함
Jedis는 Spring boot2.0부터 depracated됨
Jedis는 쓰레드에 안전하지 않음

Redis 설치

기본 포트번호 : 6379

Windows

Redis-cli 설치

MacOS

$ brew install redis
$ brew services start redis // start
$ brew services stop redis // stop

Redis 데이터 타입

methoddescription
opsForValueString을 쉽게 Serializable/Deserialize 해주는 interface
opsForListList를 쉽게 Serializable/Deserialize 해주는 interface
opsForSetSet을 쉽게 Serializable/Deserialize 해주는 interface
opsForZSetZSet을 쉽게 Serializable/Deserialize 해주는 interface
opsForHashHash를 쉽게 Serializable/Deserialize 해주는 interface

Redis-cli 명령어 알고 가자

Strings

기본 명령어 set get del

  • keys * 현재 key값들을 확인
  • get key key에 해당하는 value
  • set key value key에 value 저장
  • del key key 삭제

List(l, r)

Redis Collection 중 하나
redis Strings의 묶음 자료 구조(Quick List 사용)
기본 명령어 lpush rpush lpop rpop lrange

  • lpush key value List의 index 0(head)으로 데이터 push
  • rpush key value List의 index last로 데이터 push
  • lpop key List의 index 0 데이터 pop
  • rpop key List의 index last 데이터 pop

Set(s)

중복되지 않는 값을 데이터로 가지는 컬렉션
동일한 값 입력하면, 하나의 값만 남음
기본 명령어 sadd srem smembers scard spop

  • sadd key member set에 value 하나 추가
  • srem key member set에서 value 삭제
  • smembers key set에 속해있는 모든 member 조회
  • scard key set에 속해있는 member 개수 구함
  • spop key set에서 무작위로 member 가져옴

Sorted Set(z)

중복되지 않는 값을 데이터로 가지는 컬렉션
가중치(score)가지고 있고, 가중치에 따른 정렬된 순서를 가지고 있음
가중치가 == -> value로 sort
value 중복 X, score 중복 가능
기본 명령어 zadd zcard zrange zrangebyscore

  • zadd key score member 집합에 score, value 추가
  • zcard key 집합에 있는 member 개수 조회
  • zrange key start stop index를 기준으로 start, stop을 범위로 하여 조회
  • zrangebyscore ky min max score를 기준으로 min, max 범위로 하여 조회

Hash(h)

key - value로 이루어진 자료구조
key 하나에 field와 value 쌍을 40억개까지 저장 가능
기본 명령어 hset hget hdelv hlen hgetAll hkeys hvals

  • hset key field value key에 field와 value 쌍으로 지정
  • hget key field key에서 field로 value 가져옴
  • hdel key field key에서 field 삭제
  • hlen key field의 개수
  • hgetAll key field와 value를 모두 반환
  • hkeys key 모든 field 반환
  • hvals key 모든 value 반환

expire

지정한 시간 이후 key를 자동 삭제하는 명령어
key - value 쌍에 Time To Live(TTL) 설정 가능
expire ttl

  • expire key member second key에 ttl 설정
  • ttl key 남은 ttl을 초단위로 확인

encoding 설정

redis-cli set ker "한글"

profile
로그를 남기자 〰️

0개의 댓글