CharlieBrown
V2EX  ›  Redis

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

  •  
  •   CharlieBrown · Nov 12, 2018 · 13076 views
    This topic created in 2767 days ago, the information mentioned may be changed or developed.

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

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

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

    想问:

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

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

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

    40 replies    2018-11-13 13:50:40 +08:00
    leriou
        2
    leriou  
       Nov 12, 2018   ❤️ 1
    90 万, 容量没问题, 还得考虑访问频次, 2, 重要指令没必要改, redis 部署为内网访问就行了,最好可以选择集群方案 3, 默认有持久化, 最好还是 自己配置一下 rdb+ aof 频次自己多尝试一下, 弄好持久化, 重启不会丢太多数据, 会丢 1-2s 的数据
    luozic
        3
    luozic  
       Nov 12, 2018 via iPhone
    听说过 bloom filter 没有?你这内存大大有余量。
    dingyaguang117
        4
    dingyaguang117  
       Nov 12, 2018
    bloom filter +1
    很多年前造的轮子 https://github.com/dingyaguang117/BloomFilter
    colincat
        5
    colincat  
       Nov 12, 2018 via iPhone
    楼上说的没毛病,11 亿够用不,512m 内存就够啦
    huashengshu
        6
    huashengshu  
       Nov 12, 2018
    1000w 的短 key 也就 1-2G 吧,key 越多,内存膨胀越厉害,可以考虑分桶+hashmap
    如果不需要精确值,可以考虑 HyperLogLog、bitmap,redis 也支持这两种数据结构
    SummerWQM
        7
    SummerWQM  
       Nov 12, 2018
    还等什么 上 spark hadoop
    cdwyd
        8
    cdwyd  
       Nov 12, 2018 via Android   ❤️ 1
    才 90 万每月,现在的配置够用几年了
    huashengshu
        9
    huashengshu  
       Nov 12, 2018
    @SummerWQM 讲道理,spark/hadoop 是需要巨大成本的,1000w 一年的量,一个列式数据库就搞定了
    reus
        10
    reus  
       Nov 12, 2018   ❤️ 2
    一个数据库唯一键就能解决的事情
    CharlieBrown
        11
    CharlieBrown  
    OP
       Nov 12, 2018
    @leriou 好的,谢谢指点
    CharlieBrown
        12
    CharlieBrown  
    OP
       Nov 12, 2018
    @luozic
    @dingyaguang117
    @colincat
    bloom filter 听说过,不过不是上亿数据量以上才会使用吗
    CharlieBrown
        13
    CharlieBrown  
    OP
       Nov 12, 2018
    @SummerWQM 学习成本太大,我就做个爬虫去重而已。。
    zhengxiaowai
        14
    zhengxiaowai  
       Nov 12, 2018
    @CharlieBrown bloom filter 没有学习成本,两个命令而已,还有计算计算公式能评估错误率和所需要的容量,很好用。
    watzds
        15
    watzds  
       Nov 12, 2018 via Android
    90w 应该 90MB 不到,写入 redis 看一下内存占用
    jatesun
        16
    jatesun  
       Nov 12, 2018
    90w 跟没有数据有啥区别(如果一条数据没有图片超大文本之类的)
    ClutchBear
        17
    ClutchBear  
       Nov 12, 2018   ❤️ 1
    bloom filter,
    redis 4.0 以上版本, 开启插件就行.

    ./src/redis-server redis.conf --loadmodule /usr/rebloom/rebloom.so INITIAL_SIZE 1000000 ERROR_RATE 0.0001
    # 容量 100 万, 容错率万分之一, 占用空间是 4m

    需要的时候自动创建一个容量 100 万, 容错率万分之一的 bf key
    语法就是
    bf.add(key, value)
    ClutchBear
        18
    ClutchBear  
       Nov 12, 2018
    这个语法是手动创建一个新 key
    BF.RESERVE 2018_ccgp 0.0001 28000000
    容量是两千八百万, 占用空间是 64m
    feverzsj
        19
    feverzsj  
       Nov 12, 2018
    你先确定你是否要用 redis,为什么不用 mysql
    CharlieBrown
        20
    CharlieBrown  
    OP
       Nov 12, 2018
    @zhengxiaowai 我说的是 spark hadoop 的学习成本。。。
    CharlieBrown
        21
    CharlieBrown  
    OP
       Nov 12, 2018
    @ClutchBear 好的,我去看看
    CharlieBrown
        22
    CharlieBrown  
    OP
       Nov 12, 2018
    @huashengshu
    @jatesun
    数据是文章标题,一般是 30 个汉字以内
    CharlieBrown
        23
    CharlieBrown  
    OP
       Nov 12, 2018
    @feverzsj 用 MySQL 去重可能造成数据库压力过大吧
    colincat
        24
    colincat  
       Nov 12, 2018
    @CharlieBrown 学习能力这么差吗,偶尔我也搞爬虫,bloom filter 这个完全满足你的需求,就用这个就行,不要考虑增长问题
    gsralex
        25
    gsralex  
       Nov 12, 2018
    bloom filter 就是 hash 之后放到数组,和你用 redis 的 hash 做一个道理。就是对存储 hash key 有缩减。
    likuku
        26
    likuku  
       Nov 12, 2018
    @CharlieBrown #10 的建议就很好啊,MySQL 觉得压力太大,那就 Sqlite 嘛~ 现有数据重插一次
    gsralex
        27
    gsralex  
       Nov 12, 2018
    mysql 压力很小的,用 mysql 就行,redis 是放在内存的。而且你为了做持久化的话,也会占用硬盘。并且 redis 的数据是在启动的时候一次性加载到内存的。你如果紧张内存就放 mysql,mysql 你加入索引,查询复杂度 log2n。
    CharlieBrown
        28
    CharlieBrown  
    OP
       Nov 12, 2018
    @colincat 好的,已经在研究 bloom filter,以前也看过一些


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

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

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

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

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

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

    维护成本:
    需要额外维护三台 Redis 服务器。
    rebill
        36
    rebill  
       Nov 12, 2018
    BloomFilter 原理,实现及优化: http://oserror.com/backend/bloomfilter/
    CharlieBrown
        37
    CharlieBrown  
    OP
       Nov 13, 2018
    @2owe
    好的,肯定是每秒不过百,

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

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

    加上我不是那边的人员,不好插手,所以才想用 Redis,算是缓解那边压力吧
    CharlieBrown
        38
    CharlieBrown  
    OP
       Nov 13, 2018
    @metrxqin
    说的很全面,长见识了。

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

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

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


    或者 Redis 不保存标题 md5 值,直接使用标题?
    darylc
        39
    darylc  
       Nov 13, 2018
    可以看看 pika
    colincat
        40
    colincat  
       Nov 13, 2018 via iPhone
    就这么一个小东西考虑太多就是过度设计了,孩子
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   966 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 22:30 · PVG 06:30 · LAX 15:30 · JFK 18:30
    ♥ Do have faith in what you're doing.