Redis 기본, 데이터 처리 명령어, String
이 포스트는 NoSQL 의 종류와 그 중 Key-Value DB 인 Redis, 그리고 데이터 타입 중 하나인 String
에 대해 알아본다.
(redis version 은 7.0.0)
1. Redis 설치 및 시작 종료
1.1. 설치
$ brew install redis
...
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
MySQL is configured to only allow connections from localhost by default
To connect run:
mysql -uroot
To restart mysql after an upgrade:
brew services restart mysql
Or, if you don't want/need a background service you can just run:
/usr/local/opt/mysql/bin/mysqld_safe --datadir=/usr/local/var/mysql
==> Summary
🍺 /usr/local/Cellar/mysql/8.0.29: 311 files, 294.7MB
==> Running `brew cleanup mysql`...
Removing: /usr/local/Cellar/mysql/8.0.27... (304 files, 293.8MB)
==> Checking for dependents of upgraded formulae...
==> No broken dependents found!
==> Caveats
==> redis
To restart redis after an upgrade:
brew services restart redis
Or, if you don't want/need a background service you can just run:
/usr/local/opt/redis/bin/redis-server /usr/local/etc/redis.conf
==> mysql
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
MySQL is configured to only allow connections from localhost by default
To connect run:
mysql -uroot
To restart mysql after an upgrade:
brew services restart mysql
Or, if you don't want/need a background service you can just run:
/usr/local/opt/mysql/bin/mysqld_safe --datadir=/usr/local/var/mysql
redis 실행파일
/usr/local/opt/redis/bin/redis-server redis.conf 위치
/usr/local/etc/redis.conf (default port: 6379)
1.2. redis start & stop
redis start & stop
$ brew services start redis
==> Successfully started `redis` (label: homebrew.mxcl.redis)
$ brew services stop redis
Stopping `redis`... (might take a while)
==> Successfully stopped `redis` (label: homebrew.mxcl.redis)
$ brew services restart redis
==> Successfully started `redis` (label: homebrew.mxcl.redis)
1.3. redis-server, redis-client
redis 서버 실행
$ pwd
/usr/local/opt/redis/bin
$ redis-server
60068:C 01 Jun 2022 14:41:46.934 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
60068:C 01 Jun 2022 14:41:46.934 # Redis version=7.0.0, bits=64, commit=00000000, modified=0, pid=60068, just started
60068:C 01 Jun 2022 14:41:46.934 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
60068:M 01 Jun 2022 14:41:46.935 * INCReased maximum number of open files to 10032 (it was originally SET to 256).
60068:M 01 Jun 2022 14:41:46.935 * monotonic clock: POSIX clock_GETtime
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 7.0.0 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 60068
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
60068:M 01 Jun 2022 14:41:46.936 # WARNING: The TCP backlog SETting of 511 cannot be enforced because kern.ipc.somaxconn is SET to the lower value of 128.
60068:M 01 Jun 2022 14:41:46.936 # Server initialized
60068:M 01 Jun 2022 14:41:46.936 * The AOF directory APPENDonlydir doesn't exist
60068:M 01 Jun 2022 14:41:46.936 * Loading RDB produced by version 7.0.0
60068:M 01 Jun 2022 14:41:46.936 * RDB age 5 seconds
60068:M 01 Jun 2022 14:41:46.936 * RDB memory usage when created 1.03 Mb
60068:M 01 Jun 2022 14:41:46.936 * Done loading RDB, KEYS loaded: 0, KEYS expired: 0.
60068:M 01 Jun 2022 14:41:46.936 * DB loaded from disk: 0.000 seconds
60068:M 01 Jun 2022 14:41:46.936 * Ready to accept connections
redis client 접속 및 redis-server 종료
$ redis-cli
127.0.0.1:6379>
$ shutdown # redis server 종료
not connected> exit
help 사용
help 와 함께 실행할 명령어 실행 시 설명 조회
$ help SET
SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]
summary: SET the string value of a key
since: 1.0.0
group: string
redis-server 기본 문법
$ redis-server -h
Usage: ./redis-server [/path/to/redis.conf] [options] [-]
./redis-server - (read config from stdin)
./redis-server -v or --version
./redis-server -h or --help
./redis-server --test-memory <megabytes>
Examples:
./redis-server (run the server with default conf)
./redis-server /etc/redis/6379.conf
./redis-server --port 7777
./redis-server --port 7777 --replicaof 127.0.0.1 8888
./redis-server /etc/myredis.conf --loglevel verbose -
./redis-server /etc/myredis.conf --loglevel verbose
Sentinel mode:
./redis-server /etc/sentinel.conf --sentinel
redis-cli 기본 문법
redis-cli -h
redis-cli 7.0.0
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <hostname> Server hostname (default: 127.0.0.1).
-p <port> Server port (default: 6379).
-s <socket> Server socket (overrides hostname and port).
-a <password> Password to use when connecting to the server.
You can also use the REDISCLI_AUTH environment
variable to pass this password more safely
(if both are used, this argument takes precedence).
--user <username> Used to send ACL style 'AUTH username pass'. Needs -a.
--pass <password> Alias of -a for consistency with the new --user option.
--askpass Force user to input password with mask from STDIN.
If this argument is used, '-a' and REDISCLI_AUTH
environment variable will be ignored.
-u <uri> Server URI.
-r <repeat> Execute specified command N times.
-i <interval> When -r is used, waits <interval> seconds per command.
It is possible to specify sub-second times like -i 0.1.
This interval is also used in --scan and --stat per cycle.
and in --bigKEYS, --memKEYS, and --hotKEYS per 100 cycles.
-n <db> Database number.
-2 Start session in RESP2 protocol mode.
-3 Start session in RESP3 protocol mode.
-x Read last argument from STDIN (see example below).
-X Read <tag> argument from STDIN (see example below).
-d <DELimiter> DELimiter between response bulks for raw formatting (default: \n).
-D <DELimiter> DELimiter between responses for raw formatting (default: \n).
-c Enable cluster mode (follow -ASK and -MOVED redirections).
-e Return exit error code when command execution fails.
--tls Establish a secure TLS connection.
--sni <host> Server name indication for TLS.
--cacert <file> CA Certificate file to verify with.
--cacertdir <dir> Directory where trusted CA certificates are stored.
If neither cacert nor cacertdir are specified, the default
system-wide trusted root certs configuration will apply.
--insecure Allow insecure TLS connection by skipping cert validation.
--cert <file> Client certificate to authenticate with.
--key <file> Private key file to authenticate with.
--tls-ciphers <list> SETs the list of preferred ciphers (TLSv1.2 and below)
in order of preference from highest to lowest separated by colon (":").
See the ciphers(1ssl) manpage for more information about the syntax of this string.
--tls-ciphersuites <list> SETs the list of preferred ciphersuites (TLSv1.3)
in order of preference from highest to lowest separated by colon (":").
See the ciphers(1ssl) manpage for more information about the syntax of this string,
and specifically for TLSv1.3 ciphersuites.
--raw Use raw formatting for replies (default when STDOUT is
not a tty).
--no-raw Force formatted output even when STDOUT is not a tty.
--quoted-input Force input to be handled as quoted strings.
--csv Output in CSV format.
--json Output in JSON format (default RESP3, use -2 if you want to use with RESP2).
--quoted-json Same as --json, but produce ASCII-safe quoted strings, not Unicode.
--show-pushes <yn> Whether to print RESP3 PUSH messages. Enabled by default when
STDOUT is a tty but can be overridden with --show-pushes no.
--stat Print rolling stats about server: mem, clients, ...
--latency Enter a special mode continuously sampling latency.
If you use this mode in an interactive session it runs
forever displaying real-time stats. Otherwise if --raw or
--csv is specified, or if you redirect the output to a non
TTY, it samples the latency for 1 second (you can use
-i to change the interval), then produces a single output
and exits.
--latency-history Like --latency but tracking latency changes over time.
Default time interval is 15 sec. Change it using -i.
--latency-dist Shows latency as a spectrum, requires xterm 256 colors.
Default time interval is 1 sec. Change it using -i.
--lru-test <KEYS> Simulate a cache workload with an 80-20 distribution.
--replica Simulate a replica showing commands received from the master.
--rdb <filename> Transfer an RDB dump from remote server to local file.
Use filename of "-" to write to stdout.
--functions-rdb <filename> Like --rdb but only GET the functions (not the KEYS)
when GETting the RDB dump file.
--pipe Transfer raw Redis protocol from stdin to server.
--pipe-timeout <n> In --pipe mode, abort with error if after sending all data.
no reply is received within <n> seconds.
Default timeout: 30. Use 0 to wait forever.
--bigKEYS Sample Redis KEYS looking for KEYS with many elements (complexity).
--memKEYS Sample Redis KEYS looking for KEYS consuming a lot of memory.
--memKEYS-samples <n> Sample Redis KEYS looking for KEYS consuming a lot of memory.
And define number of key elements to sample
--hotKEYS Sample Redis KEYS looking for hot KEYS.
only works when maxmemory-policy is *lfu.
--scan List all KEYS using the SCAN command.
--pattern <pat> KEYS pattern when using the --scan, --bigKEYS or --hotKEYS
options (default: *).
--quoted-pattern <pat> Same as --pattern, but the specified string can be
quoted, in order to pass an otherwise non binary-safe string.
--intrinsic-latency <sec> Run a test to measure intrinsic system latency.
The test will run for the specified amount of seconds.
--eval <file> Send an EVAL command using the Lua script at <file>.
--ldb Used with --eval enable the Redis Lua debugger.
--ldb-sync-mode Like --ldb but uses the synchronous Lua debugger, in
this mode the server is blocked and script changes are
not rolled back from the server memory.
--cluster <command> [args...] [opts...]
Cluster Manager command and arguments (see below).
--verbose Verbose mode.
--no-auth-warning Don't show warning message when using password on command
line interface.
--help Output this help and exit.
--version Output version and exit.
Cluster Manager Commands:
Use --cluster help to list all available cluster manager commands.
Examples:
cat /etc/passwd | redis-cli -x SET mypasswd
redis-cli -D "" --raw dump key > key.dump && redis-cli -X dump_tag restore key2 0 dump_tag replace < key.dump
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info | grep used_memory_human:
redis-cli --quoted-input SET '"null-\x00-separated"' value
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
redis-cli --scan --pattern '*:12345*'
(Note: when using --eval the comma separates KEYS[] from ARGV[] items)
When no command is given, redis-cli starts in interactive mode.
Type "help" in interactive mode for information on available commands
and SETtings.
redis-server 상태 확인
$ redis-cli
127.0.0.1:6379> INFO
# Server
redis_version:7.0.0
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:fa9ffba7836907da
redis_mode:standalone
...
1.4. 테스트 데이터 입력 및 조회
127.0.0.1:6379> SET foo bar
OK
127.0.0.1:6379> GET foo
"bar"
2. 데이터 처리 명령어
K-V DB 에서의 용어는 아래와 같다.
Table
Data Sets
: RowKey
: PKField/Element
: Column
$ pwd
/usr/local/opt/redis/bin
$ brew services start redis
==> Successfully started `redis` (label: homebrew.mxcl.redis)
$ redis-cli
127.0.0.1:6379>
2.1. RENAME
저장된 key 명을 변경한다.
127.0.0.1:6379> help RENAME
RENAME key newkey
summary: RENAME a key
since: 1.0.0
group: generic
127.0.0.1:6379> SET username assu
OK
127.0.0.1:6379> GET username
"assu"
127.0.0.1:6379> RENAME username username1
OK
127.0.0.1:6379> GET username
(nil)
127.0.0.1:6379> GET username1
"assu"
2.2. RANDOMKEY
저장된 key 중 랜덤하게 하나의 key 를 검색한다.
127.0.0.1:6379> help RANDOMKEY
RANDOMKEY
summary: Return a random key from the KEYSpace
since: 1.0.0
group: generic
127.0.0.1:6379> SET username assu
OK
127.0.0.1:6379> SET username1 assu1
OK
127.0.0.1:6379> SET username2 assu2
OK
127.0.0.1:6379> RANDOMKEY
"username"
127.0.0.1:6379> RANDOMKEY
"username"
127.0.0.1:6379> RANDOMKEY
2.3. KEYS
저장된 모든 key 를 검색한다.
127.0.0.1:6379> help KEYS
KEYS pattern
summary: Find all KEYS matching the given pattern
since: 1.0.0
group: generic
127.0.0.1:6379> KEYS *
1) "username2"
2) "username1"
3) "user9name3"
4) "username"
127.0.0.1:6379> KEYS username*
1) "username2"
2) "username1"
3) "username"
2.4. EXISTS
검색 대상 key 존재 여부를 확인하여 존재하는 key 값이면 1을 반환하고, 존재하지 않는 key 값이면 0 을 반환한다.
127.0.0.1:6379> help EXISTS
EXISTS key [key ...]
summary: Determine if a key EXISTS
since: 1.0.0
group: generic
127.0.0.1:6379> EXISTS username
(integer) 1
127.0.0.1:6379> EXISTS username username7
(integer) 1
127.0.0.1:6379> EXISTS username7 username
(integer) 1
127.0.0.1:6379> EXISTS username7 username8
(integer) 0
2.5. DEL
, FLUSHALL
DEL
은 특정 key 를 삭제한다.
127.0.0.1:6379> help DEL
DEL key [key ...]
summary: DELete a key
since: 1.0.0
group: generic
127.0.0.1:6379> KEYS *
1) "username2"
2) "username1"
3) "user9name3"
4) "username"
127.0.0.1:6379> DEL user9name3
(integer) 1
127.0.0.1:6379> DEL user9name3
(integer) 0
FLUSHALL
은 현재 저장되어 있는 모든 key 삭제한다.
127.0.0.1:6379> help FLUSHALL
FLUSHALL [ASYNC|SYNC]
summary: Remove all KEYS from all databases
since: 1.0.0
group: server
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> KEYS *
(empty array)
2.6. SAVE
현재 입력되어 있는 key, value 값을 파일로 저장한다.
SAVE
명령으로 저장된 데이터는 redis 폴더의 dump.rdb 파일로 생성된다.
redis 폴더는 아래와 같은 방식으로 알 수 있다.
homebrew.redis.service 파일에 보면 WorkingDirectory=/usr/local/var 를 볼 수 있다.
$ pwd
/usr/local/opt/redis
$ ll
total 80
-rw-r--r-- 1 assu admin 1.5K 4 27 22:32 COPYING
-rw-r--r-- 1 assu admin 1.2K 5 30 19:50 INSTALL_RECEIPT.json
-rw-r--r-- 1 assu admin 22K 4 27 22:32 README.md
drwxr-xr-x 8 assu admin 256B 7 21 15:05 bin
-rw-r--r-- 1 assu admin 670B 5 30 19:50 homebrew.mxcl.redis.plist
-rw-r--r-- 1 assu admin 335B 5 30 19:50 homebrew.redis.service
$ cat homebrew.redis.service
───────┬────────────────────────────────────────────────────────────────────────────────────────────
│ File: homebrew.redis.service
───────┼────────────────────────────────────────────────────────────────────────────────────────────
1 │ [Unit]
2 │ Description=Homebrew generated unit for redis
3 │
4 │ [Install]
5 │ WantedBy=multi-user.tarGET
6 │
7 │ [Service]
8 │ Type=simple
9 │ ExecStart=/usr/local/opt/redis/bin/redis-server /usr/local/etc/redis.conf
10 │ Restart=always
11 │ WorkingDirectory=/usr/local/var
12 │ StandardOutput=APPEND:/usr/local/var/log/redis.log
13 │ StandardError=APPEND:/usr/local/var/log/redis.log
$ pwd
/usr/local/var/db/redis
$ ll
total 8
-rw-r--r-- 1 assu admin 108B 7 21 15:10 dump.rdb
127.0.0.1:6379> help SAVE
SAVE
summary: Synchronously SAVE the dataSET to disk
since: 1.0.0
group: server
2.7. CLEAR
화면 CLEAR 하는 명령어이다.
127.0.0.1:6379> CLEAR
2.8. time
현재 서버의 시간을 unix time in seconds 와 현재 초에서 이미 경과된 microseconds, 2 가지 항목으로 조회한다.
127.0.0.1:6379> help TIME
TIME
summary: Return the current server TIME
since: 2.6.0
group: server
127.0.0.1:6379> TIME
1) "1658385383" # 서버 시간 (unix time in seconds)
2) "808254" # 현재 초에서 이미 경과된 microseconds
2.9. INFO
redis 서버 설정 상태를 조회한다.
127.0.0.1:6379> help INFO
INFO [section [section ...]]
summary: GET information and statistics about the server
since: 1.0.0
group: server
127.0.0.1:6379> INFO
# Server
redis_version:7.0.0
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:fa9ffba7836907da
redis_mode:standalone
os:Darwin 21.5.0 x86_64
arch_bits:64
monotonic_clock:POSIX clock_GETtime
multiplexing_api:kqueue
atomicvar_api:c11-builtin
gcc_version:4.2.1
process_id:39942
process_supervised:no
run_id:7c1a92e98f69a6c344ce0f505d3a02db76395250
tcp_port:6379
server_time_usec:1658385510640954
uptime_in_seconds:168673
uptime_in_days:1
hz:10
configured_hz:10
lru_clock:14218342
executable:/usr/local/opt/redis/bin/redis-server
config_file:/usr/local/etc/redis.conf
io_threads_active:0
# Clients
connected_clients:1
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:16
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0
# Memory
used_memory:1821664
used_memory_human:1.74M
used_memory_rss:1028096
used_memory_rss_human:1004.00K
used_memory_peak:1821664
used_memory_peak_human:1.74M
used_memory_peak_perc:100.11%
used_memory_overhead:1134704
used_memory_startup:1132640
used_memory_dataSET:686960
used_memory_dataSET_perc:99.70%
allocator_allocated:1802688
allocator_active:996352
allocator_resident:996352
total_system_memory:17179869184
total_system_memory_human:16.00G
used_memory_lua:31744
used_memory_vm_eval:31744
used_memory_lua_human:31.00K
used_memory_scripts_eval:0
number_of_cached_scripts:0
number_of_functions:0
number_of_libraries:0
used_memory_vm_functions:32768
used_memory_vm_total:64512
used_memory_vm_total_human:63.00K
used_memory_functions:216
used_memory_scripts:216
used_memory_scripts_human:216B
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:0.55
allocator_frag_bytes:18446744073708745280
allocator_rss_ratio:1.00
allocator_rss_bytes:0
rss_overhead_ratio:1.03
rss_overhead_bytes:31744
mem_fragmentation_ratio:0.57
mem_fragmentation_bytes:-774592
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_total_replication_buffers:0
mem_clients_slaves:0
mem_clients_normal:1776
mem_cluster_links:0
mem_aof_buffer:0
mem_allocator:libc
active_defrag_running:0
lazyfree_pending_objects:0
lazyfreed_objects:0
# Persistence
loading:0
async_loading:0
current_cow_peak:0
current_cow_size:0
current_cow_size_age:0
current_fork_perc:0.00
current_SAVE_KEYS_processed:0
current_SAVE_KEYS_total:0
rdb_changes_since_last_SAVE:0
rdb_bgSAVE_in_progress:0
rdb_last_SAVE_time:1658383851
rdb_last_bgSAVE_status:ok
rdb_last_bgSAVE_time_sec:0
rdb_current_bgSAVE_time_sec:-1
rdb_SAVEs:4
rdb_last_cow_size:0
rdb_last_load_KEYS_expired:0
rdb_last_load_KEYS_loaded:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_rewrites:0
aof_rewrites_consecutive_failures:0
aof_last_write_status:ok
aof_last_cow_size:0
module_fork_in_progress:0
module_fork_last_cow_size:0
# Stats
total_connections_received:2
total_commands_processed:126
instantaneous_ops_per_sec:0
total_net_input_bytes:5259
total_net_output_bytes:346626
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_KEYS:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:568
evicted_KEYS:0
evicted_clients:0
total_eviction_exceeded_time:0
current_eviction_exceeded_time:0
KEYSpace_hits:64
KEYSpace_misses:9
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:475
total_forks:4
migrate_cached_sockets:0
slave_expires_tracked_KEYS:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
total_active_defrag_time:0
current_active_defrag_time:0
tracking_total_KEYS:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_error_replies:11
dump_payload_sanitizations:0
total_reads_processed:132
total_writes_processed:134
io_threaded_reads_processed:0
io_threaded_writes_processed:0
reply_buffer_shrinks:3
reply_buffer_expands:1
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:e68a27ace65ac1489544683f27a00aac7eabbdb7
master_replid2:0000000000000000000000000000000000000000
master_repl_offSET:0
second_repl_offSET:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offSET:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:17.338330
used_cpu_user:12.698221
used_cpu_sys_children:0.010956
used_cpu_user_children:0.001772
# Modules
# Errorstats
errorstat_ERR:count=11
# Cluster
cluster_enabled:0
# KEYSpace
db0:KEYS=1,expires=0,avg_TTL=0
3. String
String
은 redis 에서 기본적으로 문자열/숫자를 저장할 때 사용하는 자료 구조이다.
key/value 모두 최대 길이는 512MB 이지만 너무 길면 메모리 낭비가 발생한다.
$ pwd
/usr/local/opt/redis/bin
$ brew services start redis
==> Successfully started `redis` (label: homebrew.mxcl.redis)
$ redis-cli
127.0.0.1:6379>
3.1. SET
, GET
127.0.0.1:6379> help SET
SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]
summary: SET the string value of a key
since: 1.0.0
group: string
127.0.0.1:6379> help GET
GET key
summary: GET the value of a key
since: 1.0.0
group: string
127.0.0.1:6379> SET username assu
OK
127.0.0.1:6379> GET username
"assu"
3.1.1 SET
- [NX | XX
]
NX
는 key 가 존재하지 않을 때만 insert 하는 명령어이다.
127.0.0.1:6379> KEYS *
1) "username"
127.0.0.1:6379> SET username assu1 NX # username key 가 설정되어 있는 경우 (오류)
(nil)
127.0.0.1:6379> GET username
"assu"
127.0.0.1:6379> DEL username
(integer) 1
127.0.0.1:6379> SET username assu1 NX # username key 가 설정되어 있지 않은 경우 (정상)
OK
127.0.0.1:6379> GET username
"assu1"
XX
는 key 가 존재할 때만 update 하는 명령어이다.
127.0.0.1:6379> KEYS *
(empty array)
127.0.0.1:6379> SET username assu XX # username key 가 설정되어 있지 않은 경우 (오류)
(nil)
127.0.0.1:6379> SET username assu
OK
127.0.0.1:6379> SET username assu1 XX # username key 가 설정되어 있는 경우 (정상)
OK
127.0.0.1:6379> GET username
"assu1"
3.1.2 SET
- [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL
]
EX seconds
는 만료 TTL 을 seconds 단위로 지정한다.
127.0.0.1:6379> SET username assu EX 10 # TTL을 10s 설정
OK
127.0.0.1:6379> GET username # 10초 경과 전
"assu"
127.0.0.1:6379> GET username # 10초 경과 후
(nil)
PX milliseconds
는 만료 TTL 을 ms 단위로 지정한다.
127.0.0.1:6379> SET username assu PX 10000 # TTL을 10,000ms 설정
OK
127.0.0.1:6379> GET username # 10,000 경과 전
"assu"
127.0.0.1:6379> GET username # 10,000 경과 후
(nil)
EXAT unix-time-seconds
는 TTL 을 unix time 기준 seconds 단위로 지정한다.
PXAT unix-time-milliseconds
는 TTL 을 unix time 기준 ms 단위로 지정한다.
KEEPTTL
은 기존 key 의 TTL 을 지우지 않는다.
127.0.0.1:6379> SET test 111 ex 5 # TTL 을 5초로 설정
OK
127.0.0.1:6379> GET test
"111"
127.0.0.1:6379> SET test 222 # TTL 이 삭제됨
OK
127.0.0.1:6379> TTL test
(integer) -1
127.0.0.1:6379> GET test # TTL 이 삭제되어 5초 후에도 key 존재
"222"
127.0.0.1:6379> SET test 111 ex 10 # TTL 을 10초로 설정
OK
127.0.0.1:6379> SET test 222 keepTTL # TTL 유지
OK
127.0.0.1:6379> TTL test
(integer) 4
127.0.0.1:6379> GET test
"222"
127.0.0.1:6379> GET test # TTL 이 유지되어 10초 후에 key 삭제됨
(nil)
3.2. MSET
, MGET
여러 개의 key-value 를 한번에 저장하고 검색하는데 사용하며, 입력 순서대로 저장된다는 보장은 없다.
127.0.0.1:6379> help MSET
MSET key value [key value ...]
summary: SET multiple KEYS to multiple values
since: 1.0.1
group: string
127.0.0.1:6379> help MGET
MGET key [key ...]
summary: GET the values of all the given KEYS
since: 1.0.0
group: string
127.0.0.1:6379> MSET username assu userage 20 usercity seoul
OK
127.0.0.1:6379> MGET username usercity
1) "assu"
2) "seoul"
127.0.0.1:6379> GET usercity
"seoul"
3.3. STRLEN
검색하려는 key 의 value 길이를 조회한다.
127.0.0.1:6379> help STRLEN
STRLEN key
summary: GET the length of the value stored in a key
since: 2.2.0
group: string
127.0.0.1:6379> SET username assu
OK
127.0.0.1:6379> STRLEN username
(integer) 4
3.4. SETEX
일정 시간이 지난 후 자동으로 key 를 삭제하며, 시간 단위는 seconds 단위이다.
TTL key
로 삭제 전까지의 시간 확인이 가능하다.
127.0.0.1:6379> help SETEX
SETEX key seconds value
summary: SET the value and expiration of a key
since: 2.0.0
group: string
127.0.0.1:6379> SETEX username 100 assu
OK
127.0.0.1:6379> TTL username
(integer) 97
3.5. TTL
key 의 남아있는 TTL 시간을 seconds 단위로 확인한다.
TTL 설정이 안된 key 의 경우 -1 을 리턴하고, TTL 이 만료된 key 의 경우 -2 를 리턴한다.
127.0.0.1:6379> help TTL
TTL key
summary: GET the time to live for a key in seconds
since: 1.0.0
group: generic
127.0.0.1:6379> SET username assu
OK
127.0.0.1:6379> TTL username # TTL 설정이 안된 key 조회
(integer) -1
127.0.0.1:6379> SETEX username 10 assu
OK
127.0.0.1:6379> TTL username # 남아있는 시간(seconds) 리턴
(integer) 8
127.0.0.1:6379> TTL username # TTL 이 만료된 경우
(integer) -2
3.6. INCR
, DECR
key 값의 value 값 1씩 증감시킨다.
127.0.0.1:6379> help INCR
INCR key
summary: INCRement the integer value of a key by one
since: 1.0.0
group: string
127.0.0.1:6379> help DECR
DECR key
summary: DECRement the integer value of a key by one
since: 1.0.0
group: string
127.0.0.1:6379> SET aa 2
OK
127.0.0.1:6379> GET aa
"2"
127.0.0.1:6379> INCR aa
(integer) 3
127.0.0.1:6379> GET aa
"3"
127.0.0.1:6379> DECR aa
(integer) 2
127.0.0.1:6379> GET aa
"2"
3.7. INCRBY
, DECRBY
, INCRBYFLOAT
INCRBY
, DECRBY
는 특정 수치만큼 value 값을 증감시킨다.
127.0.0.1:6379> help INCRBY
INCRBY key INCRement
summary: INCRement the integer value of a key by the given amount
since: 1.0.0
group: string
127.0.0.1:6379> help DECRBY
DECRBY key DECRement
summary: DECRement the integer value of a key by the given number
since: 1.0.0
group: string
127.0.0.1:6379> SET aa 2
OK
127.0.0.1:6379> INCRBY aa 3
(integer) 5
127.0.0.1:6379> GET aa
"5"
127.0.0.1:6379> INCRBY aa -9
(integer) -4
127.0.0.1:6379> DECRBY aa 1
(integer) -5
INCRBYFLOAT
는 소수의 형태로 value 값을 증감시킨다.
쌍이 되는 DECRBYfloat
명령어는 없는데 -
값을 설정하여 INCRBYFLOAT
를 사용하면 된다.
127.0.0.1:6379> help INCRBYFLOAT
INCRBYFLOAT key INCRement
summary: INCRement the float value of a key by the given amount
since: 2.6.0
group: string
127.0.0.1:6379> SET aa 1
OK
127.0.0.1:6379> INCRBYFLOAT aa 2
"3"
127.0.0.1:6379> GET aa
"3"
127.0.0.1:6379> INCRBYFLOAT aa 2.5
"5.5"
127.0.0.1:6379> INCRBYFLOAT aa -2.5
"3"
3.8. APPEND
현재 value 값 뒤에 value 를 추가한다.
만일 key 가 존재하지 않으면 신규로 생성한다.
127.0.0.1:6379> help APPEND
APPEND key value
summary: APPEND a value to a key
since: 2.0.0
group: string
127.0.0.1:6379> KEYS *
(empty array)
127.0.0.1:6379> APPEND username assu # key 가 없는 경우 생성
(integer) 4
127.0.0.1:6379> GET username
"assu"
127.0.0.1:6379> APPEND username hi # 기존에 존재하는 key 에 APPEND
(integer) 6
127.0.0.1:6379> GET username
"assuhi"
3.9. GETRANGE
, SETRANGE
string 연산에서 substring, replace 와 동일한 연산이다.
127.0.0.1:6379> help GETRANGE
GETRANGE key start end
summary: GET a substring of the string stored at a key
since: 2.4.0
group: string
127.0.0.1:6379> help SETRANGE
SETRANGE key offSET value
summary: Overwrite part of a string at key starting at the specified offSET
since: 2.2.0
group: string
127.0.0.1:6379> SET hello world
OK
127.0.0.1:6379> GET hello
"world"
127.0.0.1:6379> GETRANGE hello 2 4
"rld"
127.0.0.1:6379> SETRANGE hello 2 ppp
(integer) 5
127.0.0.1:6379> GET hello
"woppp"
참고 사이트 & 함께 보면 좋은 사이트
본 포스트는 주종면 저자의 빅데이터 저장 및 분석을 위한 NoSQL & Redis를 기반으로 스터디하며 정리한 내용들입니다.
- 빅데이터 저장 및 분석을 위한 NoSQL & Redis
- 빅데이터 저장 및 분석을 위한 NoSQL & Redis - 실습파일
- https://redis.io/commands
- https://redis.io/commands - string
- Redis 언어별 관련 드라이브
- Redis 데이터 입력, 수정, 삭제, 조회
- Redis 자료 구조 - String
- RedisGate - keepTTL