ubuntu 16.04 上 Redis利用持久化进行数据迁移

来源:互联网 发布:自考培训机构 知乎 编辑:程序博客网 时间:2024/06/08 07:45
Redis持久化了解
      为了让性能更加优异,Redis默认是把所有的数据都存在内存中的。但是当服务器重启或程序异常崩溃时,Redis的数据就会全部丢失。因此出现了持久化的概念。持久化就是将存在内存中的数据同步到磁盘来保证持久化。

1、Redis持久化的方式
      两种: RDB 和 AOF
      RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
      AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 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                    #当有10000条Keys数据被改变时,60秒刷新到Disk一次


利用持久化迁移数据

root@ubuntu:/usr/local/redis# redis-cli -h 192.168.0.157 -p 6379192.168.0.157:6379> info# Serverredis_version:3.2.3redis_git_sha1:00000000redis_git_dirty:0redis_build_id:4f5c4f3ea35ab1dfredis_mode:standaloneos:Linux 4.4.0-31-generic x86_64arch_bits:64multiplexing_api:epollgcc_version:5.4.0process_id:3696run_id:de38e6e9df9ba1bec0ec69d8545abdc9be7c090ftcp_port:6379uptime_in_seconds:4873uptime_in_days:0hz:10lru_clock:16535161executable:/usr/local/redis/./redis-serverconfig_file:/usr/local/redis/redis.conf# Clientsconnected_clients:1client_longest_output_list:0client_biggest_input_buf:0blocked_clients:0# Memoryused_memory:883160used_memory_human:862.46Kused_memory_rss:3256320used_memory_rss_human:3.11Mused_memory_peak:883160used_memory_peak_human:862.46Ktotal_system_memory:1031548928total_system_memory_human:983.76Mused_memory_lua:37888used_memory_lua_human:37.00Kmaxmemory:0maxmemory_human:0Bmaxmemory_policy:noevictionmem_fragmentation_ratio:3.69mem_allocator:libc# Persistenceloading:0rdb_changes_since_last_save:0rdb_bgsave_in_progress:0rdb_last_save_time:1476148559rdb_last_bgsave_status:okrdb_last_bgsave_time_sec:0rdb_current_bgsave_time_sec:-1aof_enabled:0aof_rewrite_in_progress:0aof_rewrite_scheduled:0aof_last_rewrite_time_sec:-1aof_current_rewrite_time_sec:-1aof_last_bgrewrite_status:okaof_last_write_status:ok# Statstotal_connections_received:3total_commands_processed:2instantaneous_ops_per_sec:0total_net_input_bytes:54total_net_output_bytes:43instantaneous_input_kbps:0.00instantaneous_output_kbps:0.00rejected_connections:0sync_full:0sync_partial_ok:0sync_partial_err:0expired_keys:0evicted_keys:0keyspace_hits:1keyspace_misses:0pubsub_channels:0pubsub_patterns:0latest_fork_usec:690migrate_cached_sockets:0# Replicationrole:masterconnected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0# CPUused_cpu_sys:4.50used_cpu_user:1.46used_cpu_sys_children:0.00used_cpu_user_children:0.00# Clustercluster_enabled:0# Keyspacedb0:keys=1,expires=0,avg_ttl=0db5:keys=15,expires=0,avg_ttl=0
192.168.0.157:6379> BGSAVE //#########保存最新的key值################Background saving started<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;">192.168.0.157:6379> LASTSAVE  //##########查看是否保存成功##############</span><span style="font-family:tahoma, 宋体;color:#333333;"><span style="font-size: 14px; line-height: 22.4px; background-color: rgb(250, 250, 252);"></span></span></div>(integer) 1476153086192.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# lsdump.rdb  redis-cli  redis.conf  redis-serverroot@ubuntu:/usr/local/redis# ./redis-server redis.confroot@ubuntu:/usr/local/redis# redis-cli -h 192.168.0.157 -p 6379192.168.0.157:6379> set name "beifenwenjianceshi" //新添加一个 key valuesOK192.168.0.157:6379> get name"beifenwenjianceshi"192.168.0.157:6379> bgsaveBackground saving started

执行 bgsave 命令后 将 dump.rdb  拷贝到本地 然后上传到 另一台安装了redis的主机上  进行数据恢复

重新启动 redis 命令 会自动加载恢复 

root@ubuntu:/usr/local/redis# ./redis-server redis.confroot@ubuntu:/usr/local/redis# redis-cli -h 127.0.0.1 -p 6379127.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 shutdownroot@ubuntu:/usr/local/redis# ./redis-server redis.conf //重新启动后 root@ubuntu:/usr/local/redis# redis-cli -h 127.0.0.1 -p 6379127.0.0.1:6379> get name"beifenwenjianceshi"127.0.0.1:6379> lastsave(integer) 1476154097127.0.0.1:6379>



0 0