异步导入导出Redis数据(利用Hiredis、Libevent)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 最近工作中需要用到一个将数据从Redis导出到文本(或从文本导入Redis)的工具。找到一个用Ruby写的开源软件redis-dump(http://delanotes.com/redis-dump/)。

最近工作中需要用到一个将数据从Redis导出到文本(或从文本导入Redis)的工具。找到一个用Ruby写的开源软件redis-dump(http://delanotes.com/redis-dump/)。

1 redis-benchmark -t set -d 1000 -n 1000000 -r 50000000 -h xxx.xxx.xxx.xxx -p 6379

  利用上面的命令向Redis中set了100万条1K大小数据,本地测试下redis-dump的性能,QPS大约在2500左右,实在太慢,只好自己实现一个小工具。

  看了看源码,redis-dump采用同步方式获取数据,无法充分利用Redis Server的性能。能想到的改进自然是异步的获取数据,hiredis的异步接口要和libevent、libev等异步通信库结合起来使用,这里有几个例子(https://github.com/redis/hiredis/tree/master/examples)。代码很简单,首先KEYS *获取所有的key,再将所有的DUMP key命令写入redisAsyncCommand交由event_base分发,在callback中将DUMP出的二进制数据处理一下和KEY值一起写入文本。

  测试了一下,本地异步导入、导出的QPS达到了10万,整整是redis-dump的40倍。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
存储 NoSQL 关系型数据库
使用lua脚本操作redis
使用lua脚本操作redis
99 0
|
移动开发 NoSQL Redis
阿里云Redis lua命令支持及相关限制说明
介绍阿里云Redis对lua命令的支持
11260 1
|
1月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
60 8
|
3月前
|
存储 NoSQL Redis
pyhon之对memcached及redis操作
pyhon之对memcached及redis操作
|
NoSQL JavaScript 前端开发
nodejs操作redis
nodejs操作redis
305 0
|
缓存 NoSQL JavaScript
nodejs 一篇掌握redis如何使用,如何作为缓存
nodejs 一篇掌握redis如何使用,如何作为缓存
nodejs 一篇掌握redis如何使用,如何作为缓存
|
JSON NoSQL 关系型数据库
JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)
无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的 MySQL的Master/Slave模式 ,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。
297 0
JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)
|
存储 前端开发 NoSQL
Rb(redis blaster),一个为 redis 实现 non-replicated 分片的 python 库
Rb(redis blaster),一个为 redis 实现 non-replicated 分片的 python 库
152 0
|
监控 NoSQL Linux
【Redis】redis安装与客户端redis-cli的使用(批量操作)
【Redis】redis安装与客户端redis-cli的使用(批量操作)
【Redis】redis安装与客户端redis-cli的使用(批量操作)
|
NoSQL 测试技术 数据库
基于async/non-blocking高性能redis组件库BeetleX.Redis
基于async/non-blocking高性能redis组件库BeetleX.RedisBeetleX.Redis是基于async/non-blocking模式实现的高性能redis组件库,组件支持redis基础指令集,并封装更简便的List,Hashset和Subscribe操作。
1396 0
下一篇
无影云桌面