AOF Recorded Commands 기록 명령

AOF Internal AOF Rewrite >>

AOF Recorded Commands 기록 명령

기본 설명

Redis Server 3.2 버전 기준으로 171개 명령이 있다.   이것은 내부 명령과 문서화되지 않은 명령을 포함한다.   이중 73개 명령이 AOF에 기록된다, 대게 '쓰기(w)' 명령이 기록되지만 그렇지 않은 것들도 있다.   여기서는 AOF에 기록되지 않는 명령을 포함해서 모든 명령을 리스트했다.

명령을 분류하면 크게 '쓰기', '읽기', '관리'로 나눌 수 있다.   이중 '쓰기' 명령이 AOF에 기록된다.
redisCommand 구조체의 4번째 필드 sflags에 '쓰기'는 'w', '읽기'는 'r', '관리'는 'a'로 구분되어 있다.   다른 구분도 있이만 여기서는 생략한다.  
하지만 redisCommand 구조체의 이 sflags 필드를 직접 이용해서 AOF 기록 여부를 정하지는 않는다.   왜냐하면, 'w'가 아닌 exec, script 등도 AOF에 기록하기 때문이다.   AOF에 기록할 명령들은 소스 코드에 server.dirty 변수의 값을 증가하는 것으로 하드코딩되어 있고, server.dirty가 0보다 크면 AOF에 기록한다.

주의할 사항은 입력한 명령 그대로 AOF에 기록하지 않는 명령들도 있다.   이것들은 적절히 변형되어 저장된다.   아래 "주의해서 볼 내용"에 표시했다.

주의해서 볼 내용

  • 명령이 그대로 기록되지 않는 경우: Strings의 incrbyfloat 명령은 AOF에 SET 명령으로 기록되고, setex 명령도 SET 명령으로 기록되며, Common Keys의 expire 명령은 PEXPIREAT 명령으로 변경되어 기록된다.
  • 한 명령이 여러 명령으로 구성되어 기록되는 경우: Strings의 setex 명령은 SET, PEXPIREAT 명령이 기록되고, 만료되면 DEL 명령이 기록된다. 즉, 2개 명령이 즉시 기록되고, 시간차를 두고 나머지 1개 명령이 기록된다.
    여기서 레디스가 setex 명령을 처리할 때 AOF에 기록하기 위해 DEL 명령까지 변환하는 것은 아니다.   DEL 명령 기록은 나중에 PEXPIREAT 명령 수행 결과로 기록되는 것이다.
  • 특이한 경우: blpop, brpop는 각각 LPOP, RPOP로 변경되어 기록되지만, brpoplpush는 변경되지 않고 그대로 기록된다.
  • 대소문자 기록: 명령은 입력한 그대로 기록된다.   즉, 소문자로 입력했으면 소문자로 기록되고, 대문자로 입력했으면 대문자로 기록된다.   하지만 명령이 변경되어 기록되는 경우는 항상 대문자로 기록된다.
  • 옵션에 따라 기록될 수도 있고 기록되지 않을 수도 있는 경우: sort 명령은 store 옵션을 사용하면 기록되고, 사용하지 않으면 기록되지 않는다.
  • 문서화되어 있지 않은 명령: substr 명령은 문서화되어 있지 않지만 실행된다.   기능은 getrange 명령과 동일하고, 실제로 getrange 명령이 실행된다.   '읽기' 명령이므로 AOF에는 기록되지 않는다.
    restore-asking 명령도 문서화되어 있지 않지만, restore 명령과 동일하고, 실제로 restore 명령이 실행된다.   AOF에는 restore-asking 그대로 기록된다.
  • select 명령은 실행 즉시 기록되지 않는다.   select 실행 후 SET 명령같은 '쓰기' 명령을 실행하면 그때 SET 명령 앞에 기록된다.   select 1 실행 후 '읽기' 명령을 실행하고, select 0을 실행하면 이전의 select 1은 AOF에 기록되지 않는다.
  • PubSub 관련 명령은 publish를 포함해서 어느 것도 AOF에 기록되지 않는다.
  • Geo 관련 명령과 hstrlen 명령은 version 3.2에서 수행된다.

Strings

NoCategoryName구분기록되는 명령
Recorded Commands
1Stringssetwset, set ex/px 버그
2Stringssetnxwsetnx
3StringssetexwSET, PEXPIREAT, (DEL)
4StringspsetexwSET, PEXPIREAT, (DEL)
5Stringsmsetwmset
6Stringsmsetnxwmsetnx
7Stringsgetsetwgetset
8Stringsappendwappend
9Stringsgetr
10Stringsmgetr
11Stringsstrlenr
12Stringssetrangewsetrange
13Stringsgetranger
14Stringssubstrr* getrange가 실행됨, Undoc
15Stringsincrwincr
16Stringsdecrwdecr
17Stringsincrbywincrby
18Stringsdecrbywdecrby
19StringsincrbyfloatwSET
20Stringssetbitwsetbit
21Stringsgetbitr
22Stringsbitopwbitop
23Stringsbitcountr
24Stringsbitposr

* SET EX/PX 버그: SET key value EX seconds or PX milliseconds 명령을 사용했을 경우 EX/PX option이 PEXPIREAT 명령으로 변환되지 않는 버그가 있다.
확인한 버전: 3.2.8 -> 이것은 2017년 7월 28일 발표된 3.2.10에서 수정되었다.

Lists

NoCategoryName구분기록되는 명령
Recorded Commands
1Listsrpushwrpush
2Listslpushwlpush
3Listsrpushxwrpushx
4Listslpushxwlpushx
5Listslinsertwlinsert
6Listslsetwlset
7Listsrpopwrpop
8Listslpopwlpop
9Listsrpoplpushwrpoplpush
10Listsltrimwltrim
11Listslremwlrem
12ListsbrpopwRPOP
13ListsblpopwLPOP
14Listsbrpoplpushwbrpoplpush
15Listsllenr
16Listslindexr
17Listslranger

Sets

NoCategoryName구분기록되는 명령
Recorded Commands
1Setssaddwsadd
2Setssremwsrem
3Setssmovewsmove
4SetsspopwSREM
5Setssinterr
6Setssinterstorewsinterstore
7Setssunionr
8Setssunionstorewsunionstore
9Setssdiffr
10Setssdiffstorewsdiffstore
11Setssismemberr
12Setssrandmemberr
13Setsscardr
14Setssmembersr
15Setssscanr

Sorted Sets

NoCategoryName구분기록되는 명령
Recorded Commands
1Sorted Setszaddwzadd
2Sorted Setszincrbywzincrby
3Sorted Setszremwzrem
4Sorted Setszremrangebyscorewzremrangebyscore
5Sorted Setszremrangebyrankwzremrangebyrank
6Sorted Setszremrangebylexwzremrangebylex
7Sorted Setszunionstorewzunionstore
8Sorted Setszinterstorewzinterstore
9Sorted Setszranger
10Sorted Setszrangebyscorer
11Sorted Setszrevrangebyscorer
12Sorted Setszrangebylexr
13Sorted Setszrevrangebylexr
14Sorted Setszcountr
15Sorted Setszlexcountr
16Sorted Setszrevranger
17Sorted Setszcardr
18Sorted Setszscorer
19Sorted Setszrankr
20Sorted Setszrevrankr
21Sorted Setszscanr

Hashes

NoCatagoryName구분기록되는 명령
Recorded Commands
1Hasheshsetwhset
2Hasheshsetnxwhsetnx
4Hasheshmsetwhmset
3Hasheshgetr
5Hasheshmgetr
6Hasheshincrbywhincrby
7HasheshincrbyfloatwHSET
8Hasheshdelwhdel
9Hasheshlenr
10Hasheshkeysr
11Hasheshvalsr
12Hasheshgetallr
13Hasheshexistsr
14Hasheshscanr
15Hasheshstrlenr

Common Keys

NoCategoryName구분기록되는 명령
Recorded Commands
1Keysdelwdel
2Keysexistsr
3Keysrandomkeyr
4Keysmovewmove
5Keysrenamewrename
6Keysrenamenxwrenamenx
7KeysexpirewPEXPIREAT, (DEL)
8KeysexpireatwPEXPIREAT, (DEL)
9KeyspexpirewPEXPIREAT, (DEL)
10KeyspexpireatwPEXPIREAT, (DEL)
11Keysttlr
12Keyspttlr
13Keyskeysr
14Keyssortwsort,   store option을 사용했을때 기록
15Keysscanr
16Keystyper
17Keyspersistwpersist
18Keysrestorewrestore
19Keysrestore-askingwrestore-asking, restore 명령 수행, Undoc
20Keysmigratewmigrate
21Keysdumpr
22Keysobjectr
23Keyswaitr

Server

NoCategoryName구분기록되는 명령
Recorded Commands
1Serversavea
2Serverbgsavea
3Serverbgrewriteaofa
4Servershutdowna
5Serverlastsaver
6Serversynca
7Serverpsynca내부 명령
8Serverreplconfa내부 명령
9Serverflushdbwflushdb
10Serverflushallwflushall
11Serverinfor
12Servermonitora
13Serverlatencya내부 명령
14Serverslaveofa
15Serverrolel
16Serverdebuga
17Serverconfiga
18Serverslowlogr
19Servertimer
20Servercommandr
21Serverdbsizer
22Serverclientr

PubSub

NoCategoryName구분기록되는 명령
Recorded Commands
1PubSubpublishp
2PubSubsubscribep
3PubSubunsubscribep
4PubSubpsubscribep
5PubSubpunsubscribep
6PubSubpubsubp

Geo   version 3.2

NoCategoryName구분기록되는 명령
Recorded Commands
1GeogeoaddwZADD
2Geogeoradiusr
3Geogeoradiusbymemberr
4Geogeohashr
5Geogeoposr
6Geogeodistr

Connection

NoCategoryName구분기록되는 명령
Recorded Commands
1Connectionauthr
2Connectionpingr
3Connectionechor
4Connectionquit * r이 없는 이유: 커멘드 구조체에 없고 하드코딩되어 있음
5ConnectionselectrSELECT, DB id가 바뀌었을때 기록됨

Transactions

NoCategoryName구분기록되는 명령
Recorded Commands
1Transactionsmultir
2Transactionsexecsexec
3Transactionsdiscardr
4Transactionswatchr
5Transactionsunwatchr

Scripting

NoCategoryName구분기록되는 명령
Recorded Commands
1Scriptingevals
2Scriptingevalshas
3Scriptingscriptrscript

HyperLogLog

NoCategoryName구분기록되는 명령
Recorded Commands
1HyperLogLogpfaddwpfadd
2HyperLogLogpfcountr
3HyperLogLogpfmergewpfmerge
4HyperLogLogpfdebugwpfdebug
5HyperLogLogpfselftestr

Cluster

NoCategoryName구분기록되는 명령
Recorded Commands
1Clusterclustera
2Clusterreadonlyr
3Clusterreadwriter
4Clusteraskingr내부 명령



<< AOF Internal AOF Recorded Commands AOF Rewrite >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 返事がかかってなれば、メールでお知らせします。