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

一个问题,博客需不需要 Redis?

  •  
  •   lufficc ·
    lufficc · 2016-09-25 13:53:25 +08:00 · 12382 次点击
    这是一个创建于 2987 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天写的laravel-blog被老外看到了,然后问我了一个问题:

    Why do we need Redis for a blog system? If this is truly a fast blog it should be fast just using a database, no?

    我简单回单了一句,为了缓存,提高速度,结果他不依不饶:

    Depends on the use case. What are we caching? Indexed queries in a relational database are usually very fast. Adding Redis makes for a more complex stack so it must be motivated. Are we not just talking about saving lower single-digit milliseconds here? And to do that we add a hard dependence on Redis, making hosting more complex, error-prone and expensive. I love Redis and use it when it's appropriate. I also love relational databases because they solve complex use cases in a performant way. I asked why it is motivated to add Redis for a blog engine, and I just get a hand-wavy "for caching" as an answer. What do we need to cache and why can't that problem be solved without the need for a Redis cache?

    回答了一长串,具体看这里:here 截图:.

    所以到底要不要缓存,我该怎么回答?强大的 V 友帮帮我

    104 条回复    2017-04-20 14:12:38 +08:00
    1  2  
    daya
        1
    daya  
       2016-09-25 13:57:38 +08:00 via Android   ❤️ 1
    自己的博客还不是想加啥就加啥,你就回答他: just for fun!
    audestick
        2
    audestick  
       2016-09-25 14:01:20 +08:00
    最好再搞个 cluster...
    lichifeng
        3
    lichifeng  
       2016-09-25 14:03:16 +08:00 via iPhone
    需要 自己的博客本来就是学习各种技术的试验田
    反而一些生产环境才需要根据实际情况做决断
    lufficc
        4
    lufficc  
    OP
       2016-09-25 14:07:53 +08:00 via Android
    @lichifeng 同意
    abelyao
        5
    abelyao  
       2016-09-25 14:08:22 +08:00 via iPhone   ❤️ 2
    技术角度:就想楼上说的博客是试验田,可以尝试使用各种技术;
    产品角度:网站该不该上缓存不是看访问量么?跟是不是博客没有一点关系;
    lufficc
        6
    lufficc  
    OP
       2016-09-25 14:09:02 +08:00 via Android
    @daya 感觉老外真的好较真,还说加 redis 会对服务器带来一定影响,不过服务器多一个软件性能影响大不大?
    hanai
        7
    hanai  
       2016-09-25 14:09:28 +08:00
    玩的话需要,正常不需要。
    添加个 redis 增加了复杂度。
    audestick
        8
    audestick  
       2016-09-25 14:10:09 +08:00
    @luffylcc 当然.因为是缓存,所以吃内存.典型的以空间换时间的关系.
    lufficc
        9
    lufficc  
    OP
       2016-09-25 14:11:26 +08:00 via Android
    @audestick 你这么一回答,有点动摇了。。。。
    qgy18
        10
    qgy18  
       2016-09-25 14:11:56 +08:00 via iPhone   ❤️ 2
    我的博客就用了很多完全没必要的技术,就是为了玩,自己开心就好。
    https://imququ.com
    maddot
        11
    maddot  
       2016-09-25 14:12:20 +08:00
    it's just a toy project for practicing my skills
    audestick
        12
    audestick  
       2016-09-25 14:13:31 +08:00
    @luffylcc 放心上...我说了,最好搞一个集群,然后时不时来点压测,测试自己的网站的延迟和首屏渲染速度...反正都是练习和玩儿,just have fun
    mokeyjay
        13
    mokeyjay  
       2016-09-25 14:14:33 +08:00 via Android
    一般都不需要啊,除非你博客访问量爆炸,或者数据库 io low 到爆炸。当然如果你只是为了锻炼自己那随便加, 1 楼+1
    lufficc
        14
    lufficc  
    OP
       2016-09-25 14:21:26 +08:00
    @audestick 我慌了, v 友们真强大
    lufficc
        15
    lufficc  
    OP
       2016-09-25 14:21:55 +08:00
    @mokeyjay 博客新建的,额,基本没啥访问量
    bearqq
        16
    bearqq  
       2016-09-25 14:22:49 +08:00 via Android
    gae 增加 memcache 可以减少数据库查询次数, memcache 免费,数据库收费,或者说每日有限额。所以我写的博客是有 cache 的。

    另一个本地小项目每次访问需要数据库大量搜索 like %xxx%,所以搜索结果加 cache 了。
    lufficc
        17
    lufficc  
    OP
       2016-09-25 14:24:25 +08:00
    @qgy18 不错的博客,收藏,关注你 twitter 了,
    lufficc
        18
    lufficc  
    OP
       2016-09-25 14:30:16 +08:00 via Android
    @abelyao 回复他了
    benbenzhangqi
        19
    benbenzhangqi  
       2016-09-25 14:30:29 +08:00
    喜欢折腾就添加,不喜欢或者对速度没有要求的就算了
    gouchaoer
        20
    gouchaoer  
       2016-09-25 14:40:12 +08:00 via Android
    他说的没错,你增加 redis 依赖很不好,而且 vps 开个 redis 很不稳定。。。你可以利用 apcu 来做 cache
    lhbc
        21
    lhbc  
       2016-09-25 14:56:54 +08:00 via iPhone
    如果是想正经做个开源项目,不加。
    如果你一定要加,做成插件。
    FrankFang128
        22
    FrankFang128  
       2016-09-25 15:00:34 +08:00
    Do what you want to do.
    sherlocktheplant
        23
    sherlocktheplant  
       2016-09-25 15:01:40 +08:00
    He's right, but caching should at least be optional not a requirement, most blogs on the Internet don't get that large amount of traffic to justify using caching.
    smallpath
        24
    smallpath  
       2016-09-25 15:12:56 +08:00
    想呛他的话说法很多, 比如用 Redis 做 OAuth2 之类的
    zongren
        25
    zongren  
       2016-09-25 15:37:36 +08:00
    不需要加
    lufficc
        26
    lufficc  
    OP
       2016-09-25 15:39:11 +08:00
    @zongren
    lufficc
        27
    lufficc  
    OP
       2016-09-25 15:39:49 +08:00
    @smallpath OAuth2 怎么做,这个不得用数据库吗?
    lufficc
        28
    lufficc  
    OP
       2016-09-25 15:40:13 +08:00
    @FrankFang128 我也是这样想的
    neoblackcap
        29
    neoblackcap  
       2016-09-25 15:48:59 +08:00
    @luffylcc OAuth2 生成的 token 肯定是放 redis , token 还要放数据库,那样多慢多麻烦啊, redis 自动过期释放,存放 token 这样的信息超级好用
    Mirana
        30
    Mirana  
       2016-09-25 16:10:25 +08:00
    redis 当然比 mysql 访问快,redis 的数据全在内存里
    zongren
        31
    zongren  
       2016-09-25 16:13:05 +08:00
    @luffylcc 这个存硬盘都可以啊,不一定非得数据库吧
    smallpath
        32
    smallpath  
       2016-09-25 16:30:34 +08:00
    @luffylcc redis 就是内存型数据库啊
    janxin
        33
    janxin  
       2016-09-25 16:31:36 +08:00 via iPhone
    自己用随便搞
    给别人用还是别坑人家了
    Showfom
        34
    Showfom  
       2016-09-25 16:54:58 +08:00 via iPhone
    你就回答他 guan ni pi shi
    jarlyyn
        35
    jarlyyn  
       2016-09-25 17:05:25 +08:00 via Android
    实际上使用肯定不要,喜欢用是另一回事。

    对于博客来说, http server 的最终页面缓存比程序使用内部缓存实际多了。

    一般文件缓存也足够了。

    个人意见。
    loading
        36
    loading  
       2016-09-25 17:11:25 +08:00 via Android
    我会选择 sqlite 内存模式
    jhdxr
        37
    jhdxr  
       2016-09-25 17:24:24 +08:00   ❤️ 1
    我觉得问题所在是『 we add a hard dependence on Redis 』如果你是自己的网站写着玩那我所谓,上面一堆人已经说过了。但是如果你是一个开源项目,谨慎选择和添加依赖。像 redis 这种属于锦上添花型的你完全应该做成如果有,那么用,如果没有,那就降级到 db 。
    yidinghe
        38
    yidinghe  
       2016-09-25 17:32:33 +08:00 via Android
    如果是博客平台,可以考虑用 Redis ,个人博客就免了。
    kideny
        39
    kideny  
       2016-09-25 17:44:42 +08:00
    两个蛋疼的人,真的!我的小博客 www.jicker.cn ,每个月被各种流量攻击。
    lufficc
        40
    lufficc  
    OP
       2016-09-25 17:52:46 +08:00
    看了大家的回复,明白了, redis 只是一个选项,个人博客很大程度上不需要,谢谢大家
    dremy
        41
    dremy  
       2016-09-25 18:28:50 +08:00 via Android
    37 楼说得对,关键就是对于那些并不是很必要的功能,在没有足够的条件下能够做到优雅降级。
    sobigfish
        42
    sobigfish  
       2016-09-25 18:46:38 +08:00
    你开源的话减少依赖 做成扩展 或者可选包比较好
    yeshang
        43
    yeshang  
       2016-09-25 18:58:28 +08:00
    @qgy18 请问用了你博客里文章的技术. 能否达到和你一样的访问速度?
    Senorsen
        44
    Senorsen  
       2016-09-25 18:58:37 +08:00   ❤️ 3
    岔个话题,英文逗号句号这样的标点后请加空格…
    Phariel
        45
    Phariel  
       2016-09-25 19:13:22 +08:00 via Android
    没那么大的量级上什么 redis 有这功夫多打磨一下文章质量不是更好?
    tairan2006
        46
    tairan2006  
       2016-09-25 19:33:29 +08:00
    随便玩玩吧。。
    jerryfu
        47
    jerryfu  
       2016-09-25 20:36:28 +08:00
    @Senorsen 最基本的英文写作素养,赞同。
    kkzxak47
        48
    kkzxak47  
       2016-09-25 20:39:02 +08:00 via Android
    其实只是习惯性加上而已吧。确实不加又怎样,一个博客访问量能有多大?日活几十万?
    lan894734188
        49
    lan894734188  
       2016-09-25 21:08:23 +08:00 via Android
    高并发的话有好些 但是数据库 后端处理也要跟上才行
    kn007
        50
    kn007  
       2016-09-25 21:10:48 +08:00
    单纯为了玩。我有 mc 还有 redis ,反正各种折腾
    reus
        51
    reus  
       2016-09-25 22:08:36 +08:00
    @neoblackcap 数据库自己没有缓存吗以为?
    lufficc
        52
    lufficc  
    OP
       2016-09-25 22:08:56 +08:00 via Android
    @neoblackcap 学习了
    lufficc
        53
    lufficc  
    OP
       2016-09-25 22:09:17 +08:00 via Android
    Coder0
        54
    Coder0  
       2016-09-25 22:19:54 +08:00
    都说的差不多了 如果访问量的话,对浏览量大的文章或者首页文章做个缓存就好了
    neoblackcap
        55
    neoblackcap  
       2016-09-25 22:21:35 +08:00
    @reus 数据有缓存,但是缓存是可以定时过期?请问 mysql 的缓存能否做到 7200 秒之后过期?还有就是用户每次访问之后我要自动将 token 重新更新为 7200 秒,请问数据库如何操作。
    我自问见识浅薄,不知道如何仅适用数据库优雅地实现这些功能。若是你知道,还望告知
    Clarencep
        56
    Clarencep  
       2016-09-25 22:41:11 +08:00
    博客不就应该全静态化才更快么? Redis 什么的弱爆了。。。

    晒博时间: https://clarencep.com
    reus
        57
    reus  
       2016-09-26 00:08:49 +08:00
    @neoblackcap 我知道,懒得跟你讲,反正你也只是抬杠。
    jellybool
        58
    jellybool  
       2016-09-26 01:05:40 +08:00
    lslqtz
        59
    lslqtz  
       2016-09-26 01:09:10 +08:00
    http://www.hardwareunion.com
    https://www.loliwiki.org
    我表示我的全部站都用 memcache 。
    izoabr
        60
    izoabr  
       2016-09-26 01:25:11 +08:00
    啊?你们博客都不上 CDN 的么?
    ericls
        61
    ericls  
       2016-09-26 01:44:20 +08:00 via iPhone
    @Clarencep 硬盘比内存快?
    lincanbin
        62
    lincanbin  
       2016-09-26 01:57:35 +08:00
    从可靠性看,架构越复杂,可靠性越低。
    从用户体验看,几毫秒的差距很难被准确感知。
    从可维护性角度看,加入 Redis 提升了复杂度。
    从必要性看,系统访问量不一定需要这个。

    你说提高速度的理由其实站不住脚,你应该说你爱怎么玩怎么玩。
    leedstyh
        63
    leedstyh  
       2016-09-26 01:58:45 +08:00
    我觉得吧,楼主把 project 发到 reddit ,显然是想做一个通用的产品来推广,而不是个人使用,所以 “试验田”的说法显然不可取。

    其实对于 blog 来说,大多数的访问量不是很大,所以如果一定要 cache 的话,自己写代码, cache 到内存里,设置个若干天(比如 7 天)的过期时间。很简单的实现一下,不用那么多高级算法。

    老外计较的没错,多一个软件,就多了一些运维的工作。

    另外对于访问量大的,自己写 cache 就不如用 redis 了,楼主可以将 cache 部分做成个中间层,可以选择直接用内存 cache ,还是用 redis 做后端,让用户自己选择!
    hobbyliu
        64
    hobbyliu  
       2016-09-26 05:50:10 +08:00 via Android
    我的 blog 也用了 redis,www.okrd.cn
    wpzero
        65
    wpzero  
       2016-09-26 07:17:06 +08:00 via iPhone
    自己的 blog 肯定自己说了算。如果是个开源 bolg 项目,没必要加 redis ,如果可以做成静态生成可能更好。
    kn007
        66
    kn007  
       2016-09-26 07:26:08 +08:00
    https://kn007.net/

    我对比较大的页面,使用 redis ,小页面全部 mc
    lufficc
        67
    lufficc  
    OP
       2016-09-26 08:18:48 +08:00 via Android
    @leedstyh 谢谢大家建议,项目里已经去掉 redis 是必须的了, v 友们真强大
    Clarencep
        68
    Clarencep  
       2016-09-26 09:01:33 +08:00
    @ericls 硬盘当然没有内存快。但是你存 redis 里面的话, nginx/apache 又没法直接访问 redis ,还得经过 php 这样就慢下来了。 而生成静态页面后,让 nginx/apache 直接访问静态页面的文件其实会比走 PHP 要快。可以自己分别测一测两种方式哪种快。就我的服务器而言,还是静态文件比较快。
    quericy
        69
    quericy  
       2016-09-26 09:07:57 +08:00
    @luffylcc 既然是开源出来的项目,redis 作为可选项比较合适.因为使用者的场景可能是多样的,有的没多少访问量,有的访问量大,有的磁盘 io 捉急....
    做成可选配置时,对于没 redis 使用需求的人来说,降级到 DB,节约了维护成本;对于需要使用 redis 的人来说,无需再定制修改项目代码,只是开启了相关配置就能撑住更多的流量请求
    ppwangs
        70
    ppwangs  
       2016-09-26 09:16:34 +08:00
    博客不都是最后做静态化么,这种一次性生成内容的东西,还要每次从 db 取东西么……
    yumijie
        71
    yumijie  
       2016-09-26 09:17:54 +08:00
    有点杀鸡用牛刀
    Perry
        72
    Perry  
       2016-09-26 09:20:53 +08:00
    Agree to disagree
    charove
        73
    charove  
       2016-09-26 09:28:01 +08:00
    @Clarencep 十秒打开。
    solaya
        74
    solaya  
       2016-09-26 09:33:28 +08:00
    我自己写的小玩意 还加了个 cluster 但没开源
    lufficc
        75
    lufficc  
    OP
       2016-09-26 09:42:50 +08:00 via Android
    @Clarencep 我试试去
    lufficc
        76
    lufficc  
    OP
       2016-09-26 09:43:37 +08:00 via Android
    @ppwangs 自己搞过静态的, hexo ,但,总感觉不灵活。。。。。。
    lufficc
        77
    lufficc  
    OP
       2016-09-26 09:44:17 +08:00 via Android
    @solaya 可以考虑开源让大家学习下😂
    zhangv
        78
    zhangv  
       2016-09-26 09:45:36 +08:00
    觉得这本身就是一个伪问题,如果没有答案或者答案很多,还能称为“问题”吗?
    xiaoyu9527
        79
    xiaoyu9527  
       2016-09-26 10:02:40 +08:00
    回答一句 interesting!
    ppwangs
        80
    ppwangs  
       2016-09-26 10:12:58 +08:00
    @luffylcc 我的意思是动态页面静态化,并非伪静态。内容完成以后,直接生成 html 文件, nginx 直接访问这个 html ……
    BreakingBad
        81
    BreakingBad  
       2016-09-26 10:31:21 +08:00
    简单的说楼主因为用英语跟老外对话了几段就膨胀高潮了,把这毫无讨论价值的问题搬到这儿来秀
    lufficc
        82
    lufficc  
    OP
       2016-09-26 10:53:09 +08:00 via Android
    yytsjq
        83
    yytsjq  
       2016-09-26 10:58:46 +08:00
    @Clarencep Nginx 可以通过相关模块直接操作 Redis/Memcached 等客户端,如果有缓存的话,则直接跳过了 PHP/MySQL 了:

    https://github.com/openresty/srcache-nginx-module#caching-with-redis

    如果使用 Lua redis 的话,效果更好:
    https://github.com/openresty/lua-resty-redis
    shyling
        84
    shyling  
       2016-09-26 11:02:55 +08:00
    没有特别的必要
    ipconfiger
        85
    ipconfiger  
       2016-09-26 11:32:30 +08:00
    博客, 静态化就好了, 再改一下输出客户端的 expire, 要是不怎么修改的话, 你改成 1 年, 第二次访问网络都不走, 你再 redis 都没这个快
    Clarencep
        86
    Clarencep  
       2016-09-26 12:11:46 +08:00
    @yytsjq 涨姿势了。 如果这样直接把 redis/memcache 集成到 nginx 中,那肯定会比访问静态文件快。 可是偶的 VPS 只有 512M 怕开不起 redis/memcache...
    Clarencep
        87
    Clarencep  
       2016-09-26 12:17:52 +08:00
    @charove 你的坐标是哪里?通过啥宽带访问的?可能是 https 认证得比较慢 -- 没钱,所以用的某通的免费证书。 换用 http 访问试试呢: http://www.clarencep.com
    Clarencep
        88
    Clarencep  
       2016-09-26 12:20:02 +08:00
    @charove 奇怪,就是 https 也不应该 10 秒打开的呀 我本地是 10~50ms ,这个评测也是还蛮快的: http://www.mmtrix.com/evaluate/result/testid/fa521d2ec2df456a55a3f43ce0d8ff3c
    Lcys
        89
    Lcys  
       2016-09-26 12:22:44 +08:00
    用 redis 文章页面打开速度明显提升
    lufficc
        90
    lufficc  
    OP
       2016-09-26 15:32:04 +08:00 via Android
    @yytsjq 长知识了
    firefffffffffly
        91
    firefffffffffly  
       2016-09-26 15:55:49 +08:00   ❤️ 1
    其实问题关键确实是在开源上,如果是自己练习或者 just for fun 啥的,想咋弄都行,不过这样也失去了开源的价值。如果是选择了开源,就得多方面考虑性能和速度之外的问题,考虑代码是给别人使用的,比如易用性和复杂度,比如清晰的结构和拓展性。
    az8525722
        92
    az8525722  
       2016-09-26 17:33:20 +08:00
    个人博客辣鸡到
    SmiteChow
        93
    SmiteChow  
       2016-09-26 17:43:19 +08:00
    缓存的目的为了快,你够快就不用加。当然你练手除外
    lslqtz
        94
    lslqtz  
       2016-09-26 18:03:45 +08:00
    上硬数据直接镇就行了,不过就实际来说,我用 memcache 和不用没区别。
    还是静态缓存好
    wizardforcel
        95
    wizardforcel  
       2016-09-26 20:02:41 +08:00
    你就说用来存放全文搜索的索引。
    hengxin196
        96
    hengxin196  
       2016-09-26 22:20:25 +08:00
    @qgy18 好快
    yanzixuan
        97
    yanzixuan  
       2016-09-27 09:19:06 +08:00
    默默在自己的 flask BLOG 上加了一个 FLASK_CACHE...
    HypoChen
        98
    HypoChen  
       2016-09-27 18:08:32 +08:00
    lufficc
        99
    lufficc  
    OP
       2016-09-28 00:39:57 +08:00 via Android
    @HypoChen 这个是啥?
    LokiSharp
        100
    LokiSharp  
       2016-09-28 09:06:10 +08:00
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1539 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 17:09 · PVG 01:09 · LAX 09:09 · JFK 12:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.