redis rua解决库存问题_redis如何解决高并发问题?避免出现超卖的情况?

相信你要处理高并发问题,肯定会想到使用redis缓存数据库。

因为它可以在一定程度上解决网站一瞬间的并发量,不会出现卡死的情况,因为他是使用了内存的,如果你使用普通的数据库的话,增加服务器的压力,效率低下不说,更有可能高并发的时候导致坏表了,也有可能直接导致服务器假死。也就是卡着了,一点反应都没有。

这可是致命的问题啊。

但是使用了redis处理高并发数据时又会发现一个问题,比如:你商城里面的一件秒杀商品只有一件库存了,但是有两个人同时点击了进去,也就是说,这件只有一件的数量的商品要发货两件,但是你的库存没有这么多了啊,这就出现了超卖的情况,那可就得不偿失了啊。

这样的话,不仅仅会导致公司亏本,更展现出了一个系统的bug。这可怎么办呢?

其实这样的话,我们可以给redis上一个并发锁。

可以利用Redis的setnx的命令来处理高并发。

SETNX key value

将 key 的值设为 value ,当且仅当 key 不存在。

若给定的 key 已经存在,则 SETNX 不做任何动作。

设置成功,返回 1 。

设置失败,返回 0 。

下面是使用示例

也就是说如果键是存在的话,是不可能会被创建成功的,也不可以被覆盖。只有那个键被删除了才可能重新创建。

那这样的机制的话,我们就可以用setnx来进行redis锁了,当一个人点击了之后就用生成一个键。

然后再有人要点击的话,也会使用setnx生成,但是发现键已经存在了,无法修改和生成。也就是代表着当前商品已经有人在操作了,给出提示给用户即可。

但是避免一个用户只是点了抢购但是却没有后面的操作,直接导致这个商品失效了,一直在内存之中,这样也是不好的。

所以我们可以给redis的键设置一个有效时间。就像是你买票时一样,有30分钟的付款时间,超过了也就没有了。

也就是会把那个键给删除了,重新释放出去,供用户来进行购买。

给setnx生成键可以用expire来进行设置有效时间。

语法是 expire key time

Expire 命令用于设置 key 的过期时间,key 过期后将不再可用。单位以秒计。

返回值:

设置成功返回 1 。当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。

使用示例:

总结:redis是把数据保存在内存之中的,所以效率非常的快,更是大大地降低了服务器的压力,避免了服务器因此而宕机的风险。能够处理高并发,也能够与数据库中的数据同步。redis对于开发者来说确实是一个利器。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值