redis 本身有持久化,为什么还要写进 mysql 呢?

2015-09-10 09:34:10 +08:00
 chuanwu

redis 本身的持久化做得挺靠谱的,为什么还要多一个定时任务来写进 mysql?
如果是因为防止恶意攻击被 flush 的话, mysql 也不大可能会幸免啊。

33182 次点击
所在节点    Redis
62 条回复
fxxkgw
2015-09-10 13:12:19 +08:00
1 ,突然掉电
2 ,内存出问题
hooopo
2015-09-10 13:32:11 +08:00
MySQL 不只是存储啊,还有 SQL 这样的查询接口...
zhujin
2015-09-10 13:41:58 +08:00
为什么没人提 Redis 的时效时间呢....
ablegao
2015-09-10 14:05:34 +08:00
我阐述一下我的观点,


1.我记得是先有得 memcache , 后推出的 redis , 增加了数据运算功能, hash 和队列等,当时都不支持固化,起点都是提高访问速度,减少数据压力, redis 分析市场需求,尝试推出的本地固化功能,可实际应用中是这样的, 数据会分为热数据和冷数据,或者称为活跃数据和非活跃数据,全都在 redis ,显然长期下来并不合理, redis 的 RDB 快照和 AOF 纪录都会有一定的硬盘负担。关系数据库又是必不可少的,项目中多少都会用, 既然少不了, 索性不如更多的利用起来, redis 可以是一个小硬盘,多内存的专属服务器集群, 专心做缓存。 mysql 专心做存储。(补充, redis 在热数据冷数据的区分上,是支持的,可以将冷数据固化起来,有需要时提取出来, 但作为 key 的值,会一直在内存中。)

2. 没有可靠的先例或者有谁把 redis 本身的固化机制用的很好又不出问题。那在这个前提下, redis 本身在内存崩溃和重启数据恢复复杂且不确定是否数据完整的情况下,过渡依赖 redis 自身固化机制, 是在给上线的项目找麻烦。所以,同上观点, 把数据转储到一个关系数据反而更容易一些。

其实这些都是需求催生的, 所以有了很多类似于 leveldb 这种纯硬盘的 kv 数据库。 redis 的起点是 cache 。
Bluecoda
2015-09-10 14:43:29 +08:00
redis 相比 mysql 有几个缺点:
1 ,内存占用巨大
2 ,持久化并不一定是实时的,此时掉电或者其他故障可能会有大量的数据丢失

存 mysql 有几个好处:
1 ,内存占用相比 redis 小很多
2 , mysql 除了存储,还有 sql 这个强大的东西

结论,楼上说什么思维固化,不是这么一回事,我们用东西,要看清楚每一种工具的适用场景,而不是一味的相信新技术就必然好于旧的技术。而是要,遇到什么问题,就用什么工具。说思维固化的那些人,其实他们的思维才真正的固化,做不到灵活的使用手上的工具。
jiangyz
2015-09-10 16:08:14 +08:00
@msxcms +1
yanze0613
2015-09-10 17:44:02 +08:00
主要还是方便支持后期的数据整理工作吧,然后相对来说,大家还是更熟悉 sql
xgdyhaiyang
2015-09-10 18:31:03 +08:00
redis 不支持事务,查询不方便
wangchen
2015-09-10 18:58:54 +08:00
* mysql flush 数据到磁盘也是“异步”的,也会有丢失数据的可能。

原因:

首先,数据总有“冷”、“热”之分,前者放在 redis 里显然浪费资源。

其次,性能、成本,最终是一个权衡的问题。举例,有 model ( name, last_updated_at ),需求是通过 name 获取 last_updated_at 。看来放 reds 里面又快又美,但当数据到一定量级时,比如 1 亿、 10 亿条, reds 方案的成本会相当高,而 mysql 方案牺牲一点点性能,可以节省大量成本。
nandaye
2015-09-10 19:03:23 +08:00
技术还是基于业务的 使用新技术风险比较大 安全稳定才是王道 为了安全稳定花的金钱和时间都是值得的 数据出现一次问题那后果就很大了 我们公司因为北京某银行出现一次故障推荐所有入职员工不要办理这个银行的公积金联名卡
hellokittyer
2015-09-10 19:22:03 +08:00
为什么不吃玉米替代主食米饭呢?
redis 能事务么
RemRain
2015-09-10 20:53:52 +08:00
不错的面试题啊~
1. 场景不一样, redis 的持久化是附加功能, mysql 的持久化是核心功能
2. redis 的 flushdb 、 flushall 太犀利了,用 redis 来持久化数据总感觉不靠谱
3. 持久化机制不一样,举个例子来说,当数据量达到 10G 的时候,你改了几条数据, mysql 只增量地持久化这几条数据;而 redis 只知道自己该持久化了,然后把 10G 数据完整地从内存 dump 到磁盘,是不是很过瘾
GitFree
2015-09-10 21:38:50 +08:00
只用 redis 废弃 mysql ,使用的时候确实很爽,突然有需求做个统计或者架构改变做数据迁移就闷逼了
binux
2015-09-10 21:45:16 +08:00
3 年前的感想: redis 的持久化,特别是 AOF 一点也不靠谱,对性能影响太大, 开过之后再也不想开了. RDB 会丢数据.
rrfeng
2015-09-10 22:02:30 +08:00
redis 的持久化并不靠谱。当然是相对于各种 DB 来说。而且无论是 RDB 还是 AOF 对性能影响都不小,缓存就做好缓存的事情吧。
socrates
2015-09-11 18:24:25 +08:00
@snailsir 用个异步队列就 OK 了
chuanwu
2015-09-12 11:43:44 +08:00
@binux 能具体说说当时的场景吗?

@hippoboy 用 cron 事件,通过时间,或者根据新增数据的数量。
konakona
2016-04-24 13:38:46 +08:00
写入 MYSQL 可以进行一些查询和管理界面咯。
XDMonkey
2017-04-18 14:31:43 +08:00
@stackpop 事务+1
binaryify
2019-06-26 18:57:21 +08:00
redis 的存储是为了恢复状态,尽可能保留数据,正经数据肯定得存到正常数据库的

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

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

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

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

© 2021 V2EX