广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >使用Redis实现秒杀功能的简单方法
  • 795
分享到

使用Redis实现秒杀功能的简单方法

2024-04-02 19:04:59 795人浏览 薄情痞子
摘要

1. 怎样预防数据库超售现象 设置数据库事务的隔离级别为Serializable(不可用) Serializable就是让数据库去串行化的去执行事务,一个事务执行完才能去执行下一个事

1. 怎样预防数据库超售现象

设置数据库事务的隔离级别为Serializable(不可用)

Serializable就是让数据库去串行化的去执行事务,一个事务执行完才能去执行下一个事务,效率太慢

在数据表上设置乐观字段,例如设置版本号(version)

不同事务在执行更新操作时,需要先判断一下版本号是否已被修改

代码实现乐观锁流程

1.1. 什么表需要设置乐观锁

出现同时修改同一条记录的业务,相应的数据表要设置乐观锁

不会出现同时修改同一记录的数据库,就不需要设置乐观锁

2. 利用Redis防止超售

为了保证事务的一致性,在开启事务之前必须要用WATCH命令监视要操作的记录


redis > WATCH kill_num kill_user

使用MULTI命令开启一个事务


redis > MULTI

开启事务后的所有操作都不会立即执行,只有执行EXEC命令的时候才会批处理执行


redis > DECR kill_num
redis > RPUSH kill_user 10086
redis > EXEC

spring-boot 引入 redis 依赖


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

实现代码


@Autowired
private StringRedisTemplate redisTemplate;

public void kill() {
    // 获取库存
    int killNum = Integer.parseInt(Objects.requireNonNull(redisTemplate.opsForValue().get("kill_num")));
    if (killNum > 0) {
        redisTemplate.watch(Arrays.asList("kill_num", "kill_user"));
        // 开启事务
        redisTemplate.multi();
        // 库存-1
        redisTemplate.opsForValue().decrement("kill_num");
        // 记录秒杀用户id(10086)
        redisTemplate.opsForList().rightPush("kill_user", "10086");
        // 提交事务
        redisTemplate.exec();
    }
}

总结

到此这篇关于使用Redis实现秒杀功能的文章就介绍到这了,更多相关Redis秒杀功能内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 使用Redis实现秒杀功能的简单方法

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

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

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

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

下载Word文档
猜你喜欢
  • 使用Redis实现秒杀功能的简单方法
    1. 怎样预防数据库超售现象 设置数据库事务的隔离级别为Serializable(不可用) Serializable就是让数据库去串行化的去执行事务,一个事务执行完才能去执行下一个事...
    99+
    2022-11-12
  • 使用PHP和Redis实现简单秒杀功能
    安装Redis 首先,需要在服务器上安装Redis。如果使用Linux系统,可以使用命令行安装。如果使用Windows系统,可以下载并安装Redis二进制文件。 创建Redis连接 在PHP中,可以使用Redis扩展来连接Redis服务器。...
    99+
    2023-10-20
    php redis 开发语言
  • 如何使用Redis实现秒杀功能
    这篇文章主要介绍如何使用Redis实现秒杀功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 怎样预防数据库超售现象设置数据库事务的隔离级别为Serializable(不可用)Serializable就是让数据库...
    99+
    2023-06-14
  • 如何用Redis乐观锁实现秒杀功能
    在大流量程序开发中,必然会遇到高并发的应用的场景。解决方案大致分为两个方向,消息队列、锁.redis 实现消息队列核心简单版本 $key = 'quque'; ...
    99+
    2022-10-18
  • Spring Boot 整合Redis 实现优惠卷秒杀 一人一单功能
    目录一、什么是全局唯一ID⛅全局唯一ID⚡Redis实现全局唯一ID二、环境准备三、实现秒杀下单四、库存超卖问题⏳问题分析⌚ 乐观锁解决库存超卖✅Jmeter 测试五、优惠卷秒杀 实现一人一单⛵小结一、什么是全局唯一ID...
    99+
    2022-09-19
  • Spring Boot 整合Redis 实现优惠卷秒杀 一人一单功能
    目录一、什么是全局唯一ID⛅全局唯一ID⚡Redis实现全局唯一ID二、环境准备三、实现秒杀下单四、库存超卖问题⏳问题分析⌚ 乐观锁解决库存超卖✅Jmeter 测试五、优惠卷秒杀 实...
    99+
    2022-11-13
  • thinkphp中怎么利用redis实现秒杀缓存功能
    thinkphp中怎么利用redis实现秒杀缓存功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1,安装redis,根据自己的php版本安装对应的redis扩...
    99+
    2023-06-19
  • 怎么在redis中使用watch实现一个秒杀抢购功能
    怎么在redis中使用watch实现一个秒杀抢购功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体内容如下1、使用watch,采用乐观...
    99+
    2022-10-18
  • php结合redis实现高并发下的抢购、秒杀功能的实例
    抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接...
    99+
    2022-06-04
    实例 功能 秒杀
  • Python简单实现enum功能的方法
    本文实例讲述了Python简单实现enum功能的方法。分享给大家供大家参考,具体如下: class Enumerate(object): def __init__(self,names): ...
    99+
    2022-06-04
    简单 功能 方法
  • springboot+redis实现简单的热搜功能
    使用springboot集成redis实现一个简单的热搜功能。 搜索栏展示当前登录的个人用户的搜索历史记录;删除个人用户的搜索历史记录;插入个人用户的搜索历史记录;用户在搜索栏输入某...
    99+
    2022-11-13
  • Vue拖动截图功能的简单实现方法
    拖动鼠标进行页面截图(也可指定区域拖动截图) 一、安装html2canvas、vue-cropper npm i html2canvas --save //用于...
    99+
    2022-11-12
  • 使用Redis实现排行榜功能的方法
    这篇文章给大家分享的是有关使用Redis实现排行榜功能的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。下面由Redis教程栏目给大家介绍使用Redis实现排行榜功能的方法,希...
    99+
    2022-10-18
  • 怎么使用java和redis实现一个简单的热搜功能
    这篇文章主要介绍“怎么使用java和redis实现一个简单的热搜功能”,在日常操作中,相信很多人在怎么使用java和redis实现一个简单的热搜功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用jav...
    99+
    2023-06-29
  • vue实现购物车全部功能的简单方法
    主要功能如下: 增加商品信息 修改商品信息 删除单个商品 删除多个商品 清空购物车 对商品单价进行降序排序 根据商品名称实现...
    99+
    2022-11-12
  • Android编程简单实现拨号器功能的方法
    本文实例讲述了Android编程简单实现拨号器功能的方法。分享给大家供大家参考,具体如下:学习Android已经有2天时间了,没学习的时候觉得android可能很枯燥,但是学过之后我发觉其实这个比什么javaweb好玩多了。学习androi...
    99+
    2023-05-30
    android 拨号器 roi
  • Python 用Redis简单实现分布式爬虫的方法
    Redis通常被认为是一种持久化的存储器关键字-值型存储,可以用于几台机子之间的数据共享平台。 连接数据库 注意:假设现有几台在同一局域网内的机器分别为Master和几个Slaver Master连...
    99+
    2022-06-04
    爬虫 分布式 简单
  • nodejs中sleep功能实现暂停几秒的方法
    我在网上了解了一下nodejs中sleep功能,搜索了很多关于nodejs中sleep功能介绍,下面我来记录一下,有需要了解的朋友可参考。希望此文章对各位有所帮助。 一 背景 在使用nodejs爬虫的时...
    99+
    2022-06-04
    几秒 功能 方法
  • Android使用GridView实现日历的简单功能
    简单的日历实现,只是显示了每一个月,没有显示当天和记事这些功能 主要是计算月初是周几,月末是周几,然后相应的显示上一月多少天和下一月多少天。 先看一下关于日期的用到的几个工具...
    99+
    2022-06-06
    gridview Android
  • 使用python实现简单去水印功能
    在做视频或者图片处理的时候,我们经常会遇到存在水印的情况,或者我们需要去除图片的某一个部分,这时候我们就需要想办法去除不需要的这一部分。下面这个工具能够控制鼠标将图片上的任意部分改变...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作