最近,我在知乎上看到这样一个问题:
如果一些上古猿一直反对使用 Redis 怎么办?
你用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 吗? "对于这个问题,您有什么样的想法和想法? 欢迎在留言区交流
*丨知乎.com 问题 383926405DBAPLUS 社区欢迎技术人员的贡献,提交邮件editor@dbapluscn