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

前言

Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。

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一次

利用持久化迁移数据

##########查看配置信息及当前存储的key值###########
[[email protected] ~]# redis-cli -h 10.160.35.86 -p 6379
redis 10.160.35.86:6379> info
redis_version:2.4.10
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.6
process_id:11911
uptime_in_seconds:2154256
uptime_in_days:24
lru_clock:1527581
used_cpu_sys:1145.31
used_cpu_user:1430.18
used_cpu_sys_children:56.20
used_cpu_user_children:207.71
connected_clients:147
connected_slaves:0
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:12
used_memory:6762928
used_memory_human:6.45M
used_memory_rss:19816448
used_memory_peak:10441776
used_memory_peak_human:9.96M
mem_fragmentation_ratio:2.93
mem_allocator:jemalloc-2.2.5
loading:0
aof_enabled:0
changes_since_last_save:166
bgsave_in_progress:0
last_save_time:1420367541
bgrewriteaof_in_progress:0
total_connections_received:1387982
total_commands_processed:25568539
expired_keys:1838499
evicted_keys:0
keyspace_hits:529489
keyspace_misses:1838207
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:947
vm_enabled:0
role:master
db0:keys=18255,expires=17326
#########保存最新的key值################
redis 10.160.35.86:6379> BGSAVE
Background saving started
##########查看是否保存成功##############
redis 10.160.35.86:6379> LASTSAVE
(integer) 1420367903
##########关闭redis服务器##############
redis-cli -h 10.160.35.86 -p 6379 SHUTDOWN
#########查看Redis的RDB文件###########
[[email protected] ~]# grep "dir" /etc/redis.conf        #查看RDB文件的存放位置
# The working directory.
# The DB will be written inside this directory, with the filename specified
# above using the ‘dbfilename‘ configuration directive.
# Also the Append Only File will be created inside this directory.
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis/                                 #RDB文件存放于此
# directive below) it is possible to tell the slave to authenticate before
# using the following configuration directive.
# the swap file under /tmp is not secure. Create a dir with access granted
# configuration directives.
[[email protected] ~]# find / -name dump.rdb             #查找dump文件
/var/lib/redis/dump.rdb
##########压缩redis文件并拷入另一台机器#########
[[email protected] ~]# tar zcvf redis.tar.gz /var/lib/redis
[[email protected] ~]# scp redis.tar.gz [email protected]:/var/lib/
#########登陆10.160.35.67机器并做相应配置#######
[[email protected] ~]# vi /etc/redis.conf
dir /var/lib/redis/                   #指定RDB文件路径
#########解压缩RDB文件##########################
[[email protected] ~]# cd /var/lib/
[[email protected] ~]# tar xf redis.tar.gz
#########重启Redis服务器########################
[[email protected] ~]# service redis restart

附加信息

Redis–BGSAVE

在后台异步(Asynchronously)保存当前数据库的数据到磁盘。
BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功。
请移步 持久化文档 查看更多相关细节。
可用版本:>= 1.0.0时间复杂度:O(N), N 为要保存到数据库中的 key 的数量。返回值:反馈信息。
redis> BGSAVE
Background saving started

Redis–LASTSAVE

LASTSAVE
返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示。
可用版本:>= 1.0.0时间复杂度:O(1)返回值:一个 UNIX 时间戳。
redis> LASTSAVE
(integer) 1324043588

转换Unix时间戳的网址

http://tool.chinaz.com/Tools/unixtime.aspx
时间: 2024-12-21 13:35:26

Redis利用持久化进行数据迁移的相关文章

Redis数据迁移方案

场景 Redis实例A ---> Redis实例B,整库全量迁移 方案一: mac环境 brew install npm npm install redis-dump -g 针对RedisA: redis-dump -h host1 -p 6379 -d 1 --json > mydb.json针对RedisB: cat mydb.json | redis-dump --convert | redis-cli 方案二:参考: http://www.zlovezl.cn/articles/mig

数据迁移至RDS-MySQL之利用RDS管理控制台

MySQL之利用RDS管理控制台数据迁移至RDS-MySQL之利用RDS管理控制台该方法是一种MySQL的在线迁移方法,可以不停服务就能够完成数据库的迁移工作,支持MySQL 5.1   5.5. 5.6(5.0版本只支持全量迁移)的迁移.更多迁移信息可参考:如何快速平稳的迁入RDS>>迁移注意事项1)MySQL的系统库将不允许迁移至RDS,不允许迁移的数据库包括:mysql,information_schema,perfermance_schema.这些数据库将不会显示在迁移列表中:2)不支

redis cluster异地数据迁移,扩容,缩容

由于项目的服务器分布在重庆,上海,台北,休斯顿,所以需要做异地容灾需求.当前的mysql,redis cluster,elastic search都在重庆的如果重庆停电了,整个应用都不能用了. 现在考虑第一步做重庆和上海的异地容灾,大概测试了一下重庆的几台服务器之间大概是13m/s的传输速度也就是说100M的局域网带宽,重庆到上海只有1.2m/s的传输速度,大概10M的局域网带宽. 第一个方案先考虑简单的  mysql 重庆上海主主同步  redis cluster的master节点默认都设置在

Redis基本数据类型、数据持久化、过期策略及淘汰机制

一点技术.技术乐享!!! 如果有人问你:Redis这么快,他的“多线程模式”你了解吗? 请回答他:您是想问Redis这么快,为什么还是单线程模式吗? redis是什么 简单来说redis是C语言开发的一个开源的(遵从BSD协议)高性能键值对(key-value)的内存数据库,可以用作数据库.缓存.消息中间件等. 性能优秀,数据在内存中,读写速度非常快,支持并发10W QPS. 单进程单线程,是线程安全的,采用Io多路复用机制. 丰富的数据类型,支持字符串(string).散列(hash).列表(

Redis学习总结(1)——数据持久化

以前研究Redis的时候,很多东西都不太明白,理解得也不太深,现在有时间重新拾起来看看,将一些心得记录下来,希望和大家一起探讨. 一.简介 Redis是一个单线程高可用的Key-Value存储系统,和Memcached类似,但是实际使用上最大的区别有两方面: Redis支持多种数据结构类型的value,比如string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型): Memcached在出现系统瘫痪的情况下,无法实现系统恢复,而

Redis 关闭持久化及关闭持久化后正确删除持久化之前的数据

去掉持久化 首先要确保你启动Redis加载的配置文件的路径是正确的 修改配置文件 redis.windows-service.conf 找到以下内容并设置 若无请添加 #save 900 1 #save 300 10 #save 60 10000 appendonly=no  save "" 如果之前存储了持久化的数据,发现删除了后重启服务数据还会恢复来到Redis目录下删除dump.rdb即可.dump.rdb 是redis 启动的时候会加载的数据文件. 在Redis中提供了两种 持

利用Tsunami UDP将大数据迁移至云中

当你的数据规模达到PB级别的时候,想要移动这样大规模数据时就会变的费时费力,这也是企业在利用AWS规模化和弹性优势处理分析任务时面临的最大挑战之一.本文主要介绍了加速文件传输协议,谈到如何利用Tsunami DUP实现将大规模数据迁移到云中,其中利用UDP处理数据传输,TCP负责连接控制. 值得一提的是,与SCP.FTP或者HTTP等纯粹基于TCP的协议不同,这些混合型UDP/TCP协议处理数据的吞吐量更加出色,它可以充分利用当前的可用带宽的情况下,不易受到网络延迟的影响,这些特性使其成为远距离

redis 数据迁移笔记

老服务器上内存一直报警,所以要把一部分redis数据迁移到新服务器上去. 迁移的方式有两种,一种是停服务器,搬迁数据:另一种通过主从同步转移. 停服务器,搬迁数据 首先在原服务器上执行redis-cli shutdown命令,该命令会触发保证写RDB文件以及将AOF文件写入磁盘,不会丢失数 停服务器,搬迁数据 首先在原服务器上执行redis-cli shutdown命令,该命令会触发保证写RDB文件以及将AOF文件写入磁盘,不会丢失数据. 如果是kill -9 pid就会丢失数据. 然后将RDB

从MySQL到Redis 提升数据迁移的效率

场景是从MySQL中将数据导入到Redis的Hash结构中.当然,最直接的做法就是遍历MySQL数据,一条一条写入到Redis中.这样可能没什么错,但是速度会非常慢.而如果能够使MySQL的查询输出数据直接能够与Redis命令行的输入数据协议相吻合,可能就省事多了.根据测试800w的数据迁移,时间从90分钟缩短到2分钟.具体案例如下:MySQL数据表结构: CREATE TABLE events_all_time (id int(11) unsigned NOT NULL AUTO_INCREM