各位前辈,我请教一个 Redis 问题。
使用 Redis 实现了网站评论的赞踩,排行榜功能。请问,这些热数据,在什么时机从数据库里面读入,什么时机持久化到数据库中呢?
这个问题有最佳实践不?
感谢!
各位前辈,我请教一个 Redis 问题。
使用 Redis 实现了网站评论的赞踩,排行榜功能。请问,这些热数据,在什么时机从数据库里面读入,什么时机持久化到数据库中呢?
这个问题有最佳实践不?
感谢!
|
1
redis 也能持久化啊
|
|
cloudzhouMay 14, 2017
2
redis 使用内存非常大,你可以考虑热点放在 redis, 比如评论前 100 条,之后走 mysql 搜索
|
|
odooooMay 14, 2017
3
1. 异步脚本定时同步。
2. 在 redis 中记录上次同步时间,由程序判断来同步进数据库。 |
|
xia0ta0May 14, 2017
4
Redis 自身的持久化完全能够满足这种需求
|
|
stabcMay 14, 2017
5
跑题一下:个人建议是顶踩这一块放弃 redis,毕竟内存足够的话,依靠 MYSQL 自己的缓冲,对 MYSQL 的操作本来就是对内存的操作,性能上没有问题。而且顶踩和依据顶踩做排序不是更适合用关系型数据库么。倒是可以用 redis 来做排行榜的缓存。
|
|
ImmortalMay 15, 2017
7
没这类经验 但是突然想到 是不是可以模仿 redis 落地的机制 自己设定一个合适的值(整除就是意味着到达)然后落地
再结合前面说的 不是所有评论就等于热数据 可以取评论最热门的那几条 |
|
ming2050May 15, 2017 via iPhone
8
个人认为可以通过读 aof 文件的方式来持久化
|
|
changhe626May 15, 2017
9
可以使用 mysql/oracle 进行持久化的,小伙子,你可以百度
|
|
OuyanganMay 15, 2017
10
你可以写到 redis,不能写到 mysql 么。。。
|
|
jianzhiyao020May 15, 2017
11
redis 作为 mysql 缓冲区即可
|
|
kaka8wpMay 15, 2017
12
每小时往数据库备份一次
|
|
ahkxhylMay 15, 2017
13
关注下~
|
|
1023400273May 15, 2017
14
坐等大神解答
|
|
vus520May 15, 2017
15
现在有不少 redis 异步同步的方案了
比如,pika 的同步镜像方案,就是读 redis 的 binlog,跟 Mysql 一样,用来同步复制主的数据到从,从而实现复制和集群。 要复制一份到 mysql,基于 binlog 可以做一个 parse 即可。 |
|
woshixiaohao1982May 15, 2017
16
redis 自带持久化 使用 AOF 写时 更新
|
|
gouchaoerMay 15, 2017
17
你搞清楚,凡是写必须马上持久化
redis 是读缓存 |
|
crazyneoMay 15, 2017
18
@vus520 你这段话里槽点太多,你这不是一知半解,是半知无解。
redis 从 2.6 版本开始支持复制,2.8 以后开始支持 psync,这些复制都是纯异步的。 此外,redis 不存在 binlog,只有 aof 和 rdb,前者是类似 binlog 的操作集合,可以通过 bgrewriteaof 进行重写,后者是类似 mysqldump 出的文件一样是某个时间点的数据状态记录。 排行榜之类的功能没必要持久化到 mysql 数据库里,因为这些数据不会是核心业务数据,直接用 redis 自带的 aof 功能即可,但这个会比较消耗性能(比不开 aof 时相差 20%-30%性能),那就自己写个 cron 脚本通过 bgsave 每日做一次 rdb 备份。 |
|
changweiMay 15, 2017 via Android
19
首先还是要看服务器负载情况,一般情况下还是挑人流量少的时间点把,不可能数据库都已经压力很大的情况下你这边还在做持久化存储,这个可以查看各种监控数据来判断的,或者写个脚本自动根据数据库连接数,cpu,内存之类的判断是否可以进行持久化操作任务。
|
|
vus520May 15, 2017
20
@crazyneo 你对 redis 了解比较详细。抬自己的时候把别人也踩一下,漂亮。
楼主要的是持久化 Mysql 的方案,你来一个不需要。 我说的 binlog 指的是这类基于 log 方案,redis 除了 aof,monitor 也可以,这些增删改的原始行为都叫 binlog,ok ?我说 binlog 基本上大家就都明白了。 |
|
crazyneoMay 15, 2017
21
@vus520 本来踩一脚就完了,你这话说的我不得不踩两脚—— redis 的复制实际是基于 rdb 的,你这个说法会让别人以为 aof 可以做数据复制,进而损失复制过程中缓存的数据,即使是拿 aof 做数据迁移,也要评估停机时间对业务的影响。
此外,对于排行榜类功能,确实就不需要到 mysql 层,这牵涉到一个设计问题,就是 redis 本身是作为读热点存在的,他不应该主动往 mysql 这种持久化存储层去写数据,而应该只有读,你要做排行榜之类应该是业务上异步双写,而不是让 redis 主动往 mysql 去写——在 redis 内写单个操作是原子化的,到 mysql 你还得做个事务保证同步万一不成功还要考虑回滚?尤其是你要从 redis 往 mysql 写很可能还是个长事务,一执行好几分钟,到时候骂娘的可不仅仅是运维。 |