天天看点

Redis分布式缓存系列(二)- Redis中的String类型以及使用Redis解决订单秒杀超卖问题

本系列将和大家分享Redis分布式缓存,本章主要简单介绍下Redis中的String类型,以及如何使用Redis解决订单秒杀超卖问题。

Redis中5种数据结构之String类型:key-value的缓存,支持过期,value不超过512M。

Redis分布式缓存系列(二)- Redis中的String类型以及使用Redis解决订单秒杀超卖问题

Redis是单线程的,比如SetAll & AppendToValue & GetValues & GetAndSetValue & IncrementValue & IncrementValueBy等等,这些看上去像是组合命令,但实际上是一个具体的命令,是一个原子性的命令,不可能出现中间状态,可以应对一些并发情况。下面我们直接通过代码来看下具体使用。

首先来看下Demo的项目结构:

Redis分布式缓存系列(二)- Redis中的String类型以及使用Redis解决订单秒杀超卖问题

对于.Net而言,Redis操作一般使用ServiceStack.Redis 或者 StackExchange.Redis ,但总体来说ServiceStack.Redis性能更优。

此处推荐使用的是ServiceStack包,虽然它是收费的,有每小时6000次请求限制,但是它是开源的,可以将它的源码下载下来破解后使用,网上应该有挺多相关资料,有兴趣的可以去了解一波。

ServiceStack.Redis源码GitHub地址:https://github.com/ServiceStack/ServiceStack.Redis

首先先来看下Redis客户端的初始化工作:

其中Redis连接字符串(Redis Connection Strings)支持以下几种格式:

下面直接给大家Show一波Redis中与String类型相关的API:

测试如下:

运行结果如下:

Redis分布式缓存系列(二)- Redis中的String类型以及使用Redis解决订单秒杀超卖问题
Redis分布式缓存系列(二)- Redis中的String类型以及使用Redis解决订单秒杀超卖问题

Redis中的String类型在项目中使用是最多的,想必大家都有所了解,此处就不再做过多的描述了。

首先先来看下什么是订单秒杀超卖问题:

运行OverSellFailedTest.Show(),结果如下所示:

Redis分布式缓存系列(二)- Redis中的String类型以及使用Redis解决订单秒杀超卖问题

从运行结果可以看出不仅一个商品卖给了多个人,而且还出现了订单数超过商品数,这就是典型的秒杀超卖问题。

下面我们来看下如何使用Redis解决订单秒杀超卖问题:

运行OverSellTest.Show(),结果如下所示:

Redis分布式缓存系列(二)- Redis中的String类型以及使用Redis解决订单秒杀超卖问题

从运行结果可以看出使用Redis能够很好的解决订单秒杀超卖问题。

至此本文就全部介绍完了,如果觉得对您有所启发请记得点个赞哦!!!

继续阅读