Redis Redis 数据库 数据同步到 MySQL 有啥方案

ihlayy · 2013年01月14日 · 最后由 rasefon 回复于 2014年12月29日 · 53893 次阅读

redis 做主数据库,数据分析和查询在 mysql 中,需要把数据从 redis 同步到 mysql

有什么解决方案?gem 或者思路?谢谢。需要考虑数据的一致性,其实自己写

应该是可以的,有没有现成的类库什么的?

来点思路也行额。。有做过的吗

建议直接在 redis 中做分析和查询,或者在往 redis 存数据的所有地方都加一个往 mysql 存数据的方法... redis 和 mysql 数据的范式是完全不一样的,转换就是一个大问题,恐怕很难找到现成的类库,找到也不一定符合要求。

redis 也有不少给查询和分析使用的方法,还可以执行 server side lua: http://redis.io/commands/eval, 基本能解决缺少 average(), sum() 等函数的问题

#2 楼 @luikore 谢谢啊,现在看了下,有几种思路,但是感觉都不是很优雅且有一定的复杂度,抛砖引玉 1)在所有 redis 增,删,改数据的地方,处理完之后,放到队列,由 MYSQL 处理队列中的东西 缺点就是,代码估计很难看,而且这部分属于系统而外的东西。不爽

2)redis-dump,redis-rdb 之类的工具导出数据并同步 https://github.com/nrk/redis-rdb 导出数据有两种模式 a. rdb 文件 ( redis 做的快照,这个文件看起来是会重新整理的,所以所 sync 的时候可能不方便,不便于判断哪些数据是删除了的,而且需要重新把所有数据检查一遍,这个恐怕不好) b. aof 文件 ( 利用这种,可以有一个 offset 标记同步到哪儿了,如果失败了,或者下次 sync 的时候,从 offset 开始解析命令 ) 问题在于,怎么对应 redis 的命令 和 mysql 的 db 结构,如果 mysql 的 db 结构和 redis 不同的时候, 比如有中间表,也需要想办法处理

3) 直接读 redis db,在 redis 对象中需要加上 create_at ,update_at,需要额外的记录 deleted 的对象。sync 的时候记下 updated_at, 下次 sync 找到 udpated_at 之后的数据进行处理。

redis做主数据库,这是啥应用 ...

#4 楼 @bhuztez 手机端游戏类的,前期可能先这样弄吧,写入比较大。 估计数据量大的时候,会考虑持久化一部分到硬盘。

mysql 主要是怕处理全文索引,一些复杂查询 redis 不太好做

#5 楼 @ihlayy redis 做复杂查询很容易啊...全文索引就和数据库无关吧...

#6 楼 @luikore

建索引得占内存啊,如果是从 description 之类的字段里索引,不一定划算的意思。

别用 mysql 了,多买几个 ups,搞个 100g 内存就行了哈哈。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号