Redis

From 탱이의 잡동사니
Revision as of 13:07, 18 June 2015 by Pchero (talk | contribs) (Created page with "== Overview == Redis 사용법 소개 == Commands == === info === Redis 서버 설정 정보를 확인할 수 있다. <pre> $ redis-cli info redis_version:2.4.18 redis_git_s...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

Redis 사용법 소개

Commands

info

Redis 서버 설정 정보를 확인할 수 있다.

$ redis-cli info
redis_version:2.4.18
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.4
process_id:27469
run_id:8626642f1b1a872c20f4b183f399589ba054c5e6
uptime_in_seconds:4
uptime_in_days:0
lru_clock:857251
used_cpu_sys:0.00
used_cpu_user:0.06
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
connected_clients:1
connected_slaves:0
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
used_memory:5297376
used_memory_human:5.05M
used_memory_rss:6316032
used_memory_peak:5293384
used_memory_peak_human:5.05M
mem_fragmentation_ratio:1.19
mem_allocator:jemalloc-3.2.0
loading:0
aof_enabled:0
changes_since_last_save:0
bgsave_in_progress:0
last_save_time:1434635870
bgrewriteaof_in_progress:0
total_connections_received:1
total_commands_processed:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
vm_enabled:0
role:master
db0:keys=526,expires=0
db1000:keys=95,expires=0

Errors

Cannot allocate memory

Redis 는 기본적으로 In-memory database 이다. 이 말은 모든 데이터베이스 정보들을 메모리에 저장한다는 뜻이다. 그런데, 만약 Redis 에 쌓여가는 데이터는 늘어만가고, 더이상 할당 가능한 메모리가 없다면 어떻게 될까?

속도가 엄청나게 느려진다. 보통은 1초안에 끝나는 검색이 10초 이상이 소요되게 된다.

그리고 로그 파일에는 다음과 같은 로그가 나타나게 된다.

[16451] 18 Jun 13:53:02 # Can't save in background: fork: Cannot allocate memory
[16451] 18 Jun 13:53:02 * 1 changes in 900 seconds. Saving... 

해결방법으로는 이곳<ref>http://pydelion.com/2013/05/27/redis-cant-save-in-background-fork-cannot-allocate-memory/</ref>을 참조하면 된다. 간단히, 아래 명령어를 사용하면 문제를 해결할 수 있다.

$ sysctl -w vm.overcommit_memory=1

하지만 이는 어디까지나, 단편적이고, 일회용적인 해결 방법이다. 재부팅을 하게되면 원래 설정대로 돌아간다. 주의하자.

보다, 근본적인 문제는, In-Memory DB 에서 저장해야 할 데이터는 많은데, 사용가능한 메모리가 부족하다는 것이다. 저장되는 데이터를 줄이거나, 메모리 크기를 늘리는 것이 해답이다.

References

<references />