用 Redis 去重,数据量大概 90w/月,不断累积,服务器需要多少内存

2018-11-12 11:49:52 +08:00
 CharlieBrown

现在有一台 4G 运行内存的 centos 服务器,

想将文章标题 md5 后存到 Redis 进行去重,

数据量大概是 90w/月,并且不断累积。

想问:

( 1 )服务器大概需要多少内存(以一年数据大概 1000w 计算)

( 2 ) Redis 除了改重要指令名字,加长密码,限制 ip 外,安全方面还有什么要注意的吗

( 3 )要是服务器重启,数据会丢失吗,持久化是 Redis 自动的还是得设置

12212 次点击
所在节点    Redis
40 条回复
CharlieBrown
2018-11-12 14:21:45 +08:00
@ClutchBear 好的,我去看看
CharlieBrown
2018-11-12 14:23:06 +08:00
@huashengshu
@jatesun
数据是文章标题,一般是 30 个汉字以内
CharlieBrown
2018-11-12 14:47:29 +08:00
@feverzsj 用 MySQL 去重可能造成数据库压力过大吧
colincat
2018-11-12 14:50:13 +08:00
@CharlieBrown 学习能力这么差吗,偶尔我也搞爬虫,bloom filter 这个完全满足你的需求,就用这个就行,不要考虑增长问题
gsralex
2018-11-12 14:50:37 +08:00
bloom filter 就是 hash 之后放到数组,和你用 redis 的 hash 做一个道理。就是对存储 hash key 有缩减。
likuku
2018-11-12 14:51:53 +08:00
@CharlieBrown #10 的建议就很好啊,MySQL 觉得压力太大,那就 Sqlite 嘛~ 现有数据重插一次
gsralex
2018-11-12 14:55:38 +08:00
mysql 压力很小的,用 mysql 就行,redis 是放在内存的。而且你为了做持久化的话,也会占用硬盘。并且 redis 的数据是在启动的时候一次性加载到内存的。你如果紧张内存就放 mysql,mysql 你加入索引,查询复杂度 log2n。
CharlieBrown
2018-11-12 15:25:05 +08:00
@colincat 好的,已经在研究 bloom filter,以前也看过一些


@likuku
@gsralex
其实就是想用用 Redis。。。现在已经是 MySQL 去重了。

我这边目前系统盘 20G,数据盘 200G,不知道能不能 Redis 装系统盘,数据放数据盘
gsralex
2018-11-12 15:28:16 +08:00
@CharlieBrown 可以,先考虑下 redis 是否需要持久化
CharlieBrown
2018-11-12 15:32:38 +08:00
@gsralex 应该是需要持久化的,毕竟要一直记录用于去重
gsralex
2018-11-12 15:34:16 +08:00
@CharlieBrown 那我觉得就用 mysql 好了
yzmm
2018-11-12 17:08:44 +08:00
sort |uniq
Linxing
2018-11-12 18:50:33 +08:00
持久化常用的两种 配置文件中都可以改
2owe
2018-11-12 19:12:18 +08:00
如果查询稳定,某秒不过百,建议数据库吧;架构简单易维护。
metrxqin
2018-11-12 22:24:44 +08:00
我不准备正面回应你的问题,只想谈谈这种设计引入的成本和风险。

根据上述设计,存储前必须要先计算标题 MD5 值,连接 Redis 检查 MD5 是否存储,最终存储到 SQL 数据库。

计算、时延成本:
首先,计算 MD5 值十分消耗 CPU 资源,其次查询 Redis 将引起额外的网络时延,保存新的 MD5 也会产生网络时延。

单点风险:
由于 OP 仅部署单个 Redis,整个系统存在单点故障的风险。这样的系统无疑极其脆弱,一旦 Redis 崩溃将导致业务中断(无法保存新的文章),因此必须再增加两台主机来构成 Redis Sentinal 集群,成本将大大增加。

编码、调试、诊断困难:
必须在本地环境配置 Redis 服务器方可调试,同时需要处理 Redis 请求失败的情况。生产环境一旦发生异常,不容易诊断。

维护成本:
需要额外维护三台 Redis 服务器。
rebill
2018-11-12 23:38:44 +08:00
BloomFilter 原理,实现及优化: http://oserror.com/backend/bloomfilter/
CharlieBrown
2018-11-13 09:42:35 +08:00
@2owe
好的,肯定是每秒不过百,

之所以想用 Redis,除了学习使用外,

其实还有一个原因是我们的 MySQL 数据库最初设计的很烂,导致后期很多问题,崩溃什么的。

加上我不是那边的人员,不好插手,所以才想用 Redis,算是缓解那边压力吧
CharlieBrown
2018-11-13 09:48:24 +08:00
@metrxqin
说的很全面,长见识了。

不过我们产品一共才 3 个服务器。。。要 3 台 Redis 来维持一个健壮的系统,显然老板是不会同意的。

由于文章的表是在 MySQL 上,所以 Redis 其实是只有标题的 md5 值 加上未来的一个 ip 池

一旦 Redis 数据库丢失 ,我能想到的做法也只有从 MySQL 提取文章标题再传入 Redis


或者 Redis 不保存标题 md5 值,直接使用标题?
susecjh
2018-11-13 09:51:53 +08:00
可以看看 pika
colincat
2018-11-13 13:50:40 +08:00
就这么一个小东西考虑太多就是过度设计了,孩子

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

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

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

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

© 2021 V2EX