数据导入导出工具redis-migrate-tool 需求背景: 刚切换到 redis 集群的时候,肯定会面临着数据导入的问题,这里推荐使用redis-migrate-tool 工具来导入单节点数据到集群里。 特点: 快速,多线程,基于redis复制,实时迁移。 迁移过程中,源集群不影响对外提供服务。 异构迁移,支持Twemproxy集群,redis cluster集群,rdb文件 和 aof文件。 过滤功能,当目标集群是Twemproxy,数据会跳过Twemproxy直接导入到后端的redis。 迁移状态显示,完善的数据抽样校验。 安装工具 https://github.com/tanruixing88/redis-migrate-tool 更新2018-12-08Redis-Migrate-Tool(简称RMT),是唯品会2016年出的开源的redis数据迁移工具,主要用于异构redis集群间的数据在线迁移,即数据迁移过程中源集群仍可以正常接受业务读写请求,无业务中断服务时间。 ###这里我们下载的是别人修改版的,已经可以支持redis5.0的数据迁移 本次实验的redis 版本 5.0.8 yum install autoconf automake libtool bzip2 git -y cd /root/ git clone https://github.com/tanruixing88/redis-migrate-tool.git cd redis-migrate-tool/ autoreconf -fvi ./configure make make install 创建配置文件: cd /root/redis-migrate-tool cat >redis_6379_to_6380.conf <<EOF [source] type: single servers: - 192.168.189.14:6379 [target] type: redis cluster servers: - 192.168.189.14:6380 [common] listen: 0.0.0.0:8888 source_safe: true EOF 更多功能说明:https://www.oschina.net/p/redis-migrate-tool ++++++++++ 生成测试数据:(192.168.189.14上面操作) 先启动 192.168.189.14:6379 /root/redis_shell.sh start 6379 或者 redis-cli -c -h 192.168.189.14 -p 6379 创建脚本(生成数据) vim /root/input_key.sh #!/bin/bash for i in $(seq 1 1000) do redis-cli -c -h 192.168.189.14 -p 6379 set aa_${i} v_${i} echo "set aa_${i} is ok" done 执行脚本 sh /root/input_key.sh 登录192.168.189.14:6379 keys *
1112个key 登录集群,查看原有数据。
1 个key 总共 1113个key 开始导入数据: redis-migrate-tool -c /root/redis-migrate-tool/redis_6379_to_6380.conf -c ##指定配置文件
查看集群所有数据:
![]()
![]()
总共:1113个key,说明192.168.189.14:6379数据,已经全部导入到集群了。 数据抽样检验: redis-migrate-tool -c /root/redis-migrate-tool/redis_6379_to_6380.conf -C redis_check
++++++++++++++ 把一个文件的内容插入到key redis-cli -c -h 192.168.189.14 -p 6380 set txt $(cat /root/test.txt)
key值 太多会显示乱码 可以把key值导出到一个文件中 redis-cli -c -h 192.168.189.14 -p 6380 get txt > /root/test1.txt
++++++++++++++++++++++ 分析键值大小: redis 的内存使用太大,键值太多,不知道哪些键值占用的容量比较大,而且在线分析会影响性能。 安装键值分析工具 yum install epel-release -y yum install python-pip gcc python-devel -y cd /opt git clone https://github.com/sripathikrishnan/redis-rdb-tools ++++++++++++++++++++++++ 或者:https://codeload.github.com/sripathikrishnan/redis-rdb-tools/zip/master 用浏览器下载下来,再上传值服务器,解压,再安装。 unzip redis-rdb-tools-master.zip -d /opt cd /opt/redis-rdb-tools-master python setup.py install +++++++++++++++++++++++ cd redis-rdb-tools python setup.py install ++++++++++++如果以上方法,安装的时候报错
可以用以下方法安装: pip install python-lzf pip install rdbtools python-lzf
此工具,只能支持到redis 3.5.3 , 使用方法: cd /data/redis_cluster/redis_6380 ##把 rdb文件导出成 csv文件 rdb -c memory redis_6380.rdb -f redis_6380.rdb.csv
## 分析 这个csv文件, awk -F"," '{print $4,$3}' redis_6380.rdb.csv|sort -rn >key_size.txt 打印 key 和 key值容量 ,按降序排序 打开这个key_size.txt 第一行就是 redis 里面 key 值,容量最大的key
redis 3.2.9 ++++++++++++++++++++++++++++++++++ redis 5.0 有自带的参数 --bigkeys 可以查找到最大的key值 redis-cli -h 192.168.189.16 -p 6380 --bigkeys
该命令使用scan方式对key进行统计,所以使用时无需担心对redis造成阻塞。 输出大概分为两部分,summary之上的部分,只是显示了扫描的过程。summary部分给出了每种数据结构中最大的Key。 统计出的最大key只有string类型是以字节长度为衡量标准的。list,set,zset等都是以元素个数作为衡量标准,不能说明其占的内存就一定多。所以,如果你的Key主要以string类型存在,这种方法就比较适合。 ++++++++++ 实时查看redis 内存使用情况和连接信息 redis-cli -h 192.168.189.16 -p 6380 -i 2 --stat -i 后面2,表示,每2秒执行一次,默认为1秒。不用加 -i
++++++++ 监控key 过期 需求背景: 因为开发重复提交,导致电商网站优惠券过期的时间失效 问题分析: 如果一个key 已经设置了过期时间,这时候再 set 这个 key ,过期时间就会取消。 解决思路: 如何在不影响机器性能的前提下,批量获取需要监控 key 过期时间 key 名,然后循环读取 ttl 时间 scan * 范围查询 key 名,然后循环读取 ttl 时间 keys 重复操作,会影响服务器性能,除非是不提供服务的从节点 scan 负担小,但是需要取多次才能取完,需要写脚本 ++++++ redis 当你内存写满后,就不会处理数据了,有三种处理方法: 1、惰性删除:就是从最旧的数据开始删除,不管有没有用,一直删除到有足够的内存空间,让它能够正常工作为止。 2、随机删除:随机删除,一直删除到一直删除到有足够的内存空间,让它能够正常工作为止。 3、什么都不做,就会卡死,默认是这种。 redis 必做之事:限制内存大小: 配置文件里面:maxmemory <byte> ##建议 设置为你的内存的一半 当你的内存满了后,你应该清理数据了(删除占用大的key),而不是应该加内存。 +++++++++++ redis 动态调整内存故障:(不需要更改配置文件) config get ##查看内存设置:
config set maxmemory 26843545600 config get maxmemory config set maxmemory 0 ##不限制内存使用 动态内存调整只能调整的比实际占用的大,不能调整的比实际占用的小,不然就会报动态调整的参数不会写入到配置文件里,配置文件里也看不到最大内存使用限制,即使重启,动态配置也会生效,只能通过 config get maxmemory 和 config set maxmemory 0 来恢复配置 当你的内存不够(快用完了)了,这时,执行bgsave 就会一直写入失败报错,因为执行bgsave的时候,redis会划分出一部分内存来执行,这时没有足够的内存空间来完成写入,所以会一直报错。
![]()
![]()