首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Redis

Redis适合存储海量小文件吗?

  •  
  •   Tianpu · 2013-03-30 23:59:35 +08:00 · 12222 次点击
    这是一个创建于 2393 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大约有100万左右的小文件 是动态生成的.svg图像 每个小于4k 过期时间是86400秒

    并发需求上不是很大 .svg的生成比较耗费资源 虽然耗时也就是0.02秒左右

    为了不给系统留下隐患 还是需要缓存下

    硬件上大约能拿出4G内存来存储

    我只有使用memcachedb的经验

    有人能给点建议,redis适合我的这个需求吗?
    9 回复  |  直到 1970-01-01 08:00:00 +08:00
        1
    yuyuyu101   2013-03-31 00:45:22 +08:00   ♥ 1
    memcached对于大字符串效率更高
        2
    ElmerZhang   2013-03-31 15:53:33 +08:00   ♥ 1
    直接用Memcached就可以了,反正内存够
        3
    thetcc   2013-03-31 16:30:39 +08:00   ♥ 1
    小文件是多小?只要你存储的的内容不要超过实际内存,应该没什么问题。redis里单个value的最大值是512MB,所以你小文件是绝对不会超过的。redis的key,value都可以是二进制数据或字符串。
        4
    twm   2013-03-31 21:14:29 +08:00 via iPhone   ♥ 1
    100w,小意思
        5
    ipconfiger   2013-03-31 21:56:46 +08:00   ♥ 1
    你还不如直接/dev/shm来得直接简单点呢
        6
    Livid   V2EX Moderator   2013-03-31 22:00:11 +08:00   ♥ 1
    几个问题:

    - 实际占用的内存会大于 4G
    - 如果超过可用内存,Redis 会直接崩溃
    - 崩溃的时候可能会丢一部分数据
    - 崩溃之后再重启时,会需要花一点时间将数据从磁盘恢复到内存中,数据越多,这个时间就越长
        7
    moyaya   2013-03-31 23:18:37 +08:00   ♥ 1
    redis非常吃内存啊!
        8
    lookhi   2013-03-31 23:46:26 +08:00   ♥ 1
    并发需求上不是很大 .svg的生成比较耗费资源 虽然耗时也就是0.02秒左右

    压力都不大啊,每次都动态生成吧。做最大1000个图片的缓冲队列就好了。
        9
    Tianpu   2013-04-01 18:17:34 +08:00
    感谢所有回复者 我也是印象中存在一个redis可能会崩溃的印象

    查找一翻资料后 一开始使用文件存储 最终修改成mysql存储

    文件存储是这样的结构:
    {basedir}/substr(crc32({name}),1,3)/{name}.svg
    由于未知的原因,竟然偶尔会失败,不确定是硬盘缓存导致写入失败还是别的什么原因,总之产生了很诡异的错误,大致是文件写造成的,而且是比较随机的出现

    然后又产生了别的需求 就修改成myisam存储了 目前还算稳定 暂时没有发现问题

    我不介意丢失文件 反正恢复不麻烦 只是不想偶尔还要去检查下系统是不是完蛋了

    楼上所有回复者已经送钱

    谢谢
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   863 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 21:49 · PVG 05:49 · LAX 14:49 · JFK 17:49
    ♥ Do have faith in what you're doing.