Redis 数据何时持久化到 MySQL 里面呢?

2017-05-14 21:26:42 +08:00
 hujianxin

各位前辈,我请教一个 Redis 问题。

使用 Redis 实现了网站评论的赞踩,排行榜功能。请问,这些热数据,在什么时机从数据库里面读入,什么时机持久化到数据库中呢?

这个问题有最佳实践不?

感谢!

7336 次点击
所在节点    程序员
22 条回复
Mirana
2017-05-14 21:37:51 +08:00
redis 也能持久化啊
cloudzhou
2017-05-14 21:41:07 +08:00
redis 使用内存非常大,你可以考虑热点放在 redis, 比如评论前 100 条,之后走 mysql 搜索
odoooo
2017-05-14 22:17:53 +08:00
1. 异步脚本定时同步。

2. 在 redis 中记录上次同步时间,由程序判断来同步进数据库。
xia0ta0
2017-05-14 22:58:42 +08:00
Redis 自身的持久化完全能够满足这种需求
stabc
2017-05-14 23:03:33 +08:00
跑题一下:个人建议是顶踩这一块放弃 redis,毕竟内存足够的话,依靠 MYSQL 自己的缓冲,对 MYSQL 的操作本来就是对内存的操作,性能上没有问题。而且顶踩和依据顶踩做排序不是更适合用关系型数据库么。倒是可以用 redis 来做排行榜的缓存。
billlee
2017-05-14 23:55:59 +08:00
@stabc #5 MySQL 的默认配置下,commit 是要对 journal 做 sync 的,单个机械硬盘的 IOPS 大概也就是 100 了。
Immortal
2017-05-15 02:39:21 +08:00
没这类经验 但是突然想到 是不是可以模仿 redis 落地的机制 自己设定一个合适的值(整除就是意味着到达)然后落地
再结合前面说的 不是所有评论就等于热数据 可以取评论最热门的那几条
mringg
2017-05-15 06:00:34 +08:00
个人认为可以通过读 aof 文件的方式来持久化
changhe626
2017-05-15 08:06:53 +08:00
可以使用 mysql/oracle 进行持久化的,小伙子,你可以百度
Ouyangan
2017-05-15 08:58:22 +08:00
你可以写到 redis,不能写到 mysql 么。。。
jianzhiyao020
2017-05-15 09:27:08 +08:00
redis 作为 mysql 缓冲区即可
kaka8wp
2017-05-15 09:34:45 +08:00
每小时往数据库备份一次
ahkxhyl
2017-05-15 09:36:27 +08:00
关注下~
1023400273
2017-05-15 09:44:17 +08:00
坐等大神解答
vus520
2017-05-15 11:47:59 +08:00
现在有不少 redis 异步同步的方案了
比如,pika 的同步镜像方案,就是读 redis 的 binlog,跟 Mysql 一样,用来同步复制主的数据到从,从而实现复制和集群。
要复制一份到 mysql,基于 binlog 可以做一个 parse 即可。
woshixiaohao1982
2017-05-15 12:01:40 +08:00
redis 自带持久化 使用 AOF 写时 更新
gouchaoer
2017-05-15 13:08:05 +08:00
你搞清楚,凡是写必须马上持久化
redis 是读缓存
crazyneo
2017-05-15 15:58:04 +08:00
@vus520 你这段话里槽点太多,你这不是一知半解,是半知无解。
redis 从 2.6 版本开始支持复制,2.8 以后开始支持 psync,这些复制都是纯异步的。
此外,redis 不存在 binlog,只有 aof 和 rdb,前者是类似 binlog 的操作集合,可以通过 bgrewriteaof 进行重写,后者是类似 mysqldump 出的文件一样是某个时间点的数据状态记录。

排行榜之类的功能没必要持久化到 mysql 数据库里,因为这些数据不会是核心业务数据,直接用 redis 自带的 aof 功能即可,但这个会比较消耗性能(比不开 aof 时相差 20%-30%性能),那就自己写个 cron 脚本通过 bgsave 每日做一次 rdb 备份。
changwei
2017-05-15 16:05:26 +08:00
首先还是要看服务器负载情况,一般情况下还是挑人流量少的时间点把,不可能数据库都已经压力很大的情况下你这边还在做持久化存储,这个可以查看各种监控数据来判断的,或者写个脚本自动根据数据库连接数,cpu,内存之类的判断是否可以进行持久化操作任务。
vus520
2017-05-15 16:08:40 +08:00
@crazyneo 你对 redis 了解比较详细。抬自己的时候把别人也踩一下,漂亮。

楼主要的是持久化 Mysql 的方案,你来一个不需要。

我说的 binlog 指的是这类基于 log 方案,redis 除了 aof,monitor 也可以,这些增删改的原始行为都叫 binlog,ok ?我说 binlog 基本上大家就都明白了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/361294

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX