摘要: 开源Redis只支持伪事务,应用场景受限。高斯Redis发布企业级事务特性,支持完备ACID,为交易、库存等上层业务带来全新可能。
本文分享自华为云社区《华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务》,作者: 高斯Redis官方博客 。
日常生活中的shopping、交通、手游都离不开高频的金融消费、虚拟交易。熟悉MySQL的读者,一定知道数据库事务(Transaction)可以搞定这类关键场景,事务不但极大简化了上层业务的编程模型,给开发者带来便利,同时它也让“交易”等核心业务正确可靠。
其实,Redis也有事务,但社区版只做了简版实现,无法满足ACID要求,因此应用有限。
本文将介绍华为云企业级数据库GaussDB(for Redis)(下文简称为高斯Redis)的事务功能,与社区版不同,高斯Redis提供了满足ACID的企业级事务特性。
请设想如下场景:
在一个月黑风高之夜,一场交易正在进行。玩家B收款成功,但A却没拿到装备。
好了,一场PK在所难免。
玩家做几次点击即可完成交易,但底层数据库内部,却需要执行至少4个关键操作:
试想,如步骤4失败,而前置步骤成功,会发生逻辑错乱,这将带来灾难性的用户体验。
事务是如何解决这类场景的?这依赖于4大特性:
其中,一致性是最关键的,而原子性、隔离性、持久性都是为了保证一致性。当然,为了确保整体系统的一致性,也需要业务层的共同设计实现,本文不详细展开。
那么,开源Redis事务存在哪些问题,GaussDB(for Redis)的企业级事务功能又是什么样的?下面我们来具体看看。
社区版Redis
开源Redis事务是一种极简设计,并不支持事务失败时的回滚操作,不满足事务的原子性。
此外还有以下问题:
GaussDB(for Redis)
如图所示,开源Redis事务在第一条命令出错的情况下仍旧执行了下面的命令,而高斯Redis则避免了这样的问题。
高斯Redis在保留社区版事务使用逻辑的同时,在底层实现了对回滚的支持,满足了事务的原子性。
社区版Redis
事务在并发执行时,应当处理各种隔离性问题。
开源Redis对命令的执行是单线程设计,因此的确可以保证**不会有两个事务同时被执行,**具体来看:
GaussDB(for Redis)
高斯Redis是多线程架构,内部对数据进行自动分片**,在同数据分片内保留序列化的隔离性级别,同时极大提高整体实例的并发能力。**
社区版Redis
开源Redis是纯内存设计,不提供可靠的数据存储能力。掉电后数据丢失,即使开启RDB或AOF,也只能在一定程度上挽回部分数据,具体来看:
综合来看,社区版Redis的持久化能力有限,不足以支持事务的持久性要求。
GaussDB(for Redis)
高斯Redis采用存算分离的设计理念,底层使用高性能分布式存储池保存全量数据,结合RocksDB存储引擎,可保证核心数据的可靠存储,架构图:
GaussDB(for Redis)核心优势:
高斯Redis强大的持久化保障,支持核心数据的可靠存储,也为事务的执行提供了有力的保证。
从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性,可以说在ACID中一致性是事务的目的,其他特性是手段。
如上文所述,开源Redis在原子性和持久性上都存在种种问题,一致性自然也无法保障。在上述特性的保障下,不论是正常执行还是存在命令失败场景,高斯Redis事务都有可靠的一致性。
通过上述介绍我们从事务的四大特性出发详细地介绍了高斯Redis的事务,最后做一个总结:
近年来,以Redis为代表的KV数据库逐渐在越来越多的场景发挥作用,而高斯Redis作为华为云旗舰KV数据库,可满足企业核心数据的可靠存储要求。
高斯Redis的事务能力相比社区版Redis有极大提升,在ACID事务的加持下,更可在“库存”、“交易”等关键场景简化业务设计,带来可靠数据存储能力。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://huaweicloud.blog.csdn.net/article/details/123046598
内容来源于网络,如有侵权,请联系作者删除!