前几天写的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 友帮帮我
1
daya 2016-09-25 13:57:38 +08:00 via Android 1
自己的博客还不是想加啥就加啥,你就回答他: just for fun!
|
2
audestick 2016-09-25 14:01:20 +08:00
最好再搞个 cluster...
|
3
lichifeng 2016-09-25 14:03:16 +08:00 via iPhone
需要 自己的博客本来就是学习各种技术的试验田
反而一些生产环境才需要根据实际情况做决断 |
5
abelyao 2016-09-25 14:08:22 +08:00 via iPhone 2
技术角度:就想楼上说的博客是试验田,可以尝试使用各种技术;
产品角度:网站该不该上缓存不是看访问量么?跟是不是博客没有一点关系; |
6
lufficc OP @daya 感觉老外真的好较真,还说加 redis 会对服务器带来一定影响,不过服务器多一个软件性能影响大不大?
|
7
hanai 2016-09-25 14:09:28 +08:00
玩的话需要,正常不需要。
添加个 redis 增加了复杂度。 |
10
qgy18 2016-09-25 14:11:56 +08:00 via iPhone 2
我的博客就用了很多完全没必要的技术,就是为了玩,自己开心就好。
https://imququ.com |
11
maddot 2016-09-25 14:12:20 +08:00
it's just a toy project for practicing my skills
|
12
audestick 2016-09-25 14:13:31 +08:00
@luffylcc 放心上...我说了,最好搞一个集群,然后时不时来点压测,测试自己的网站的延迟和首屏渲染速度...反正都是练习和玩儿,just have fun
|
13
mokeyjay 2016-09-25 14:14:33 +08:00 via Android
一般都不需要啊,除非你博客访问量爆炸,或者数据库 io low 到爆炸。当然如果你只是为了锻炼自己那随便加, 1 楼+1
|
16
bearqq 2016-09-25 14:22:49 +08:00 via Android
gae 增加 memcache 可以减少数据库查询次数, memcache 免费,数据库收费,或者说每日有限额。所以我写的博客是有 cache 的。
另一个本地小项目每次访问需要数据库大量搜索 like %xxx%,所以搜索结果加 cache 了。 |
19
benbenzhangqi 2016-09-25 14:30:29 +08:00
喜欢折腾就添加,不喜欢或者对速度没有要求的就算了
|
20
gouchaoer 2016-09-25 14:40:12 +08:00 via Android
他说的没错,你增加 redis 依赖很不好,而且 vps 开个 redis 很不稳定。。。你可以利用 apcu 来做 cache
|
21
lhbc 2016-09-25 14:56:54 +08:00 via iPhone
如果是想正经做个开源项目,不加。
如果你一定要加,做成插件。 |
22
FrankFang128 2016-09-25 15:00:34 +08:00
Do what you want to do.
|
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.
|
24
smallpath 2016-09-25 15:12:56 +08:00
想呛他的话说法很多, 比如用 Redis 做 OAuth2 之类的
|
25
zongren 2016-09-25 15:37:36 +08:00
不需要加
|
28
lufficc OP @FrankFang128 我也是这样想的
|
29
neoblackcap 2016-09-25 15:48:59 +08:00
@luffylcc OAuth2 生成的 token 肯定是放 redis , token 还要放数据库,那样多慢多麻烦啊, redis 自动过期释放,存放 token 这样的信息超级好用
|
30
Mirana 2016-09-25 16:10:25 +08:00
redis 当然比 mysql 访问快,redis 的数据全在内存里
|
33
janxin 2016-09-25 16:31:36 +08:00 via iPhone
自己用随便搞
给别人用还是别坑人家了 |
34
Showfom 2016-09-25 16:54:58 +08:00 via iPhone
你就回答他 guan ni pi shi
|
35
jarlyyn 2016-09-25 17:05:25 +08:00 via Android
实际上使用肯定不要,喜欢用是另一回事。
对于博客来说, http server 的最终页面缓存比程序使用内部缓存实际多了。 一般文件缓存也足够了。 个人意见。 |
36
loading 2016-09-25 17:11:25 +08:00 via Android
我会选择 sqlite 内存模式
|
37
jhdxr 2016-09-25 17:24:24 +08:00 1
我觉得问题所在是『 we add a hard dependence on Redis 』如果你是自己的网站写着玩那我所谓,上面一堆人已经说过了。但是如果你是一个开源项目,谨慎选择和添加依赖。像 redis 这种属于锦上添花型的你完全应该做成如果有,那么用,如果没有,那就降级到 db 。
|
38
yidinghe 2016-09-25 17:32:33 +08:00 via Android
如果是博客平台,可以考虑用 Redis ,个人博客就免了。
|
39
kideny 2016-09-25 17:44:42 +08:00
两个蛋疼的人,真的!我的小博客 www.jicker.cn ,每个月被各种流量攻击。
|
40
lufficc OP 看了大家的回复,明白了, redis 只是一个选项,个人博客很大程度上不需要,谢谢大家
|
41
dremy 2016-09-25 18:28:50 +08:00 via Android
37 楼说得对,关键就是对于那些并不是很必要的功能,在没有足够的条件下能够做到优雅降级。
|
42
sobigfish 2016-09-25 18:46:38 +08:00
你开源的话减少依赖 做成扩展 或者可选包比较好
|
44
Senorsen 2016-09-25 18:58:37 +08:00 3
岔个话题,英文逗号句号这样的标点后请加空格…
|
45
Phariel 2016-09-25 19:13:22 +08:00 via Android
没那么大的量级上什么 redis 有这功夫多打磨一下文章质量不是更好?
|
46
tairan2006 2016-09-25 19:33:29 +08:00
随便玩玩吧。。
|
48
kkzxak47 2016-09-25 20:39:02 +08:00 via Android
其实只是习惯性加上而已吧。确实不加又怎样,一个博客访问量能有多大?日活几十万?
|
49
lan894734188 2016-09-25 21:08:23 +08:00 via Android
高并发的话有好些 但是数据库 后端处理也要跟上才行
|
50
kn007 2016-09-25 21:10:48 +08:00
单纯为了玩。我有 mc 还有 redis ,反正各种折腾
|
51
reus 2016-09-25 22:08:36 +08:00
@neoblackcap 数据库自己没有缓存吗以为?
|
52
lufficc OP @neoblackcap 学习了
|
54
Coder0 2016-09-25 22:19:54 +08:00
都说的差不多了 如果访问量的话,对浏览量大的文章或者首页文章做个缓存就好了
|
55
neoblackcap 2016-09-25 22:21:35 +08:00
@reus 数据有缓存,但是缓存是可以定时过期?请问 mysql 的缓存能否做到 7200 秒之后过期?还有就是用户每次访问之后我要自动将 token 重新更新为 7200 秒,请问数据库如何操作。
我自问见识浅薄,不知道如何仅适用数据库优雅地实现这些功能。若是你知道,还望告知 |
56
Clarencep 2016-09-25 22:41:11 +08:00
|
57
reus 2016-09-26 00:08:49 +08:00
@neoblackcap 我知道,懒得跟你讲,反正你也只是抬杠。
|
58
jellybool 2016-09-26 01:05:40 +08:00
|
59
lslqtz 2016-09-26 01:09:10 +08:00
|
60
izoabr 2016-09-26 01:25:11 +08:00
啊?你们博客都不上 CDN 的么?
|
62
lincanbin 2016-09-26 01:57:35 +08:00
从可靠性看,架构越复杂,可靠性越低。
从用户体验看,几毫秒的差距很难被准确感知。 从可维护性角度看,加入 Redis 提升了复杂度。 从必要性看,系统访问量不一定需要这个。 你说提高速度的理由其实站不住脚,你应该说你爱怎么玩怎么玩。 |
63
leedstyh 2016-09-26 01:58:45 +08:00
我觉得吧,楼主把 project 发到 reddit ,显然是想做一个通用的产品来推广,而不是个人使用,所以 “试验田”的说法显然不可取。
其实对于 blog 来说,大多数的访问量不是很大,所以如果一定要 cache 的话,自己写代码, cache 到内存里,设置个若干天(比如 7 天)的过期时间。很简单的实现一下,不用那么多高级算法。 老外计较的没错,多一个软件,就多了一些运维的工作。 另外对于访问量大的,自己写 cache 就不如用 redis 了,楼主可以将 cache 部分做成个中间层,可以选择直接用内存 cache ,还是用 redis 做后端,让用户自己选择! |
64
hobbyliu 2016-09-26 05:50:10 +08:00 via Android
我的 blog 也用了 redis,www.okrd.cn
|
65
wpzero 2016-09-26 07:17:06 +08:00 via iPhone
自己的 blog 肯定自己说了算。如果是个开源 bolg 项目,没必要加 redis ,如果可以做成静态生成可能更好。
|
66
kn007 2016-09-26 07:26:08 +08:00
|
68
Clarencep 2016-09-26 09:01:33 +08:00
@ericls 硬盘当然没有内存快。但是你存 redis 里面的话, nginx/apache 又没法直接访问 redis ,还得经过 php 这样就慢下来了。 而生成静态页面后,让 nginx/apache 直接访问静态页面的文件其实会比走 PHP 要快。可以自己分别测一测两种方式哪种快。就我的服务器而言,还是静态文件比较快。
|
69
quericy 2016-09-26 09:07:57 +08:00
@luffylcc 既然是开源出来的项目,redis 作为可选项比较合适.因为使用者的场景可能是多样的,有的没多少访问量,有的访问量大,有的磁盘 io 捉急....
做成可选配置时,对于没 redis 使用需求的人来说,降级到 DB,节约了维护成本;对于需要使用 redis 的人来说,无需再定制修改项目代码,只是开启了相关配置就能撑住更多的流量请求 |
70
ppwangs 2016-09-26 09:16:34 +08:00
博客不都是最后做静态化么,这种一次性生成内容的东西,还要每次从 db 取东西么……
|
71
yumijie 2016-09-26 09:17:54 +08:00
有点杀鸡用牛刀
|
72
Perry 2016-09-26 09:20:53 +08:00
Agree to disagree
|
74
solaya 2016-09-26 09:33:28 +08:00
我自己写的小玩意 还加了个 cluster 但没开源
|
78
zhangv 2016-09-26 09:45:36 +08:00
觉得这本身就是一个伪问题,如果没有答案或者答案很多,还能称为“问题”吗?
|
79
xiaoyu9527 2016-09-26 10:02:40 +08:00
回答一句 interesting!
|
80
ppwangs 2016-09-26 10:12:58 +08:00
@luffylcc 我的意思是动态页面静态化,并非伪静态。内容完成以后,直接生成 html 文件, nginx 直接访问这个 html ……
|
81
BreakingBad 2016-09-26 10:31:21 +08:00
简单的说楼主因为用英语跟老外对话了几段就膨胀高潮了,把这毫无讨论价值的问题搬到这儿来秀
|
82
lufficc OP @BreakingBad 额
|
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 |
84
shyling 2016-09-26 11:02:55 +08:00
没有特别的必要
|
85
ipconfiger 2016-09-26 11:32:30 +08:00
博客, 静态化就好了, 再改一下输出客户端的 expire, 要是不怎么修改的话, 你改成 1 年, 第二次访问网络都不走, 你再 redis 都没这个快
|
86
Clarencep 2016-09-26 12:11:46 +08:00
@yytsjq 涨姿势了。 如果这样直接把 redis/memcache 集成到 nginx 中,那肯定会比访问静态文件快。 可是偶的 VPS 只有 512M 怕开不起 redis/memcache...
|
87
Clarencep 2016-09-26 12:17:52 +08:00
@charove 你的坐标是哪里?通过啥宽带访问的?可能是 https 认证得比较慢 -- 没钱,所以用的某通的免费证书。 换用 http 访问试试呢: http://www.clarencep.com
|
88
Clarencep 2016-09-26 12:20:02 +08:00
@charove 奇怪,就是 https 也不应该 10 秒打开的呀 我本地是 10~50ms ,这个评测也是还蛮快的: http://www.mmtrix.com/evaluate/result/testid/fa521d2ec2df456a55a3f43ce0d8ff3c
|
89
Lcys 2016-09-26 12:22:44 +08:00
用 redis 文章页面打开速度明显提升
|
91
firefffffffffly 2016-09-26 15:55:49 +08:00 1
其实问题关键确实是在开源上,如果是自己练习或者 just for fun 啥的,想咋弄都行,不过这样也失去了开源的价值。如果是选择了开源,就得多方面考虑性能和速度之外的问题,考虑代码是给别人使用的,比如易用性和复杂度,比如清晰的结构和拓展性。
|
92
az8525722 2016-09-26 17:33:20 +08:00
个人博客辣鸡到
|
93
SmiteChow 2016-09-26 17:43:19 +08:00
缓存的目的为了快,你够快就不用加。当然你练手除外
|
94
lslqtz 2016-09-26 18:03:45 +08:00
上硬数据直接镇就行了,不过就实际来说,我用 memcache 和不用没区别。
还是静态缓存好 |
95
wizardforcel 2016-09-26 20:02:41 +08:00
你就说用来存放全文搜索的索引。
|
96
hengxin196 2016-09-26 22:20:25 +08:00
@qgy18 好快
|
97
yanzixuan 2016-09-27 09:19:06 +08:00
默默在自己的 flask BLOG 上加了一个 FLASK_CACHE...
|
98
HypoChen 2016-09-27 18:08:32 +08:00
|
100
LokiSharp 2016-09-28 09:06:10 +08:00
|