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 redisredis client
$ docker exec -it myredis /bin/bash --> docker redis 컨테이너 실행
# redis-cli --> redis client 실행
> set mykey "hello"
> get mykey
"hello"데이터 구조체

String
String
- 기본형은 String
- 정수/실수형 없음
- 최대 512MB
- 이진데이터 저장 가능
string 입출력
> set mykey "hello"
> get mykey
"hello"
> del mykeymulti 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) 11SET [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) 12347List [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 보안
- 단일 인터페이스 바인딩 : redis.conf 파일에 bind 추가
bind 127.0.0.1- 인증 : AUTH 명령으로 암호 설정
- redis는 암호화 지원하지않으므로, spiped 와 같은 SSL 프록시 사용
- 특정명령 비활성화 : redis.conf에 명령을 변경하거나 비활성화
rename-command CONFIG asdfasdfasdfasdfasdfasdfasdf
rename-command CONFIG ""Redis용 Amazon ElastiCache 보안
- 데이터 보안 : https://amzn.to/2GqtG7R
- 인증 및 액세스 제어 : https://amzn.to/2QZkHyM
운영 명령어
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
- Lecttuce(레터스) : java용 Redis client
- Jedis 업데이트가 없음






