안녕하세요, 케이치입니다.
지난 레디스 데이타 타입 포스팅을 보셨다면 아시겠지만 레디스는 기본적으로 다섯 가지의 데이타 타입을 지원합니다.
이번 포스팅에서는 레디스 데이타 타입 별 명령어 목록 및 기능 제 1편으로 스트링 타입에 대한 설명을 하려합니다.
레디스 스트링 타입은 제일 기본적인 타입입니다. Memcached의 유일한 데이터 타입인 스트링을 지원하기 때문에 레디스를 새로 배우는 사람들에게도 어렵지 않죠. 뭐 스트링은 모든 프로그래밍 언어에서 제공하는 개발자들이 가장 많이 사용하는 타입 중에 하나니까요.
레디스의 키가 바로 스트링이기 때문에 값을 스트링 타입으로 저장한다는 것은 하나의 스트링을 또다른 스트링에 매핑한다는 의미입니다. 스트링 데이타 타입은 정말 많은 용도로 사용될 수 있습니다. 예를들어 HTML 일부나 페이지 전체를 캐싱할 수도 있죠.
스트링 타입을 다루는 예제를 한번 보면서 더 알아보도록 하죠.
레디스 프롬프트 창에서 아래처럼 입력해보세요.
> set mykey somevalue
OK
> get mykey
"somevalue"
위 예제는 SET 명령어를 이용하여 mykey라는 키에 somevalue라는 값을 매핑시킵니다. 여기서 중요한 점은 SET 명령어는 동일한 키가 이미 존재한다면 그 키에 해당하는 값을 덮어쓴다는 것입니다. 그 값이 어떤 타입이냐는 상관없이 무조건 덮어쓰니 주의하시기 바랍니다. 다시말하면 SET 명령어는 자바 프로그래밍의 = 과 같이 특정 키에 특정 값을 할당해주는 기능을 합니다.
키에 할당할 수 있는 값은 어떠한 스트링이라도 가능합니다. 바이너리 데이타 역시 가능하죠. JPEG 이미지의 바이너리 데이타도 저장이 가능합니다. 하지만 여기서 또 중요한 점이 있습니다. 어떤 값이든 그 크기가 512MB를 넘을 수는 없다는 것이죠.
SET 명령어에 옵션을 줄 수도 있습니다. 예를들어 이미 해당 키가 존재하면 실패하도록 할 수도 있고 그 반대로 이미 키가 존재할 때에만 SET하도록 할 수도 있습니다. 아래와 같이 말이죠.
> set mykey newval nx
(nil)
> set mykey newval xx
OK
스트링이 레디스의 정말 기본적인 값을 나타내는 데이터 형식이지만 여러 실용적인 기능들이 있습니다. atomic increment 가 그 한 예입니다. atomic increment가 뭔지 잘 모르신다면 atomic이 뭘 의미하는지 찾아보시면 될겁니다. 여기서 그에 대한 설명은 하지 않겠습니다.
> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152
INCR 명령어는 스트링으로 저장된 값을 숫자형태로 변환한 뒤 1을 증가시킵니다. 그리고 그렇게 증가된 값을 다시 스트링 형태로 저장합니다. 이와 비슷하게 INCRBY, DECR 그리고 DECRBY 와 같은 명령어들을 레디스는 제공하고 있습니다. 이 명령어들은 내부적으로 모두 동일하게 동작합니다. 아주 미묘한 차이만 있을 뿐이죠.
INCR 가 atomic이라는게 무슨 의미냐구요? 여러명의 사용자가 동일한 키에 대해서 INCR명령어를 요청한다고 했을 때, 요청한 사용자들이 절대로 race condition에 빠질 수 없다라는 의미입니다. 즉, 사용자 1 이 10이라는 값을 읽고, 사용자 2 역시 동일한 키에 대해서 10이라는 값을 읽은 뒤 두 사용자가 1씩 값을 증가시켰을 때 최종 결과가 11이 될 수 없다는 것이죠. 최종 결과는 항상 무조건 절대로 12 가 된다는 것을 레디스는 보장해주고 있습니다. 쉽게말하면 값을 읽고, 1 증가하고, 다시 저장하는 과정이 모두 한명의 사용자가 요청했을 때 이루어지고 그 사이에 다른 사용자가 끼어들 수 없다는 말이죠.
이 외에도 스트링을 다루기 위한 여러 명령어들이 있습니다. GETSET 명령어는 키에 존재하는 값을 읽고 새로운 값을 세팅한뒤 읽어들인 기존값을 반환합니다. 이 명령어는 방문자수를 기록할 때 사용할 수 있겠죠. 일별로 방문자수를 기록을 해야한다면 자정이 되었을 때 GETSET 명령어로 오늘 방문자수를 읽어오고 0으로 세팅해주면 되는거죠.
여러개의 키-값 페어를 저장하거나 조회하고 싶을 때에는 MSET 와 MGET 명령어를 사용하면 됩니다.
> mset a 10 b 20 c 30
OK
> mget a b c
1) "10"
2) "20"
3) "30"
MSET은 한번에 여러 키-값 페어를 저장하는 명령어이고
MGET 은 값의 배열을 반환합니다.
레디스는 키와 관련된 여러 명령어들을 제공합니다. 키 이름 변경( 이것은 위에서 보셨죠? ), 키 목록 조회 및 존재여부 파악, 또는 삭제하기와 같은 명령어들을 말이죠.
EXISTS 명령어는 1 또는 0 을 반환합니다. 키가 존재하거나 존재하지 않을때 말이죠.
그리고 DEL 명령어는 해당 키와 그 키에 할당된 값을 삭제합니다.
> set mykey hello
OK
> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0
위 예제를 보시면 각 명령어가 어떻게 동작하는지 쉽게 이해가 되실겁니다.
이 명령어들 외에도 무수히 많은 key space 관련 명령어들이 있습니다. 위 두 명령어와 함께 자주 사용되는 명령어 중 하나가 바로 TYPE 명령어입니다. 이 명령어는 특정 키에 저장되어있는 값의 타입을 반환합니다. 아래 예제를 보시죠.
> set mykey x
OK
> type mykey
string
> del mykey
(integer) 1
> type mykey
none
이건 단지 스트링 타입 뿐만 아니라 모든 타입에 적용되는 것이긴 합니다만 다른 타입의 데이터를 얘기하기 전에 짚고 넘어가야 할 것 같습니다. 기본적으로 키에 타임아웃 시간을 설정할 수 있습니다. 설정된 타임아웃 시간이 지나면 자동으로 키는 삭제됩니다. 이때 삭제되는것은 사용자가 직접 DEL 명령어로 삭제하는 것과 완전히 동일하게 삭제가 되는 것입니다.
Redis expires 와 관련하여 아래 내용을 숙지하시기 바랍니다.
만료일시를 지정하는 방법은 아주 쉽습니다. 아래 예제를 한번 보시죠.
> set key some-value
OK
> expire key 5
(integer) 1
> get key (위 명령어를 입력하자마자 바로 실행)
"some-value"
> get key (5초 뒤에 실행)
(nil)
위 예제는 어떤 값을 저장한 뒤 5초로 만료시간을 지정해주고 두 번의 GET 을 호출할 때 만료시간에 따라 값이 조회가 되는지 안되는지를 확인해본 것입니다. 5초 뒤에 만료되라고 지정해주었으니 5초 뒤에는 nil이라고 뜨는 것을 확인할 수 있었습니다.
여기서는 EXPIRE 명령어를 이용해서 만료일시를 지정해주었는데 만약에 이 만료일시를 없애기 위해서는 PERSIST 명령어를 사용할 수 있습니다. 그리고 EXPIRE명령과 동일한 기능을 SET 명령어의 옵션을 이용해서 적용할 수도 있습니다.
> set key 100 ex 10
OK
> ttl key
(integer) 9
위 예제는 키 key에 값 100을 저장하는데 10초 후에 만료되어 파기하라는 옵션을 덧붙였습니다. 그리고나서 TTL 명령어로 키 key의 만료되기 전까지의 시간(초)을 조회를 해보니 9가 나왔네요. (참고로 TTL은 Time To Live 의 약자입니다.)
초 단위가 아닌 밀리초 단위로 설정을 하려면, PEXPIRE 와 PTTL 명령어를 참고하시면 됩니다. 또는 PEXPIRE대신 SET 명령어의 옵션을 이용할 수도 있습니다.
위 내용은 레디스 공식 문서에 나와있는 내용을 스터디 할 겸 개인적으로 번역한 내용입니다.
윈도우에서 Docker로 PostgreSQL 띄우기 (0) | 2016.11.24 |
---|---|
데이터 구조, 정렬 알고리즘 별 시간 복잡도 및 공간 복잡도 요약 표 (0) | 2016.06.29 |
[Redis] 레디스 키와 관련 명령어 (0) | 2016.06.18 |
[Redis] 레디스 데이타 타입의 종류, 예제 및 요약 설명 (0) | 2016.06.18 |
[Redis] 레디스 시작하기 (설치하기) (0) | 2016.06.17 |
Redis 에서 사용하는 key는 binary safe합니다.
바이너리 세이프 하다는 말은 키 이름으로 어떠한 바이너리 시퀀스를 사용해도 무방하다는 말입니다.
예를들어 JPEG파일을 저장하기 위한 키로 "foo"를 사용해도 됩니다.
또한 빈 스트링도 유효한 키로 인식합니다.
키와 관련된 또 다른 규칙은 아래와 같습니다:
자 그러면 이제 Redis 에서 제공하는 키 관련 명령어의 사용법 및 종류에 대해서 간단하게 알아보겠습니다.
우선 문법은 아래와 같습니다.
redis 127.0.0.1:6379> {명령어} {키}
redis 127.0.0.1:6379> SET study:redis redis OK redis 127.0.0.1:6379> DEL study:redis (integer) 1
위 예제에서 DEL, SET 은 명령어 입니다. 그리고 study:redis 가 바로 key입니다.
처음에는 SET 명령어로 study:redis라는 키에 redis라는 값을 입력을 했습니다.
그리고나서 DEL명령어로 해당 키를 삭제를 했습니다. 키를 삭제하면 키에 매핑되어있는 값에 접근할 방법이 없어지겠죠.
키를 삭제할 때 키가 존재하고 정상적으로 삭제가 되었다면 (integer) 1 가 출력될 것이고, 아니면 (integer) 0 가 출력될 것입니다.
아래 테이블은 키와 관련된 기본적인 명령어를 몇 개만 간추려 본 것입니다.:
No. | 명령어 및 설명 |
---|---|
1 | DEL key 이 명령어는 키가 존재한다면 삭제를 합니다 |
2 | DUMP key |
3 | EXISTS key |
4 | EXPIRE key seconds |
5 | EXPIREAT key timestamp |
6 | PEXPIRE key milliseconds |
7 | PEXPIREAT key milliseconds-timestamp |
8 | KEYS pattern |
9 | MOVE key db |
10 | PERSIST key |
11 | PTTL key |
12 | TTL key |
13 | RANDOMKEY 랜덤키 하나를 반환합니다. |
14 | RENAME key newkey |
15 | RENAMENX key newkey 키 이름을 새로운 키로 변경합니다. (단, 새로운 키와 동일한 이름의 키가 존재하지 않을 경우에만) |
16 | TYPE key |
데이터 구조, 정렬 알고리즘 별 시간 복잡도 및 공간 복잡도 요약 표 (0) | 2016.06.29 |
---|---|
[Redis] 레디스 데이타 타입 별 명령어 #1 - String 편 (0) | 2016.06.18 |
[Redis] 레디스 데이타 타입의 종류, 예제 및 요약 설명 (0) | 2016.06.18 |
[Redis] 레디스 시작하기 (설치하기) (0) | 2016.06.17 |
The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path (0) | 2016.06.12 |
1. Log on to the database as system administrator
2. Set the number of processes to be desired value <num_processes>
3. Shutdown the database
4. Startup the database
5. Check the changes have taken effect.
출처 : http://knowledgebase.progress.com/articles/Article/P164971
[오라클/oracle] 특수기호가 들어간 문장 insert (0) | 2016.06.11 |
---|---|
Cent OS 6.2에 Oracle 11gR2 설치시 커널 파라미터 및 리소스 리미트 설정 (0) | 2016.06.11 |
[오라클/Oracle] 특정 사용자 소유의 테이블 별 사용량 확인 쿼리 (0) | 2016.06.11 |
ORA-01157: cannot identify/lock data file (0) | 2015.06.10 |
오라클 테이블 전체 한번에 삭제하기 프로시져 (0) | 2015.06.10 |
요새는 거의 쓰이지 않고있는 Dos 명령어를 쓸 일이 있어서 구글링해서 썼는데 기록으로 남겨봅니다.
아래 명령어는
dir명령어를 이용해서 C: 드라이브 하위에 있는 디렉토리 목록을 뽑은 뒤
findstr을 이용해서 \bin\ 디렉토리를 포함하는 목록만 추출한 뒤에
.svn 으로 디렉토리명이 시작하는 것들은 제외시키고
그렇게 뽑은 명령어를 auxclasspath.txt파일로 저장
을 하는 명령어입니다.
조금만 바꾸면 여러분들이 원하는 파일만 추출이 가능합니다.
C:\> dir /a:d /s/b | findstr "\\bin\\" | findstr /v /i "\.svn" > auxclasspath.txt
하나씩 뜯어볼까요?
1) dir /a:d /s/b
- 현재 디렉토리 하위의 디렉토리를 출력합니다.
2) findstr "\\bin\\"
- 하위 디렉토리 중에 bin 이라는 이름을 가진 디렉토리를 포함하고있는 경로만 뽑아냅니다.
( 이 명령어가 실제로 하는 일은 특정 스트링을 찾는 것입니다. )
3) findstr /v /i "\.svn"
- 위 디렉토리 중 .svn 으로 디렉토리명이 시작하는 목록은 제외시키고 출력합니다.
4) > auxclasspath.txt
- 지금까지 나온 목록을 auxclasspath.txt 파일로 저장합니다.
윈도우에서 which java 처럼 명령어 위치 확인하기 (0) | 2017.11.18 |
---|---|
윈도우에서 특정 포트를 사용중인 프로세스 중지하기 (0) | 2017.11.14 |
cmd창의 코드 페이지 변경하기 (0) | 2015.08.07 |
SonarQube 정적분석 툴 설치 및 사용하기 (0) | 2015.08.07 |
SonarQube 서버 실행시 메모리 부족 오류 (0) | 2015.08.06 |
깔끔하게 정리되어있는 자료가 있어서 공유합니다.
top 명령 실행시 추가할 수 있는 옵션
* (top) -d [sec]: 설정된 초단위로 Refresh
* (top) -c : command뒤에 인자값 표시
top 명령 실행 후 사용할 수 있는 옵션
* shift + t : 실행된 시간이 큰 순서로 정렬
* shift + m : 메모리 사용량이 큰 순서로 정렬
* shift + p : cpu 사용량이 큰 순서로 정렬
* k : Process 종료
o k 입력 후 종료할 PID를 입력한다
o signal을 입력하라 표시되면 9를 넣어준다
* c : 명령 인자 표시 / 비표시
* l(소 문자엘) : uptime line(첫번째 행)을 표시 / 비표시
* space bar : Refresh
* u : 입력한 유저 소유의 Process만 표시
o which user: 와 같이 유저를 입력하라 표시될때 User를 입력
o blank(공백) 입력시 모두 표시
* shift + b : 상단의 uptime 및 기타 정보값을 블락선택해 표시
* f : 화면에 표시될 프로세스 관련 항목 설정
top 명령 실행 후 화면
세부 정보 필드별 항목
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
* PID : 프로세스 ID (PID)
* USER : 프로세스를 실행시킨 사용자 ID
* PRI : 프로세스의 우선순위 (priority)
* NI : NICE 값. 일의 nice value값이다. 마이너스를 가지는 nice value는 우선순위가 높음.
* VIRT : 가상 메모리의 사용량(SWAP+RES)
* RES : 현재 페이지가 상주하고 있는 크기(Resident Size)
* SHR : 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합.
* S : 프로세스의 상태 [ S(sleeping), R(running), W(swapped out process), Z(zombies) ]
* %CPU : 프로세스가 사용하는 CPU의 사용율
* %MEM : 프로세스가 사용하는 메모리의 사용율
* COMMAND : 실행된 명령어
출처 : http://faq.hostway.co.kr/?mid=Linux_ETC&page=7&document_srl=1441
[리눅스] find 와 wc를 이용한 하위 디렉토리 모든 파일 갯수 구하기 (0) | 2015.10.14 |
---|---|
[리눅스] 정규표현식을 이용한 파일 삭제 (0) | 2015.10.14 |
CentOS 6 리눅스에서 alternatives를 이용한 기본 자바 설정 (0) | 2015.06.11 |
리눅스 서버의 플랫폼 확인하기 ( 32bit? 64bit ? ) (0) | 2015.06.09 |
crond를 이용한 서버에서 원격지로 자동백업하기 (0) | 2015.04.20 |
1. 나 자신이 가지고 있는 테이블을 조회하고 싶다면
select * from user_tables;
2. dba권한을 가지고 있는 사용자가 다른 사용자의 테이블을 조회하고 싶다면
select * from dba_tables where owner='사용자ID';
[오라클/oracle] 계정 생성/삭제, 권한, 테이블스페이스 지정 (0) | 2015.04.20 |
---|---|
[오라클/oracle] exp, imp를 이용한 백업 및 복원 (0) | 2015.04.20 |
getString not implemented for class oracle.jdbc.driver.T4CBlobAccessor (0) | 2015.04.20 |
ORA-00917: 누락된 콤마 (0) | 2015.04.20 |
테이블 컬럼 순서 바꾸기 ( Changing Column Order ) (0) | 2015.04.20 |
Working with files | |
Vim command | Action |
:e filename | Open a new file. You can use the Tab key for automatic file name completion, just like at the shell command prompt. |
:w filename | Save changes to a file. If you don't specify a file name, Vim saves as the file name you were editing. For saving the file under a different name, specify the file name. |
:q | Quit Vim. If you have unsaved changes, Vim refuses to exit. |
:q! | Exit Vim without saving changes. |
:wq | Write the file and exit. |
:x | Almost the same as :wq, write the file and exit if you've made changes to the file. If you haven't made any changes to the file, Vim exits without writing the file. |
Moving around in the file | |
These Vim commands and keys work both in command mode and visual mode. | |
Vim command | Action |
j or Up Arrow | Move the cursor up one line. |
k or Down Arrow | Down one line. |
h or Left Arrow | Left one character. |
l or Right Arrow | Right one character. |
e | To the end of a word. |
E | To the end of a whitespace-delimited word. |
b | To the beginning of a word. |
B | To the beginning of a whitespace-delimited word. |
0 | To the beginning of a line. |
^ | To the first non-whitespace character of a line. |
$ | To the end of a line. |
H | To the first line of the screen. |
M | To the middle line of the screen. |
L | To the the last line of the screen. |
:n | Jump to line number n. For example, to jump to line 42, you'd type :42 |
Inserting and overwriting text | |
Vim command | Action |
i | Insert before cursor. |
I | Insert to the start of the current line. |
a | Append after cursor. |
A | Append to the end of the current line. |
o | Open a new line below and insert. |
O | Open a new line above and insert. |
C | Change the rest of the current line. |
r | Overwrite one character. After overwriting the single character, go back to command mode. |
R | Enter insert mode but replace characters rather than inserting. |
The ESC key | Exit insert/overwrite mode and go back to command mode. |
Deleting text | |
Vim command | Action |
x | Delete characters under the cursor. |
X | Delete characters before the cursor. |
dd or :d | Delete the current line. |
Entering visual mode | |
Vim command | Action |
v | Start highlighting characters. Use the normal movement keys and commands to select text for highlighting. |
V | Start highlighting lines. |
The ESC key | Exit visual mode and return to command mode. |
Editing blocks of text | |
Note: the Vim commands marked with (V) work in visual mode, when you've selected some text. The other commands work in the command mode, when you haven't selected any text. | |
Vim command | Action |
~ | Change the case of characters. This works both in visual and command mode. In visual mode, change the case of highlighted characters. In command mode, change the case of the character uder cursor. |
> (V) | Shift right (indent). |
< (V) | Shift left (de-indent). |
c (V) | Change the highlighted text. |
y (V) | Yank the highlighted text. In Windows terms, "copy the selected text to clipboard." |
d (V) | Delete the highlighted text. In Windows terms, "cut the selected text to clipboard." |
yy or :y or Y | Yank the current line. You don't need to highlight it first. |
dd or :d | Delete the current line. Again, you don't need to highlight it first. |
p | Put the text you yanked or deleted. In Windows terms, "paste the contents of the clipboard". Put characters after the cursor. Put lines below the current line. |
P | Put characters before the cursor. Put lines above the current line. |
Undo and redo | |
Vim command | Action |
u | Undo the last action. |
U | Undo all the latest changes that were made to the current line. |
Ctrl + r | Redo. |
Search | |
Vim command | Action |
/pattern | Search the file for pattern. |
n | Scan for next search match in the same direction. |
N | Scan for next search match but opposite direction. |
Replace | |
Vim command | Action |
:rs/foo/bar/a | Substitute foo with bar. r determines the range and a determines the arguments. |
The range (r) can be | |
nothing | Work on current line only. |
number | Work on the line whose number you give. |
% | The whole file. |
Arguments (a) can be | |
g | Replace all occurrences in the line. Without this, Vim replaces only the first occurrences in each line. |
i | Ignore case for the search pattern. |
I | Don't ignore case. |
c | Confirm each substitution. You can type y to substitute this match, n to skip this match, a to substitute this and all the remaining matches ("Yes to all"), and q to quit substitution. |
Examples | |
:452s/foo/bar/ | Replace the first occurrence of the word foo with bar on line number 452. |
:s/foo/bar/g | Replace every occurrence of the word foo with bar on current line. |
:%s/foo/bar/g | Replace every occurrence of the word foo with bar in the whole file. |
:%s/foo/bar/gi | The same as above, but ignore the case of the pattern you want to substitute. This replaces foo, FOO, Foo, and so on. |
:%s/foo/bar/gc | Confirm every substitution. |
:%s/foo/bar/c | For each line on the file, replace the first occurrence of foo with bar and confirm every substitution. |
Reference:
리눅스 서버의 플랫폼 확인하기 ( 32bit? 64bit ? ) (0) | 2015.06.09 |
---|---|
crond를 이용한 서버에서 원격지로 자동백업하기 (0) | 2015.04.20 |
.bashrc 와 .bash_profile의 차이점 (0) | 2015.04.20 |
su 와 su - 의 차이점?? ( Differences between su and su - ) (0) | 2015.04.20 |
FTP를 이용한 binary 데이타 백업 (0) | 2015.04.20 |