SQL Redis function


동영상 설명은 아래에 있습니다.

Functions List

여기 소개되는 함수들은 레디스에서만 고유하게 사용할 수 있습니다.
컬럼명으로 반드시 key를 사용해야 합니다.

VALCNT(), LEN(), CARD()

키가 가지고 있는 값(value)의 개수를 리턴합니다.
1) select key,valcnt(key) from zset.*
2) select key,count(*) from zset.* group by key
2번과 같이 group by를 사용하는 것보다 valcnt를 사용하는 것이 훨씬 속도가 빠릅니다.
valcnt(), len(), card() 모두 같은 기능을 합니다. Datatype에 상관없이 어느 것을 사용하셔도 됩니다.

Example

명령>select key, valcnt(key) from list.my*;
결과> 0) key|valcnt(key)
1) mylist1|5
2) mylist2|5
3) mylist3|5
명령>select key, len(key) from list.my*;
결과> 0) key|len(key)
1) mylist1|5
2) mylist2|5
3) mylist3|5

MEMORY()

키가 차지하고 있는 메모리 량을 리턴합니다.
메모리 사용량이 많은 키를 찾는데 유용합니다.
memory(key): 정확한 메모리 사용량을 계산합니다.
    -> 레디스 명령: memory usage key 0
memory(key,5): 샘플로 5개의 멤버(값)가 사용하는 메모리량으로 키가 사용하는 총 메모리량을 계산합니다. 예를 들어 mylist에 100개의 값이 있을 경우 5개 값의 평균이 10 바이트이면 10 byte * 100으로 계산합니다.
    -> 레디스 명령: memory usage key 5

Example

명령>select key, memory(key) from list.my*;
결과> 0) key|memory(key)
1) mylist1|990
2) mylist2|1256
3) mylist3|879
명령>select key, memory(key) from set.my* order by memory(key) desc limit 3;
  메모리 사용량이 많은 순서로 3개 조회  
결과> 0) key|memory(key)
1) myset1|205834
2) myset2|170386
3) myset3|164506
명령>select sum(memory(key)) from set.*;   Set이 사용하는 총 메모리량 조회  
결과> 0) sum(memory(key))
1) 62386918
명령>select key, memory(key) from set.my* where memory(key) > 200000; 조회 조건으로 사용
결과> 0) key|memory(key)
1) myset1|205834

TYPE()

레디스 데이터타입 string, list, set, zset, hash, stream을 리턴합니다.
레디스 type key 명령과 같은 결과를 리턴합니다.

Example

명령>select key, type(key) from string.myint1;
결과> 0) key|type(key)
1) myint1|string
명령>select key, type(key) from list.mylist1;
결과> 0) key|type(key)
1) mylist1|list
명령>select key, type(key) from set.myset1;
결과> 0) key|type(key)
1) myset1|set

ENCODING()

레디스 인코딩타입(내부 데이터타입) raw, embstr, int, quicklist, intset, hashtable, ziplist, skiplist, stream 을 리턴합니다.
레디스 object encoding key 명령과 같은 결과를 리턴합니다.
TYPE   ENCODING
String: raw, embstr, int
List: quicklist (ziplist+linked list)
Set: hashtable, intset
ZSet: skiplist, ziplist
Hash: hashtable, ziplist
Stream: stream

Example

명령>select key,encoding(key) from string.myint1;
결과> 0) key|encoding(key)
1) myint1|int
명령>select key,encoding(key) from string.mystr1;
결과> 0) key|encoding(key)
1) myint1|embstr
명령>select key, encoding(key) from list.mylist1;
결과> 0) key|encoding(key)
1) mylist1|quicklist
명령>select key, encoding(key) from set.myset1;
결과> 0) key|encoding(key)
1) myset1|hashtable

TTL()

ttl(key) or ttl(key, value)

Expire 명령으로 설정한 만료 시간을 초(second)로 리턴합니다.
레디스 ttl key 명령과 같은 결과를 리턴합니다.
expire mystr1 3000
expire mystr2 10000
expire mystr3 5000
expire mystr4 20000
expire mystr5 7000

Example

명령>select key, ttl(key) from string.mystr*;
결과> 0) key|value|ttl(key)
1) mystr1|value10|2972
2) mystr2|value30|9978
3) mystr3|value50|4983
4) mystr4|value20|19988
5) mystr5|value40|6993

ORDER BY ttl(key)

ttl() 시각 순으로 조회할 수 있습니다.

Example

명령>select key, value, ttl(key) from string.mystr* order by ttl(key);
결과> 0) key|value|ttl(key)
1) mystr1|value10|2972
2) mystr3|value50|4983
3) mystr5|value40|6993
4) mystr2|value30|9978
5) mystr4|value20|19988
명령>select key, value, ttl(key) from string.mystr* order by ttl(key) desc;
결과> 0) key|value|ttl(key)
1) mystr4|value20|19981
2) mystr2|value30|9971
3) mystr5|value40|6986
4) mystr3|value50|4976
5) mystr1|value10|2965

WHERE ttl(key) =, >=, between

ttl을 다양한 조건으로 사용할 수 있습니다.
같다(=), 특정 시점 이후 또는 이전, 기간으로 조회할 수 있습니다.

Example

명령>select key, value, ttl(key) from string.mystr* where ttl(key) <= 6000;
결과> 0) key|value|ttl(key)
1) mystr1|value10|2946
2) mystr3|value50|4957
명령>select key, value, ttl(key) from string.mystr* where ttl(key) > 6000;
결과> 0) key|value|ttl(key)
1) mystr2|value30|9946
2) mystr4|value20|19956
3) mystr5|value40|6961
명령>select key, value, ttl(key) from string.mystr* where ttl(key) between 5000 and 10000;
결과> 0) key|value|ttl(key)
1) mystr2|value30|9935
2) mystr5|value40|6950

WHERE ttl(key) =, !=

expire가 걸려있지 않는 키를 조회한다.
persist mystr2
persist mystr4

Example

명령>select key, value, ttl(key) from string.mystr* where ttl(key) = -1;
결과> 0) key|value|ttl(key)
1) mystr2|value30|-1
2) mystr4|value20|-1
명령>select key, value, ttl(key) from string.mystr* where ttl(key) != -1;
결과> 0) key|value|ttl(key)
1) mystr1|value10|2946
2) mystr3|value50|4956
3) mystr5|value40|6966

TLL(key, value)

Expire 명령으로 member(value)에 설정한 만료 시간을 초(second)로 리턴합니다.
SET, ZSET, HASH에 expire member를 설정할 수 있습니다.
레디스 ttl key member 명령과 같은 결과를 리턴합니다.
Expire가 설정되어 있지 않으면 -1을 리턴합니다.
sadd myset1 AAA
expire myset1 AAA 3600
ttl(key, value)는 enterprise 7.3.2 부터 사용 가능합니다.

Example

명령>select key, value, ttl(key,value) from set.*;
결과> 0) key|value|ttl(key,value)
1) myset1|BBB|2646
2) myset1|CCC|-1
3) myset2|FFF|-1
4) myset2|EEE|2664
5) myset3|JJJ|2680
6) myset3|III|-1

PTTL()

Expire 명령으로 설정한 만료 시간을 밀리초(millisecond)로 리턴합니다.
레디스 pttl key 명령과 같은 결과를 리턴합니다.

Example

명령>select key, pttl(key) from string.mystr*;
결과> 0) key|ttl(key)
1) mystr1|758655
2) mystr2|44356
3) mystr3|-1
4) mystr4|-1
5) mystr5|-1

PTLL(key, value)

Expire 명령으로 member(value)에 설정한 만료 시간을 밀리초(millisecond)로 리턴합니다.
SET, ZSET, HASH에 expire member를 설정할 수 있습니다.
레디스 pttl key member 명령과 같은 결과를 리턴합니다.
Expire가 설정되어 있지 않으면 -1을 리턴합니다.
sadd myset1 AAA
expire myset1 AAA 3600
pttl(key, value)는 enterprise 7.3.2 부터 사용 가능합니다.

Example

명령>select key, value, pttl(key,value) from set.*;
결과> 0) key|value|pttl(key,value)
1) myset1|BBB|2639205
2) myset1|CCC|-1
3) myset2|FFF|-1
4) myset2|EEE|2657453
5) myset3|JJJ|2673053
6) myset3|III|-1

UPDATETIME()

생성 또는 마지막 수정 일시를 리턴합니다.
레디스에는 해당하는 명령이 없습니다. 레디스는 update time을 관리하지 않습니다. Update time은 Enterprise 버전에 관리합니다.
Update time은 AOF/RDB 파일에 저장되므로 레디스 서버 재시작 시에도 유지됩니다.
커뮤니터 버전에서 데이터를 가져왔을 경우 "1970-01-01"로 표시됩니다.

Example

명령>select key, updatetime(key), value from string.mystr1;
결과> 0) key|updatetime(key)|value
1) mystr1|2020-12-23 13:22:52.597|value10
명령> append mystr1 BBBBB
결과> (integer) 12
명령>select key, updatetime(key), value from string.mystr1
결과> 0) key|updatetime(key)|value
1) mystr1|2020-12-26 11:41:25.583|value10BBBBB

LIST

데이터 추가(push), 삭제(pop) 등 마지막 변경 일시를 조회할 수 있습니다.
이것은 Set, ZSet, Hash도 같습니다.

Example

명령>select key,updatetime(key) from list.mylist1;
결과> 0) key|updatetime(key)
1) mylist1|2020-12-23 13:22:52.601
명령>rpush mylist1 value60
결과> (integer) 6
명령>select key,updatetime(key) from list.mylist1;
결과> 0) key|updatetime(key)
1) mylist1|2020-12-26 11:44:18.281
명령>rpop mylist1
결과> "value60"
명령>select key,updatetime(key) from list.mylist1;
결과> 0) key|updatetime(key)
1) mylist1|2020-12-26 11:44:59.849

ORDER BY updatetime(key)

키 생성 또는 갱신 시각(updatetime) 순으로 조회할 수 있습니다.

Example

명령>select key, updatetime(key) from list.* order by updatetime(key);
결과> 0) key|updatetime(key)
1) mylist1|2022-01-29 16:13:32
2) mylist2|2022-01-29 16:13:32
3) mylist3|2022-01-29 17:45:51
명령>select key, updatetime(key) from list.* order by updatetime(key) desc;
결과> 0) key|updatetime(key)
1) mylist3|2022-01-29 17:45:51
2) mylist1|2022-01-29 16:13:32
3) mylist2|2022-01-29 16:13:32

WHERE updatetime(key) =, glob, >=, between

Updatetime을 다양한 조건으로 사용할 수 있습니다.
같다(=), glob/like, 특정 시점 이후 또는 이전, 기간으로 조회할 수 있습니다.

Example

명령>select key, updatetime(key) from list.* where updatetime(key) = '2022-01-29 17:45:51';
결과> 0) key|updatetime(key)
1) mylist3|2022-01-29 17:45:51
명령>select key, updatetime(key) from list.* where updatetime(key) glob '2022-01-29*';
결과> 0) key|updatetime(key)
1) mylist1|2022-01-29 16:13:32
2) mylist2|2022-01-29 16:13:32
3) mylist3|2022-01-29 17:45:51
명령>select key, updatetime(key) from list.* where updatetime(key) >= '2022-01-29';
결과> 0) key|updatetime(key)
1) mylist1|2022-01-29 16:13:32
2) mylist2|2022-01-29 16:13:32
3) mylist3|2022-01-29 17:45:51
명령>select key, updatetime(key) from list.* where updatetime(key) between '2022-01-20' and '2022-01-30';
결과> 0) key|updatetime(key)
1) mylist1|2022-01-29 16:13:32
2) mylist2|2022-01-29 16:13:32
3) mylist3|2022-01-29 17:45:51

Updatetime()을 이용한 키 삭제

Example

명령>
결과>

동영상 설명

Redis SQL Redis Functions



<< Functions Redis functions Date functions >>

Email 답글이 올라오면 이메일로 알려드리겠습니다.