V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lufficc
V2EX  ›  程序员

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

  •  
  •   lufficc · Sep 25, 2016 · 13951 views
    This topic created in 3504 days ago, the information mentioned may be changed or developed.

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

    另一个本地小项目每次访问需要数据库大量搜索 like %xxx%,所以搜索结果加 cache 了。
    lufficc
        17
    lufficc  
    OP
       Sep 25, 2016
    @qgy18 不错的博客,收藏,关注你 twitter 了,
    lufficc
        18
    lufficc  
    OP
       Sep 25, 2016 via Android
    @abelyao 回复他了
    benbenzhangqi
        19
    benbenzhangqi  
       Sep 25, 2016
    喜欢折腾就添加,不喜欢或者对速度没有要求的就算了
    gouchaoer
        20
    gouchaoer  
       Sep 25, 2016 via Android
    他说的没错,你增加 redis 依赖很不好,而且 vps 开个 redis 很不稳定。。。你可以利用 apcu 来做 cache
    lhbc
        21
    lhbc  
       Sep 25, 2016 via iPhone
    如果是想正经做个开源项目,不加。
    如果你一定要加,做成插件。
    FrankFang128
        22
    FrankFang128  
       Sep 25, 2016
    Do what you want to do.
    sherlocktheplant
        23
    sherlocktheplant  
       Sep 25, 2016
    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  
       Sep 25, 2016
    想呛他的话说法很多, 比如用 Redis 做 OAuth2 之类的
    zongren
        25
    zongren  
       Sep 25, 2016
    不需要加
    lufficc
        26
    lufficc  
    OP
       Sep 25, 2016
    @zongren
    lufficc
        27
    lufficc  
    OP
       Sep 25, 2016
    @smallpath OAuth2 怎么做,这个不得用数据库吗?
    lufficc
        28
    lufficc  
    OP
       Sep 25, 2016
    @FrankFang128 我也是这样想的
    neoblackcap
        29
    neoblackcap  
       Sep 25, 2016
    @luffylcc OAuth2 生成的 token 肯定是放 redis , token 还要放数据库,那样多慢多麻烦啊, redis 自动过期释放,存放 token 这样的信息超级好用
    Mirana
        30
    Mirana  
       Sep 25, 2016
    redis 当然比 mysql 访问快,redis 的数据全在内存里
    zongren
        31
    zongren  
       Sep 25, 2016
    @luffylcc 这个存硬盘都可以啊,不一定非得数据库吧
    smallpath
        32
    smallpath  
       Sep 25, 2016
    @luffylcc redis 就是内存型数据库啊
    janxin
        33
    janxin  
       Sep 25, 2016 via iPhone
    自己用随便搞
    给别人用还是别坑人家了
    Showfom
        34
    Showfom  
    PRO
       Sep 25, 2016 via iPhone
    你就回答他 guan ni pi shi
    jarlyyn
        35
    jarlyyn  
       Sep 25, 2016 via Android
    实际上使用肯定不要,喜欢用是另一回事。

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

    一般文件缓存也足够了。

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

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

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

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

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

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

    我对比较大的页面,使用 redis ,小页面全部 mc
    lufficc
        67
    lufficc  
    OP
       Sep 26, 2016 via Android
    @leedstyh 谢谢大家建议,项目里已经去掉 redis 是必须的了, v 友们真强大
    Clarencep
        68
    Clarencep  
       Sep 26, 2016
    @ericls 硬盘当然没有内存快。但是你存 redis 里面的话, nginx/apache 又没法直接访问 redis ,还得经过 php 这样就慢下来了。 而生成静态页面后,让 nginx/apache 直接访问静态页面的文件其实会比走 PHP 要快。可以自己分别测一测两种方式哪种快。就我的服务器而言,还是静态文件比较快。
    quericy
        69
    quericy  
       Sep 26, 2016
    @luffylcc 既然是开源出来的项目,redis 作为可选项比较合适.因为使用者的场景可能是多样的,有的没多少访问量,有的访问量大,有的磁盘 io 捉急....
    做成可选配置时,对于没 redis 使用需求的人来说,降级到 DB,节约了维护成本;对于需要使用 redis 的人来说,无需再定制修改项目代码,只是开启了相关配置就能撑住更多的流量请求
    ppwangs
        70
    ppwangs  
       Sep 26, 2016
    博客不都是最后做静态化么,这种一次性生成内容的东西,还要每次从 db 取东西么……
    yumijie
        71
    yumijie  
       Sep 26, 2016
    有点杀鸡用牛刀
    Perry
        72
    Perry  
       Sep 26, 2016
    Agree to disagree
    charove
        73
    charove  
       Sep 26, 2016
    @Clarencep 十秒打开。
    solaya
        74
    solaya  
       Sep 26, 2016
    我自己写的小玩意 还加了个 cluster 但没开源
    lufficc
        75
    lufficc  
    OP
       Sep 26, 2016 via Android
    @Clarencep 我试试去
    lufficc
        76
    lufficc  
    OP
       Sep 26, 2016 via Android
    @ppwangs 自己搞过静态的, hexo ,但,总感觉不灵活。。。。。。
    lufficc
        77
    lufficc  
    OP
       Sep 26, 2016 via Android
    @solaya 可以考虑开源让大家学习下😂
    zhangv
        78
    zhangv  
       Sep 26, 2016
    觉得这本身就是一个伪问题,如果没有答案或者答案很多,还能称为“问题”吗?
    xiaoyu9527
        79
    xiaoyu9527  
       Sep 26, 2016
    回答一句 interesting!
    ppwangs
        80
    ppwangs  
       Sep 26, 2016
    @luffylcc 我的意思是动态页面静态化,并非伪静态。内容完成以后,直接生成 html 文件, nginx 直接访问这个 html ……
    BreakingBad
        81
    BreakingBad  
       Sep 26, 2016
    简单的说楼主因为用英语跟老外对话了几段就膨胀高潮了,把这毫无讨论价值的问题搬到这儿来秀
    lufficc
        82
    lufficc  
    OP
       Sep 26, 2016 via Android
    yytsjq
        83
    yytsjq  
       Sep 26, 2016
    @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  
       Sep 26, 2016
    没有特别的必要
    ipconfiger
        85
    ipconfiger  
       Sep 26, 2016
    博客, 静态化就好了, 再改一下输出客户端的 expire, 要是不怎么修改的话, 你改成 1 年, 第二次访问网络都不走, 你再 redis 都没这个快
    Clarencep
        86
    Clarencep  
       Sep 26, 2016
    @yytsjq 涨姿势了。 如果这样直接把 redis/memcache 集成到 nginx 中,那肯定会比访问静态文件快。 可是偶的 VPS 只有 512M 怕开不起 redis/memcache...
    Clarencep
        87
    Clarencep  
       Sep 26, 2016
    @charove 你的坐标是哪里?通过啥宽带访问的?可能是 https 认证得比较慢 -- 没钱,所以用的某通的免费证书。 换用 http 访问试试呢: http://www.clarencep.com
    Clarencep
        88
    Clarencep  
       Sep 26, 2016
    @charove 奇怪,就是 https 也不应该 10 秒打开的呀 我本地是 10~50ms ,这个评测也是还蛮快的: http://www.mmtrix.com/evaluate/result/testid/fa521d2ec2df456a55a3f43ce0d8ff3c
    zero0x00
        89
    zero0x00  
       Sep 26, 2016
    用 redis 文章页面打开速度明显提升
    lufficc
        90
    lufficc  
    OP
       Sep 26, 2016 via Android
    @yytsjq 长知识了
    firefffffffffly
        91
    firefffffffffly  
       Sep 26, 2016   ❤️ 1
    其实问题关键确实是在开源上,如果是自己练习或者 just for fun 啥的,想咋弄都行,不过这样也失去了开源的价值。如果是选择了开源,就得多方面考虑性能和速度之外的问题,考虑代码是给别人使用的,比如易用性和复杂度,比如清晰的结构和拓展性。
    az8525722
        92
    az8525722  
       Sep 26, 2016
    个人博客辣鸡到
    SmiteChow
        93
    SmiteChow  
       Sep 26, 2016
    缓存的目的为了快,你够快就不用加。当然你练手除外
    lslqtz
        94
    lslqtz  
       Sep 26, 2016
    上硬数据直接镇就行了,不过就实际来说,我用 memcache 和不用没区别。
    还是静态缓存好
    wizardforcel
        95
    wizardforcel  
       Sep 26, 2016
    你就说用来存放全文搜索的索引。
    hengxin196
        96
    hengxin196  
       Sep 26, 2016
    @qgy18 好快
    yanzixuan
        97
    yanzixuan  
       Sep 27, 2016
    默默在自己的 flask BLOG 上加了一个 FLASK_CACHE...
    Hyponet
        98
    Hyponet  
       Sep 27, 2016
    lufficc
        99
    lufficc  
    OP
       Sep 28, 2016 via Android
    @HypoChen 这个是啥?
    LokiSharp
        100
    LokiSharp  
       Sep 28, 2016
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2444 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 155ms · UTC 05:11 · PVG 13:11 · LAX 22:11 · JFK 01:11
    ♥ Do have faith in what you're doing.