ubuntu 16.04でのRedisの永続化によるデータ移行

4978 ワード

Redis永続化の理解
パフォーマンスを向上させるために、Redisはデフォルトですべてのデータをメモリに保存します.しかし、サーバーが再起動したり、プログラムが異常にクラッシュしたりすると、Redisのデータはすべて失われます.そのため、持続化の概念が現れた.永続化とは、メモリに存在するデータをディスクに同期して永続化を保証することです.
1、Redis持続化の方式
     
2種類:RDBとAOF
RDB永続化は、指定された時間間隔でデータセットのポイント・イン・タイム・スナップショットを生成することができる.
AOFは、サーバが実行するすべての書き込み操作コマンドを永続化し、サーバの起動時にこれらのコマンドを再実行することでデータセットを復元します.
AOFファイルのコマンドはすべてRedisプロトコル形式で保存され、新しいコマンドはファイルの末尾に追加されます.Redisはまた、AOFファイルをバックグラウンドで書き換えることができ、AOFファイルのボリュームがデータセット状態を保存するのに必要な実際のサイズを超えないようにすることができる.
2、永続化されたデータは何に使いますか.
再起動後のデータ・リカバリに使用します.Redisはメモリデータベースであり、RDBもAOFもデータ復旧を保証する措置にすぎない.そのため、RedisはRDBとAOFを利用してリカバリを行う場合、RDBまたはAOFファイルを読み込み、メモリに再ロードします.
デフォルトの永続化の理解
ここでRDBはpoint-in-time snapshotスナップショットストレージであり、デフォルトの永続化方式でもある.RDBは、一定のポリシーに従って定期的にディスクにデータを保存する半永続化モードとして理解される.対応する生成されたデータファイルはdumpである.rdbは、プロファイル内のsaveパラメータによってスナップショットの周期を定義します.RedisのRDBファイルは、書き込み操作が新しいプロセスで行われるため、壊れません.
デフォルトの永続化設定:
save 900 1#Keysデータが変更された場合、900秒でDiskにリフレッシュ
save 300 10#10個のKeysデータが変更された場合、300秒で一度Diskにリフレッシュ
save 60 10000#10,000個のKeysデータが変更された場合、60秒でDiskにリフレッシュ
永続化によるデータの移行
root@ubuntu:/usr/local/redis# redis-cli -h 192.168.0.157 -p 6379
192.168.0.157:6379> info
# Server
redis_version:3.2.3
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:4f5c4f3ea35ab1df
redis_mode:standalone
os:Linux 4.4.0-31-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:5.4.0
process_id:3696
run_id:de38e6e9df9ba1bec0ec69d8545abdc9be7c090f
tcp_port:6379
uptime_in_seconds:4873
uptime_in_days:0
hz:10
lru_clock:16535161
executable:/usr/local/redis/./redis-server
config_file:/usr/local/redis/redis.conf


# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0


# Memory
used_memory:883160
used_memory_human:862.46K
used_memory_rss:3256320
used_memory_rss_human:3.11M
used_memory_peak:883160
used_memory_peak_human:862.46K
total_system_memory:1031548928
total_system_memory_human:983.76M
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:3.69
mem_allocator:libc


# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1476148559
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
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_last_write_status:ok


# Stats
total_connections_received:3
total_commands_processed:2
instantaneous_ops_per_sec:0
total_net_input_bytes:54
total_net_output_bytes:43
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
evicted_keys:0
keyspace_hits:1
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:690
migrate_cached_sockets:0


# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0


# CPU
used_cpu_sys:4.50
used_cpu_user:1.46
used_cpu_sys_children:0.00
used_cpu_user_children:0.00


# Cluster
cluster_enabled:0

# Keyspace
db0:keys=1,expires=0,avg_ttl=0
db5:keys=15,expires=0,avg_ttl=0
192.168.0.157:6379> BGSAVE //#########     key ################
Background saving started
192.168.0.157:6379> LASTSAVE //########## ##############
(integer) 1476153086 192.168.0.157:6379> root@ubuntu:/usr/local/redis# redis-cli -h 192.168.0.157 -p 6379 shutdown //########## redis ############## root@ubuntu:/usr/local/redis# ls dump.rdb redis-cli redis.conf redis-server root@ubuntu:/usr/local/redis# ./redis-server redis.conf root@ubuntu:/usr/local/redis# redis-cli -h 192.168.0.157 -p 6379 192.168.0.157:6379> set name "beifenwenjianceshi" // key values OK 192.168.0.157:6379> get name "beifenwenjianceshi" 192.168.0.157:6379> bgsave Background saving started

bgsaveコマンドを実行するとdump.rdbはローカルにコピーし、redisがインストールされている別のホストにアップロードしてデータリカバリを行います.
redisコマンドを再起動すると自動的にリカバリがロードされます
root@ubuntu:/usr/local/redis# ./redis-server redis.conf
root@ubuntu:/usr/local/redis# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> get name //    
(nil)
127.0.0.1:6379>
root@ubuntu:/usr/local/redis# redis-cli -h 127.0.0.1 -p 6379 shutdown
root@ubuntu:/usr/local/redis# ./redis-server redis.conf //      
root@ubuntu:/usr/local/redis# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> get name
"beifenwenjianceshi"
127.0.0.1:6379> lastsave
(integer) 1476154097
127.0.0.1:6379>