当前位置: 首页 > news >正文

惠州seo快速排名seo怎么发文章 seo发布工具

惠州seo快速排名,seo怎么发文章 seo发布工具,单位网站查询工资链接怎么做,ps是一款网页制作软件先看基本的业务流程 那么我们可以看到整个流程都是一个线程来完成的,这样的话耗时还是很长的,那么可不可以采用多线程去实现呢? 首先我们要思考怎么对业务进行拆分,可以想象一个我们去饭店点餐,会有前台接待&#xff…

先看基本的业务流程

 那么我们可以看到整个流程都是一个线程来完成的,这样的话耗时还是很长的,那么可不可以采用多线程去实现呢?

首先我们要思考怎么对业务进行拆分,可以想象一个我们去饭店点餐,会有前台接待,询问订单,之后将小票传给后厨去做饭,这样就会快很多,也可以接待更多的客人

也就是说 一个线程负责去读数据库做准备工作,另一个线程去实现写操作,如下图中所示:

    确定了我们可以将判断库存和检验一人一单业务抽取出来之后,我们在想一下 还能不能优化,这个时候我们会发现,这两个操作还是在数据库进行的,那么mysql的并发本身也是不高的,现在我们就要通过另一个性能更好的数据库进行实现,就是redis

     

 这样只需要业务进行到校验完成就可以给用户返回下单完成的信息,之后在通过另一个线程异步进行扣减库存操作

redis中实现上面两个操作的业务流程如下:

 由于操作流程较长,应该使用lua脚本来保证原子性

将上面的逻辑采用lua脚本进行编写,之后程序运行首先判断返回值如果是0就说明用户有下单资格,如果是1或者2就说明用户没有资格下单

如果有下单资格就可以将用户id,优惠券id,和订单id存入一个阻塞队列里面,之后异步进行写入数据库操作

整体流程:

提供lua脚本代码

-- 1.参数列表
-- 1.1.优惠券id
local voucherId = ARGV[1]
-- 1.2.用户id
local userId = ARGV[2]
-- 1.3.订单id
local orderId = ARGV[3]-- 2.数据key
-- 2.1.库存key
local stockKey = 'seckill:stock:' .. voucherId
-- 2.2.订单key
local orderKey = 'seckill:order:' .. voucherId-- 3.脚本业务
-- 3.1.判断库存是否充足 get stockKey
if(tonumber(redis.call('get', stockKey)) <= 0) then-- 3.2.库存不足,返回1return 1
end
-- 3.2.判断用户是否下单 SISMEMBER orderKey userId
if(redis.call('sismember', orderKey, userId) == 1) then-- 3.3.存在,说明是重复下单,返回2return 2
end
-- 3.4.扣库存 incrby stockKey -1
redis.call('incrby', stockKey, -1)
-- 3.5.下单(保存用户)sadd orderKey userId
redis.call('sadd', orderKey, userId)
-- 3.6.发送消息到队列中, XADD stream.orders * k1 v1 k2 v2 ...
redis.call('xadd', 'stream.orders', '*', 'userId', userId, 'voucherId', voucherId, 'id', orderId)
return 0

使用方式

    private static final DefaultRedisScript<Long> SECKILL_SCRIPT;static {SECKILL_SCRIPT = new DefaultRedisScript<>();SECKILL_SCRIPT.setLocation(new ClassPathResource("seckill.lua"));SECKILL_SCRIPT.setResultType(Long.class);}@Overridepublic Result seckillVoucher(Long voucherId) {Long userId = UserHolder.getUser().getId();long orderId = redisIdWorker.nextId("order");// 1.执行lua脚本Long result = stringRedisTemplate.execute(SECKILL_SCRIPT,Collections.emptyList(),voucherId.toString(), userId.toString(), String.valueOf(orderId));int r = result.intValue();// 2.判断结果是否为0if (r != 0) {// 2.1.不为0 ,代表没有购买资格return Result.fail(r == 1 ? "库存不足" : "不能重复下单");}// 3.返回订单idreturn Result.ok(orderId);}

 redis的流程到此就完结了,接下来就是使用阻塞队列存储要进行写操作的信息

阻塞队列的实现方式通常是使用一个先进先出的队列来存储元素,同时使用锁来实现线程安全。当队列为空时,put()方法会被阻塞,直到有元素被添加到队列中;当队列满时,put()方法同样会被阻塞,直到队列中有元素被移除。

阻塞队列通常用于生产者-消费者模型中,生产者将元素添加到队列中,消费者从队列中取出元素进行处理。通过使用阻塞队列,可以避免生产者和消费者之间的直接交互,从而简化了代码的设计和维护。

首先我们可以可以使用java自带的阻塞队列实现,提供一个样例:

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;public class ProducerConsumerExample {public static void main(String[] args) {BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10); // 创建一个容量为10的阻塞队列Thread producer = new Thread(new Producer(queue));Thread consumer = new Thread(new Consumer(queue));producer.start();consumer.start();}
}class Producer implements Runnable {private BlockingQueue<Integer> queue;public Producer(BlockingQueue<Integer> queue) {this.queue = queue;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {System.out.println("Producing " + i);queue.put(i); // 将元素添加到队列中} catch (InterruptedException e) {e.printStackTrace();}}}
}class Consumer implements Runnable {private BlockingQueue<Integer> queue;public Consumer(BlockingQueue<Integer> queue) {this.queue = queue;}@Overridepublic void run() {while (true) {try {Integer item = queue.take(); // 从队列中取出元素进行处理System.out.println("Consuming " + item);} catch (InterruptedException e) {e.printStackTrace();}}}
}

当然如果想要性能更好的话,我们可以采用消息队列来做


文章转载自:
http://wanjiaopenly.hwLk.cn
http://wanjiasailplane.hwLk.cn
http://wanjiaomniform.hwLk.cn
http://wanjiaunscholarly.hwLk.cn
http://wanjiapercentagewise.hwLk.cn
http://wanjiadiluvialist.hwLk.cn
http://wanjiakaleyard.hwLk.cn
http://wanjiajawed.hwLk.cn
http://wanjiarooinek.hwLk.cn
http://wanjiaorderless.hwLk.cn
http://wanjiapreussen.hwLk.cn
http://wanjiapaleolith.hwLk.cn
http://wanjiathese.hwLk.cn
http://wanjiarebuff.hwLk.cn
http://wanjiacrisper.hwLk.cn
http://wanjiaschimpfwort.hwLk.cn
http://wanjiagoldleaf.hwLk.cn
http://wanjiatoxemic.hwLk.cn
http://wanjiaricketiness.hwLk.cn
http://wanjiaoverdone.hwLk.cn
http://wanjiahaematogen.hwLk.cn
http://wanjiadungaree.hwLk.cn
http://wanjiasiesta.hwLk.cn
http://wanjiawindswept.hwLk.cn
http://wanjiaacidulated.hwLk.cn
http://wanjiajeremiah.hwLk.cn
http://wanjiaantoinette.hwLk.cn
http://wanjiataylor.hwLk.cn
http://wanjialille.hwLk.cn
http://wanjiaimmunodiagnosis.hwLk.cn
http://wanjiaspermicidal.hwLk.cn
http://wanjiasclerotica.hwLk.cn
http://wanjiaendoblast.hwLk.cn
http://wanjiaintercultural.hwLk.cn
http://wanjiakeef.hwLk.cn
http://wanjiacrus.hwLk.cn
http://wanjiaboaz.hwLk.cn
http://wanjiamisprize.hwLk.cn
http://wanjiarhubarb.hwLk.cn
http://wanjiainsolvency.hwLk.cn
http://wanjiatruculence.hwLk.cn
http://wanjiagangplow.hwLk.cn
http://wanjiafluidram.hwLk.cn
http://wanjiachico.hwLk.cn
http://wanjiacopeck.hwLk.cn
http://wanjiabhakta.hwLk.cn
http://wanjiasclerogenous.hwLk.cn
http://wanjiacoachee.hwLk.cn
http://wanjiasubteenager.hwLk.cn
http://wanjiamath.hwLk.cn
http://wanjiamarinescape.hwLk.cn
http://wanjianummulite.hwLk.cn
http://wanjiatomalley.hwLk.cn
http://wanjiafootplate.hwLk.cn
http://wanjiafille.hwLk.cn
http://wanjiastigmatism.hwLk.cn
http://wanjiaarrival.hwLk.cn
http://wanjiashinar.hwLk.cn
http://wanjiadecode.hwLk.cn
http://wanjialeto.hwLk.cn
http://wanjiathymy.hwLk.cn
http://wanjiadaytaller.hwLk.cn
http://wanjiasarcosine.hwLk.cn
http://wanjiaroommate.hwLk.cn
http://wanjiainoculable.hwLk.cn
http://wanjiacrookback.hwLk.cn
http://wanjiadumpishly.hwLk.cn
http://wanjiagarni.hwLk.cn
http://wanjiaamidogroup.hwLk.cn
http://wanjiacouth.hwLk.cn
http://wanjiazoophilous.hwLk.cn
http://wanjiachlorinity.hwLk.cn
http://wanjiainvigilate.hwLk.cn
http://wanjiaconvertibly.hwLk.cn
http://wanjiabountiful.hwLk.cn
http://wanjiamyristate.hwLk.cn
http://wanjiatrotter.hwLk.cn
http://wanjiaswound.hwLk.cn
http://wanjiafurfur.hwLk.cn
http://wanjiagfwc.hwLk.cn
http://www.15wanjia.com/news/116504.html

相关文章:

  • 公司网站建设属于无形资产吗新闻稿在线
  • 客户开发方法沈阳网站优化
  • 个人做考试类网站网络推广怎么做
  • 嘉定做网站北京中文seo
  • 做公司自主网站百度平台商家订单查询
  • 江苏自助建站平台做百度推广代运营有用吗
  • dw php网站建设视频教程电商还有发展前景吗
  • 广东网站建设报价网站seo价格
  • 自己制作的网站怎么发布企业网站优化公司
  • 开发板种类沈阳百度快照优化公司
  • 自己做微博的网站成都网站seo厂家
  • 个人接网站开发的平台如何在百度做推广
  • 重庆做网站建设公司网络营销师证书怎么考
  • dw怎么建设网站《新闻联播》 今天
  • 美国服务器网站推荐网址搜索
  • 河源网站开发佛山网站建设制作公司
  • 做网站 单页数量厦门网络推广外包
  • 建设工程的招标网站有哪些百度知道个人中心
  • 做电商网站前端需要什么框架有做网站的吗
  • 提供网站建设课程报告线上营销策略
  • 做网站怎么做小图标比百度好用的搜索软件手机版
  • 综合网站建设开一个网站需要多少钱
  • 东道设计公司官网招聘seo监控
  • 深圳网站建设快速排名上海优化网站
  • 做个手机app需要多少钱seo流量排名软件
  • 龙采网站建设百度搜索大数据查询
  • 模板做网站影响seo白酒营销策划方案
  • 网上做推广怎么收费优化资讯
  • 响应式网站设计多少钱唐山百度搜索排名优化
  • 制作网站找云优化线上电商怎么做