有些上古程序猿一直坚持反对使用redis怎么办?
究竟用不用Redis?为什么用?怎么用?让我们看看网友怎么说……
你不要告诉我们用不用redis,你得告诉我们你为什么想要用redis,不用redis业务会有什么问题?
天下没有免费的午餐,不动脑子直接上缓存/NOSQL可能会带来更多更严重的问题。
单一数据库最大的好处在于事务性实现简单,由数据库自己保证。举个简单的例子,下订单需要扣除一个库存,然后插入一条订单条目,如果库存和订单都是数据库表项的话这个事务是无懈可击的。
如果库存在redis里,订单条目是MySQL,通常就需要先写redis,成功之后再写数据库,如果写数据库失败了还需要回滚redis,如果最后这个回滚因为网络之类的原因失败了,就会多扣一个库存。
不要以为这些事情很好解决,事务性处理的复杂性远远超过你的想象,比如说还有写MySQL在提交的一瞬间连接断了这种情况,你都没法判断提交到底成功了还是失败了,那你的redis是回滚还是不回滚?
所以引入新的层一定要说清楚,你为了什么目的一定要用缓存/NOSQL,能接受什么样的一致性模型,否则就是在胡闹。
谨慎使用缓存是对的。
因为很多时候缓存会掩盖掉一些问题,甚至放大问题。
从安全角度来说,缓存也是最容易被攻击的薄弱点(缓存溢出攻击,不是缓存区溢出攻击,用大量无效的数据占满缓存空间使得系统性能断崖式下跌)。
所以通常做压力测试的时候都是要求必须关闭缓存测试。
不单单是缓存,所有的中间件在解决一部分问题的同时也会带来新的挑战。譬如消息队列对于削峰填谷的功效非常明显,但是如果峰值持续的时间远远的超出了估计呢?而如果这时候消息阻塞的监控还在计划中的话……
比如说分布式计算带来了无限扩容的可能,而一致性问题很多时候会带来非常多的麻烦。
权衡是永远不会过时的。
我大约从95年开始学习编程,我想我应该算是一个“上古程序员”。
首先说一下你的问题,这个问题中的“上古”明显是带着点歧视的(当然你可以把它解释为调侃)。这个问题其实并不是个技术问题,问的其实并不是“是否该用Redis”,而是已经非常自信的认为应该用,只是该怎么解决掉“上古程序员坚持不用”这个问题。
因为做的不是这一块,所以我个人并不了解Redis,但是可以说一下面对技术方向的分歧,我有什么解决方法:用或者不用某个系统/语言/技术/模块/组件/架构,或者用A还是用B,无非牵扯到几个方面的影响:工作量、可扩展性、稳定性、性能、安全性、维护难度/可读性、费用等等。而在不同的选择中通常都不太可能做到选择A在所有方面都强过选择B的,这时候要做的,其实是一个对各个方面的评估,乘以这个项目对哪些方面更看重的权重,然后得出结论。
如果你能拿出你要用Redis的证据,也就是在哪些方面比不用Redis强,强了多少,有必要的话需写一些测试的程序来验证你的结论。然后用这些量化的数据去说服对方,这才是一个严谨的程序员应该做的,而不是跑到知乎上来嘲讽一个跟你同样想把事情做好,而只是理念不同的同事。
最后说一下,多年的工作中,我发现有些程序员(很多)选择某个技术的原因,并不是基于上面所说的这些方面,而是:
我会这个,所以我用它
我感觉这个更好,所以我用它
这个是最新的技术,所以我用它
大家都用这个,所以我用它
而这几个,其实都不是真正的理由(第一个还好点,因为会所以工作量更少)。不知道答主是不是也有这种情况,建议有则改之,无则加勉。
大家对于"该不该使用Redis?"这一问题,有怎样的思考和想法呢?欢迎在留言区交流~
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721