• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lufficc
V2EX  ›  程序员

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

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

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

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

    一般文件缓存也足够了。

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

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

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

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

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

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

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