iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >redis怎么解决库存并发问题实现数量控制
  • 215
分享到

redis怎么解决库存并发问题实现数量控制

2023-06-29 22:06:48 215人浏览 安东尼
摘要

本篇内容介绍了“redis怎么解决库存并发问题实现数量控制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis是单进程,阻塞式,在同一时

本篇内容介绍了“redis怎么解决库存并发问题实现数量控制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Redis是单进程,阻塞式,在同一时刻只能处理一个请求,后来的请求需要排队等待。

优点:因为是单进程,所以无需处理并发问题,降低 系统复杂度

缺点:不适合缓存大尺寸对象(超过100kb)

原因: 由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。

而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis也在存储大数据的性能上进行了优化,但是比起Memcached,还是稍有逊色。

memcache是多进程,非阻塞式,如果仅仅作为缓存来用,可以用memcache更合适

redis怎么解决库存并发问题实现数量控制

一、命令

exists 查看该键key是否已存在redis中, 例如 exists mycounter

set 设置初始化一个key值 例如 set mycounter 99

get 获取一个key值 例如 getmycounter

incr 自增1 例如 incrmycounter //输出结果为100

incrby 指定增长值 例如 incrbymycounter 2 //输出结果为102

指定减少值 例如 incrbymycounter -2 //输出结果为100

setnx 当值不存在时,设置该值成功 例如 setnxmycounter 99 //输出结果为0,代表设置失败,已存在redis中

setnx key1 12 //输出结果为1,代表设置成功,之前未存在redis中

expire 设置一个键的生命周期 例如 expire mycounter 30 //设置为30秒有效期

ttl 获取key失效时间 例如 ttlmycounter //输出为 13,代表还有13秒 ,如果返回为-1,代表永不过期,永远存在redis缓存中,除非内存不足

//如果返回为-2,代表已失效,redis无该键值,可以用exists验证,返回0,代表不存

二、常见场景

商品抢购,数量没控制住,库存超限,成本不足(例如:库存1000,却被用户成功抢购2000,库存不足)

抽奖限量,没控制住,钱多花了

抢红包

三、流程图与代码

方案1 流程图:

redis怎么解决库存并发问题实现数量控制

方案2流程图:

redis怎么解决库存并发问题实现数量控制

//方案1代码,测试坏境TP5public function redisCountV1(){    Log::record("测试版本1并发开始", Log::INFO);    $redis = new Redis();    //总库存数量    $amountLimit = 100;    //redis存储库存键名    $keyName = "mycounter_v6";    //假设每次消耗库存数为1    $incrAmount = 1;    //判断redis中是否 存在该值,如果不存在,则用set设置(问题是如果出现并发,两个或多个用户同时访问,会导致库存重新设置)    if(!$redis->exists($keyName)){        $redis->set($keyName, 95);    }    //从redis中取出当前库存数    $currAmount = $redis->get($keyName);    //如果当前库存数+增长的库存数>总库存,直接返回    if($currAmount + $incrAmount > $amountLimit) {        file_put_contents("/Users/han/Documents/www/cs/testv1.log", "bad luck \n", FILE_APPEND);        Log::record("bad luck", Log::INFO);        return false;    }    //缓存库存数量增加    $redis->incrby($keyName, $incrAmount);    file_put_contents("/Users/han/Documents/www/cs/testv1.log", "Good luck \n", FILE_APPEND);    Log::record("good luck", Log::INFO);}//测试方式:ab  -c 100 -n 200 Http://www.fenleduo.com:8080/V7/Test/redisCountV1
//方案2代码,测试坏境TP5public function redisCountV2(){    Log::record("测试版本2并发开始", Log::INFO);    $redis = new Redis();    //总库存数量    $amountLimit = 100;    //redis存储库存键名    $keyName = "mycounter_v12";    //假设每次消耗库存数为1    $incrAmount = 1;    //判断redis中是否 存在该值,如果不存在,则用setnx设置(注:如果出现并发,两个或多个用户同时访问,不会导致库存重新设置)    if(!$redis->exists($keyName)){        //setnx 如果不存在该值,则设置,如果存在则不会设置        $redis->setnx($keyName, 95);    }    //从redis中取出当前库存数    $currAmount = $redis->get($keyName);    //如果当前库存数+增长的库存数>总库存,直接返回    if($redis->incrby($keyName, $incrAmount) > $amountLimit) {        file_put_contents("/Users/han/Documents/www/cs/testv2.log", "bad luck \n",FILE_APPEND);        Log::record("bad luck", Log::INFO);        return false;    }    file_put_contents("/Users/han/Documents/www/cs/testv2.log", "good luck \n",FILE_APPEND);    Log::record("good luck", Log::INFO);}//测试方式:ab  -c 100 -n 200 http://www.fenleduo.com:8080/V7/Test/redisCountV2

“redis怎么解决库存并发问题实现数量控制”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: redis怎么解决库存并发问题实现数量控制

本文链接: https://www.lsjlt.com/news/326588.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis怎么解决库存并发问题实现数量控制
    本篇内容介绍了“redis怎么解决库存并发问题实现数量控制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!redis是单进程,阻塞式,在同一时...
    99+
    2023-06-29
  • redis解决库存并发问题实现数量控制
    目录一、命令二、常见场景三、流程图与代码redis是单进程,阻塞式,在同一时刻只能处理一个请求,后来的请求需要排队等待。 优点:因为是单进程,所以无需处理并发问题,降低 系统复杂度 ...
    99+
    2024-04-02
  • Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
    目录前言架构设计代码实现测试总结前言 最近在做阅读类的业务,需要记录用户的PV,UV; 项目状况:前期尝试业务阶段; 特点:快速实现(不需要做太重,满足初期推广运营即可)快速投入市场...
    99+
    2024-04-02
  • golang怎么控制并发数量
    在Go语言中,可以使用goroutine和channel来控制并发数量。 首先,可以使用goroutine来并发执行任务。例如,有一...
    99+
    2023-10-26
    golang
  • golang控制并发数怎么实现
    在Go语言中,可以使用goroutine和channel来实现并发控制。下面是一种常见的实现方式: 创建一个有缓冲的channel...
    99+
    2023-10-21
    golang
  • redis多进程并发问题怎么解决
    在处理Redis多进程并发问题时,可以考虑以下几种解决方案: 使用分布式锁:可以使用Redis的SETNX命令来实现分布式锁,确...
    99+
    2024-04-09
    redis
  • redis实际存储问题怎么解决
    在处理Redis实际存储问题时,可以采取以下方法来解决:1. 压缩存储空间:使用压缩算法对存储的数据进行压缩,以减少存储占用空间。R...
    99+
    2023-09-11
    redis
  • Redis遇到并发、雪崩问题怎么解决
    本篇内容介绍了“Redis遇到并发、雪崩问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Re...
    99+
    2024-04-02
  • Redis缓存问题怎么解决
    这篇文章主要讲解了“Redis缓存问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis缓存问题怎么解决”吧!LevelDB 来了!它是 Go...
    99+
    2024-04-02
  • PHP高并发之怎么解决商品库存超卖问题
    这篇文章主要介绍“PHP高并发之怎么解决商品库存超卖问题”,在日常操作中,相信很多人在PHP高并发之怎么解决商品库存超卖问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP高并发之怎么解决商品库存超卖问题...
    99+
    2023-06-29
  • 怎么浅析数据库并发控制
    怎么浅析数据库并发控制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。数据库事务隔离发展标准一文中,从标准制定的角度介绍了数据库的隔离级别,介绍...
    99+
    2024-04-02
  • Mysq详细讲解如何解决库存并发问题
    目录面临的问题如何实现需求具体实现的方案总结面临的问题 长话短说,假设我们现在面临以下需求 商品的库存有两千,卖完为止某商品本日的售卖只允许卖出一百,卖完为止 如何实现 我提出的方案...
    99+
    2024-04-02
  • MySQL中怎么实现并发控制
    今天就跟大家聊聊有关MySQL中怎么实现并发控制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。锁锁分为读锁和写锁两种,也称作共享锁和排他锁。因为多个...
    99+
    2024-04-02
  • Mysql怎么数据库平滑扩容解决高并发和大数据量问题
    本篇内容主要讲解“Mysql怎么数据库平滑扩容解决高并发和大数据量问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql怎么数据库平滑扩容解决高并发和大数据量问题”吧!1 停机方案发布公告...
    99+
    2023-06-30
  • JavaScript中怎么实现并发控制
    这篇文章给大家分享的是有关JavaScript中怎么实现并发控制的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在日常开发过程中,你可能会遇到并发控制...
    99+
    2024-04-02
  • Spring Boot如何解决Redis缓存+MySQL批量入库问题
    这篇文章给大家分享的是有关Spring Boot如何解决Redis缓存+MySQL批量入库问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。架构设计架构图:时序图记录基础数据MySQL表结构CREATE...
    99+
    2023-06-29
  • Redis缓存雪崩问题怎么解决
    本篇内容介绍了“Redis缓存雪崩问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!缓存层承载着大量的请求,有效保护了存储层。但是如...
    99+
    2023-06-30
  • redis被动缓存问题怎么解决
    要解决Redis的被动缓存问题,可以考虑以下方法:1. 设置合适的过期时间:可以根据业务需求,为每个缓存设置适当的过期时间。这样可以...
    99+
    2023-08-24
    redis
  • Redis实现秒杀的问题怎么解决
    本篇内容介绍了“Redis实现秒杀的问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、秒杀逻辑...
    99+
    2024-04-02
  • redis删除数据还存在问题怎么解决
    如果使用Redis删除数据后数据仍然存在的问题,可能是因为Redis的持久化机制导致的。Redis有两种持久化方式,一种是RDB快照...
    99+
    2024-04-09
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作