REDIS

REDIS 개요

  • REmote DIctionary System
  • key-value store
  • 원격 cache : network를 통해 get / set

Windows Redis client

Redis 실습용 설치

참고 : https://jistol.github.io/docker/2017/09/01/docker-redis/

docker로 설치

$ docker pull redis:latest
$ docker run --name myredis -d redis

redis client

$ docker exec -it myredis /bin/bash  --> docker redis 컨테이너 실행
# redis-cli  --> redis client 실행
> set mykey "hello"
> get mykey
"hello"

데이터 구조체

참고 : http://bcho.tistory.com/654

Alt text

String

String

  • 기본형은 String
  • 정수/실수형 없음
  • 최대 512MB
  • 이진데이터 저장 가능

string 입출력

> set mykey "hello"
> get mykey
"hello"
> del mykey

multi set

> mset value0 10 value2 20
> mget value1 value2
1) "10"
2) "20"

증가/감소

공통으로 쓰는 값이기 때문에 직접연산한 값을 저장하는것 보다 안전

> set mykey "10"
> DECRBY mykey 3
(integer) 7
> INCRBY mykey 3
(integer) 10
> DECR mykey
(integer) 9
> INCR mykey
(integer) 10

문자열길이

> set mykey "Hello world"
> STRLEN mykey
(integer) 11

SET [S]

특징

  • string 집합
  • 중복허용 안됨
  • 순서X
  • 최대 42억개 (성능상 수천만개 저장 권장)

저장

> sadd myset "hello"
(integer) 1            ---> 1개 저장
> sadd myset "world"
(integer) 1            ---> 1개 저장
> sadd myset "world"
(integer) 0            ---> 0개 저장 (중복되어 저장 안됨)

원소

> smembers myset  --> set members (멤버 보기)
1) "hello"
2) "world"

> scard myset   --> set cardinality (원소의 갯수)
(integer) 2

> srem myset "hello"   --> set remove (제거)
(integer) 1            --> 1개 제거

> sismember myset "hello"   --> is member ("hello" 는 set의 멤버인가?)
(integer) 0                 --> false는 0, true는 1

집합의 연산

> sadd key1 "A"
> sadd key1 "B"
> sadd key1 "C"

> sadd key2 "B"
> sadd key2 "C"
> sadd key2 "D"

> sunion key1 key2   --> union (합집합)
1) "B"
2) "C"
3) "A"
4) "D"

> sinter key1 key2   --> inter connection (교집합)
1) "B"
2) "C"

> sdiff key1 key2   --> diff : key1 - key2 (차집합)
1) "A"

Sorted Set [Z]

특징

  • value에 score가 추가되어, score 순으로 정렬
  • 범위 검색 가능
  • min/max 값 검색 가능

입력

> zadd myzset 1 "one"  --> 1은 score, "one"은 value
> zadd myzset 1 "uno" 2 "two" 3 "three"

범위검색

> zrange myzset 0 -1 withscores --> 0부터 끝(-1)까지 스코어 포함하여 범위검색
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"

등수

> zrank myzset "two"   --> "two"의 rank(등수)
(integer) 2            --> index가 2인 원소,  0부터 시작이라서 3번째 원소임

> zrank myzset "one"
(integer) 0

> zrank myzset "uno"
(integer) 1            --> "one"과 같은 스코어이지만 다른 등수가 나옴

스코어

> zscore myzset "one"
"1"

Hash [H]

특징

  • Field와 String의 쌍으로 저장
  • java의 HashMap과 비슷
  • 최대 42억개 저장

입출력

> hmset myhash field1 "hello" field2 "12345"    --> multi set 으로 저장, field1과 field2 저장
> hget myhash field1
"hello"

키/값

> hkeys myhash
1) "field1"
2) "field2"

> hvals myhash
1) "hello"
2) "12345"

삭제

> hdel myhash field1
(integer) 1
> hdel myhash field1
(nil) 

연산

> hget myhash field2
"12345"
> hincreby myhash field2 2
(integer) 12347

List [L:left, R:Right]

특징

  • list 앞/뒤/특정위치에서 (push / pop)

왼쪽 넣기

> lpush mylist "world"
> lpush mylist "hell"
> lrange mylist 0 -1    -------> 0부터 끝(-1)까지 범위 검색
1) "hello"
2) "world"

> lpop mylist
1) "hello"
> lrange mylist 0 -1
1) "world"

특정위치 넣기

> linsert mylist BEFORE "world" "hello"
> lrange mylist 0 -1
1) "hello"
2) "world"

> lset mylist 0 "kimstar"
> lrange mylist 0 -1
1) "kimstar"
2) "world"

Redis 보안

참고 : https://redis.io/topics/security

  • 단일 인터페이스 바인딩 : redis.conf 파일에 bind 추가
bind 127.0.0.1
  • 인증 : AUTH 명령으로 암호 설정
  • redis는 암호화 지원하지않으므로, spiped 와 같은 SSL 프록시 사용
  • 특정명령 비활성화 : redis.conf에 명령을 변경하거나 비활성화
rename-command CONFIG asdfasdfasdfasdfasdfasdfasdf
rename-command CONFIG ""

Redis용 Amazon ElastiCache 보안

운영 명령어

command : https://redis.io/commands
참고 : http://redisgate.kr/redis/introduction/redis_intro.php
참고 : http://semode.tistory.com/152

  • info : redis 버전, 운영시스템, 접속된 사용자, 메모리, 복제 등 정보 확인
  • info memory : 메모리 정보
  • info stats : 통계 정보
  • info clients : client 정보
  • dbsize : keys 수
  • debug segment : redis 서버 crash
  • monitor : 처리되는 명령어 실시간 확인 (주의 : redis 성능 저하 유발)
  • client list : 접속되어 있는 client list
  • client setname 변경할이름 : 접속되는 client 이름 변경
  • client kill addr 127.0.0.1:123423 : address로 client kill
  • client kill id 22 : id 22의 client kill
  • client kill type slave : slave 타입의 client kill
  • flushall : 전체 keys 삭제
  • randomkey : 임의의 key 반환
  • expire key1 60 : 60초후 key1 삭제
  • expireat key1 13424324 : unixtime 기준 key1 삭제
  • TTL test1 : test1키의 expire 되기전 남은 시간 (초, TTL이 없으면 -1, key가 없으면 -2)
  • PTTL test1 : test1키의 expire 되기전 남은 시간 (밀리초)
  • persist test1 : test1키에 timeout 제거
  • setex key1 30 test1 : set + expire 명령어
  • del key1 key2 : key1, key2 삭제
  • exists key1 : key1키가 존재하는지 확인
  • ping : redis 서버 상태 체크, 응답은 pong
  • auth 비밀번호 : client 인증
  • script kill : 수행중인 lua script 수행 중단 (no write 일때 가능, 중단이 안되면 shutdown nosave)
  • shutdown save : 모든 client를 중단하고 data 저장후 redis server 다운
  • shutdown nosave : : 모든 client를 중단하고 data 저장없이 redis server 다운
  • object encoding test1 : test1키의 encoding 방식 확인 (응답값 : string, ziplist..)

Lecttuce

참고 : http://redisgate.kr/redis/clients/lettuce_intro.php
참고 : https://jojoldu.tistory.com/297

Notice

  • 이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용할 수 있습니다. 크리에이티브 커먼즈 라이선스
  • 저작권과 관련된 파일요청 및 작업요청을 받지 않습니다.
  • 댓글에 대한 답변은 늦을 수도 있습니다.
  • 답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다