谨慎使用缓存是对的。
因为很多时候缓存会掩盖掉一些问题,甚至放大问题。
从安全角度来说,缓存也是最容易被攻击的薄弱点(缓存溢出攻击,不是缓存区溢出攻击,用大量无效的数据占满缓存空间使得系统性能断崖式下跌)。
所以通常做压力测试的时候都是要求必须关闭缓存测试。
不单单是缓存,所有的中间件在解决一部分问题的同时也会带来新的挑战。
譬如消息队列对于削峰填谷的功效非常明显,但是如果峰值持续的时间远远的超出了估计呢?而如果这时候消息阻塞的监控还在计划中的话……
比如说分布式计算带来了无限扩容的可能,而一致性问题很多时候会带来非常多的麻烦。
权衡是永远不会过时的。
计算机科学两大难,命名和缓存(失效)。
所以没事儿别瞎用缓存,是有道理的。
至于说在你们的具体业务里到底是不是一定要上redis,那得具体情况具体分析。光看题主这个问题描述是难以判断的。但假设只是为了防重这单一需求,那从架构层面我也会认为引入额外一个组件是弊大于利的。
这个问题不能一概而论,必须在合适的时候使用才不会被挑战,而且你必须要有压倒性的理由说明你这块用缓存的意义。
首先缓存永远是缓存,再不考虑开启最极端的一写一次追加的aof配置情况下,你如何保证在最极端情况下是否会导致重入?此问题基本等同于redis的redlock所解决的问题,这个时候就需要额外考虑这种实现是否值得了。反之开启了这样配置的aof又和数据库有多大区别?(性能上)
再则,redis的引入肯定会提升整体的维护成本,再未碰到数据库性能瓶颈前额外拉进来一个组件是否有绝对必要?你能否能够处理可能的slowlog,内存不足(特别是3及以前版本中没有内存整理时),主从切换,数据恢复?
其次当性能无问题时通过数据库实现相关功能有什么致命的缺陷?如果没有,保守的设计实现对于项目或者公司才是正常选择。
针对题主的疑问,我感觉更多的是不满那位“上古”程序员的古板,你现在碰到的情况的确会在一定程度上制约个人能力和发展。但现实的确就是很残酷,技术是服务于业务的,非技术人员才不关心你这玩意是不是在接口响应上提升了几毫秒也不会关心你的实现较之前qps翻了几番。
如果题主真有心折腾的话不一定非要在公司项目上施展自己的才华,也不一定非要在一家公司....
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有