有些上古程序猿一直坚持反对用Redis怎么办?

知乎 2023-12-15 16:24:00
最近,在知乎上看到这样一个问题:

有些上古程序猿一直坚持反对使用redis怎么办?

 

 

图片

 

究竟用不用Redis?为什么用?怎么用?让我们看看网友怎么说……

 

 
@灵剑

 

你不要告诉我们用不用redis,你得告诉我们你为什么想要用redis,不用redis业务会有什么问题?

 

天下没有免费的午餐,不动脑子直接上缓存/NOSQL可能会带来更多更严重的问题。

 

单一数据库最大的好处在于事务性实现简单,由数据库自己保证。举个简单的例子,下订单需要扣除一个库存,然后插入一条订单条目,如果库存和订单都是数据库表项的话这个事务是无懈可击的。

 

如果库存在redis里,订单条目是MySQL,通常就需要先写redis,成功之后再写数据库,如果写数据库失败了还需要回滚redis,如果最后这个回滚因为网络之类的原因失败了,就会多扣一个库存。

 

不要以为这些事情很好解决,事务性处理的复杂性远远超过你的想象,比如说还有写MySQL在提交的一瞬间连接断了这种情况,你都没法判断提交到底成功了还是失败了,那你的redis是回滚还是不回滚?

 

所以引入新的层一定要说清楚,你为了什么目的一定要用缓存/NOSQL,能接受什么样的一致性模型,否则就是在胡闹。

 

 
@Ivony

 

谨慎使用缓存是对的。

 

因为很多时候缓存会掩盖掉一些问题,甚至放大问题。

 

从安全角度来说,缓存也是最容易被攻击的薄弱点(缓存溢出攻击,不是缓存区溢出攻击,用大量无效的数据占满缓存空间使得系统性能断崖式下跌)。

 

所以通常做压力测试的时候都是要求必须关闭缓存测试。

 

不单单是缓存,所有的中间件在解决一部分问题的同时也会带来新的挑战。譬如消息队列对于削峰填谷的功效非常明显,但是如果峰值持续的时间远远的超出了估计呢?而如果这时候消息阻塞的监控还在计划中的话……

 

比如说分布式计算带来了无限扩容的可能,而一致性问题很多时候会带来非常多的麻烦。

 

权衡是永远不会过时的。

 

 
@Coldwind

 

我大约从95年开始学习编程,我想我应该算是一个“上古程序员”。

 

首先说一下你的问题,这个问题中的“上古”明显是带着点歧视的(当然你可以把它解释为调侃)。这个问题其实并不是个技术问题,问的其实并不是“是否该用Redis”,而是已经非常自信的认为应该用,只是该怎么解决掉“上古程序员坚持不用”这个问题。

 

因为做的不是这一块,所以我个人并不了解Redis,但是可以说一下面对技术方向的分歧,我有什么解决方法:用或者不用某个系统/语言/技术/模块/组件/架构,或者用A还是用B,无非牵扯到几个方面的影响:工作量、可扩展性、稳定性、性能、安全性、维护难度/可读性、费用等等。而在不同的选择中通常都不太可能做到选择A在所有方面都强过选择B的,这时候要做的,其实是一个对各个方面的评估,乘以这个项目对哪些方面更看重的权重,然后得出结论。

 

如果你能拿出你要用Redis的证据,也就是在哪些方面比不用Redis强,强了多少,有必要的话需写一些测试的程序来验证你的结论。然后用这些量化的数据去说服对方,这才是一个严谨的程序员应该做的,而不是跑到知乎上来嘲讽一个跟你同样想把事情做好,而只是理念不同的同事。

 

最后说一下,多年的工作中,我发现有些程序员(很多)选择某个技术的原因,并不是基于上面所说的这些方面,而是:

 

  • 我会这个,所以我用它

  • 我感觉这个更好,所以我用它

  • 这个是最新的技术,所以我用它

  • 大家都用这个,所以我用它

 

而这几个,其实都不是真正的理由(第一个还好点,因为会所以工作量更少)。不知道答主是不是也有这种情况,建议有则改之,无则加勉。

 

大家对于"该不该使用Redis?"这一问题,有怎样的思考和想法呢?欢迎在留言区交流~

 

来源丨https://www.zhihu.com/question/383926405
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
最新评论
访客 2023年08月20日

230721

访客 2023年08月16日

1、导入Mongo Monitor监控工具表结构(mongo_monitor…

访客 2023年08月04日

上面提到: 在问题描述的架构图中我们可以看到,Click…

访客 2023年07月19日

PMM不香吗?

访客 2023年06月20日

如今看都很棒

活动预告