redis list 实现消息队列 多线程消费

  • redis list 实现消息队列 多线程消费

redis list 实现消息队列 多线程消费

利用redis list 命令:

Redis Brpoplpush 命令从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

BRPOPLPUSH msg reciver 500
假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。

多个线程分别拉去公共list中消息,并保存到各自线程命名的redis list 中,待成功消费消息后各自将自己的redis list 中的item 移除,如果消费过程中线程异常中断,则自己的list 中的item不被移除,重新启动线程时先从自己的list中拉去并保存到自己list中,得到item进行消费之后再从公共的list中消费item。

#mermaid-svg-GvFkqtnlWq6f22aE .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-GvFkqtnlWq6f22aE .label text{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE .node rect,#mermaid-svg-GvFkqtnlWq6f22aE .node circle,#mermaid-svg-GvFkqtnlWq6f22aE .node ellipse,#mermaid-svg-GvFkqtnlWq6f22aE .node polygon,#mermaid-svg-GvFkqtnlWq6f22aE .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-GvFkqtnlWq6f22aE .node .label{text-align:center;fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE .node.clickable{cursor:pointer}#mermaid-svg-GvFkqtnlWq6f22aE .arrowheadPath{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-GvFkqtnlWq6f22aE .flowchart-link{stroke:#333;fill:none}#mermaid-svg-GvFkqtnlWq6f22aE .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-GvFkqtnlWq6f22aE .edgeLabel rect{opacity:0.9}#mermaid-svg-GvFkqtnlWq6f22aE .edgeLabel span{color:#333}#mermaid-svg-GvFkqtnlWq6f22aE .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-GvFkqtnlWq6f22aE .cluster text{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-GvFkqtnlWq6f22aE .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-GvFkqtnlWq6f22aE text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-GvFkqtnlWq6f22aE .actor-line{stroke:grey}#mermaid-svg-GvFkqtnlWq6f22aE .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-GvFkqtnlWq6f22aE .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-GvFkqtnlWq6f22aE #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-GvFkqtnlWq6f22aE .sequenceNumber{fill:#fff}#mermaid-svg-GvFkqtnlWq6f22aE #sequencenumber{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE #crosshead path{fill:#333;stroke:#333}#mermaid-svg-GvFkqtnlWq6f22aE .messageText{fill:#333;stroke:#333}#mermaid-svg-GvFkqtnlWq6f22aE .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-GvFkqtnlWq6f22aE .labelText,#mermaid-svg-GvFkqtnlWq6f22aE .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-GvFkqtnlWq6f22aE .loopText,#mermaid-svg-GvFkqtnlWq6f22aE .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-GvFkqtnlWq6f22aE .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-GvFkqtnlWq6f22aE .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-GvFkqtnlWq6f22aE .noteText,#mermaid-svg-GvFkqtnlWq6f22aE .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-GvFkqtnlWq6f22aE .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-GvFkqtnlWq6f22aE .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-GvFkqtnlWq6f22aE .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-GvFkqtnlWq6f22aE .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE .section{stroke:none;opacity:0.2}#mermaid-svg-GvFkqtnlWq6f22aE .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-GvFkqtnlWq6f22aE .section2{fill:#fff400}#mermaid-svg-GvFkqtnlWq6f22aE .section1,#mermaid-svg-GvFkqtnlWq6f22aE .section3{fill:#fff;opacity:0.2}#mermaid-svg-GvFkqtnlWq6f22aE .sectionTitle0{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE .sectionTitle1{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE .sectionTitle2{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE .sectionTitle3{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-GvFkqtnlWq6f22aE .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE .grid path{stroke-width:0}#mermaid-svg-GvFkqtnlWq6f22aE .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-GvFkqtnlWq6f22aE .task{stroke-width:2}#mermaid-svg-GvFkqtnlWq6f22aE .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE .taskText:not([font-size]){font-size:11px}#mermaid-svg-GvFkqtnlWq6f22aE .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-GvFkqtnlWq6f22aE .task.clickable{cursor:pointer}#mermaid-svg-GvFkqtnlWq6f22aE .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-GvFkqtnlWq6f22aE .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-GvFkqtnlWq6f22aE .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-GvFkqtnlWq6f22aE .taskText0,#mermaid-svg-GvFkqtnlWq6f22aE .taskText1,#mermaid-svg-GvFkqtnlWq6f22aE .taskText2,#mermaid-svg-GvFkqtnlWq6f22aE .taskText3{fill:#fff}#mermaid-svg-GvFkqtnlWq6f22aE .task0,#mermaid-svg-GvFkqtnlWq6f22aE .task1,#mermaid-svg-GvFkqtnlWq6f22aE .task2,#mermaid-svg-GvFkqtnlWq6f22aE .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-GvFkqtnlWq6f22aE .taskTextOutside0,#mermaid-svg-GvFkqtnlWq6f22aE .taskTextOutside2{fill:#000}#mermaid-svg-GvFkqtnlWq6f22aE .taskTextOutside1,#mermaid-svg-GvFkqtnlWq6f22aE .taskTextOutside3{fill:#000}#mermaid-svg-GvFkqtnlWq6f22aE .active0,#mermaid-svg-GvFkqtnlWq6f22aE .active1,#mermaid-svg-GvFkqtnlWq6f22aE .active2,#mermaid-svg-GvFkqtnlWq6f22aE .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-GvFkqtnlWq6f22aE .activeText0,#mermaid-svg-GvFkqtnlWq6f22aE .activeText1,#mermaid-svg-GvFkqtnlWq6f22aE .activeText2,#mermaid-svg-GvFkqtnlWq6f22aE .activeText3{fill:#000 !important}#mermaid-svg-GvFkqtnlWq6f22aE .done0,#mermaid-svg-GvFkqtnlWq6f22aE .done1,#mermaid-svg-GvFkqtnlWq6f22aE .done2,#mermaid-svg-GvFkqtnlWq6f22aE .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-GvFkqtnlWq6f22aE .doneText0,#mermaid-svg-GvFkqtnlWq6f22aE .doneText1,#mermaid-svg-GvFkqtnlWq6f22aE .doneText2,#mermaid-svg-GvFkqtnlWq6f22aE .doneText3{fill:#000 !important}#mermaid-svg-GvFkqtnlWq6f22aE .crit0,#mermaid-svg-GvFkqtnlWq6f22aE .crit1,#mermaid-svg-GvFkqtnlWq6f22aE .crit2,#mermaid-svg-GvFkqtnlWq6f22aE .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-GvFkqtnlWq6f22aE .activeCrit0,#mermaid-svg-GvFkqtnlWq6f22aE .activeCrit1,#mermaid-svg-GvFkqtnlWq6f22aE .activeCrit2,#mermaid-svg-GvFkqtnlWq6f22aE .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-GvFkqtnlWq6f22aE .doneCrit0,#mermaid-svg-GvFkqtnlWq6f22aE .doneCrit1,#mermaid-svg-GvFkqtnlWq6f22aE .doneCrit2,#mermaid-svg-GvFkqtnlWq6f22aE .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-GvFkqtnlWq6f22aE .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-GvFkqtnlWq6f22aE .milestoneText{font-style:italic}#mermaid-svg-GvFkqtnlWq6f22aE .doneCritText0,#mermaid-svg-GvFkqtnlWq6f22aE .doneCritText1,#mermaid-svg-GvFkqtnlWq6f22aE .doneCritText2,#mermaid-svg-GvFkqtnlWq6f22aE .doneCritText3{fill:#000 !important}#mermaid-svg-GvFkqtnlWq6f22aE .activeCritText0,#mermaid-svg-GvFkqtnlWq6f22aE .activeCritText1,#mermaid-svg-GvFkqtnlWq6f22aE .activeCritText2,#mermaid-svg-GvFkqtnlWq6f22aE .activeCritText3{fill:#000 !important}#mermaid-svg-GvFkqtnlWq6f22aE .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-GvFkqtnlWq6f22aE g.classGroup text .title{font-weight:bolder}#mermaid-svg-GvFkqtnlWq6f22aE g.clickable{cursor:pointer}#mermaid-svg-GvFkqtnlWq6f22aE g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-GvFkqtnlWq6f22aE g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-GvFkqtnlWq6f22aE .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-GvFkqtnlWq6f22aE .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-GvFkqtnlWq6f22aE .dashed-line{stroke-dasharray:3}#mermaid-svg-GvFkqtnlWq6f22aE #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE .commit-id,#mermaid-svg-GvFkqtnlWq6f22aE .commit-msg,#mermaid-svg-GvFkqtnlWq6f22aE .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-GvFkqtnlWq6f22aE g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-GvFkqtnlWq6f22aE g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-GvFkqtnlWq6f22aE g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-GvFkqtnlWq6f22aE .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-GvFkqtnlWq6f22aE .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-GvFkqtnlWq6f22aE .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-GvFkqtnlWq6f22aE .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-GvFkqtnlWq6f22aE .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-GvFkqtnlWq6f22aE .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-GvFkqtnlWq6f22aE .edgeLabel text{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-GvFkqtnlWq6f22aE .node circle.state-start{fill:black;stroke:black}#mermaid-svg-GvFkqtnlWq6f22aE .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-GvFkqtnlWq6f22aE #statediagram-barbEnd{fill:#9370db}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-state .divider{stroke:#9370db}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-GvFkqtnlWq6f22aE .note-edge{stroke-dasharray:5}#mermaid-svg-GvFkqtnlWq6f22aE .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-GvFkqtnlWq6f22aE .error-icon{fill:#522}#mermaid-svg-GvFkqtnlWq6f22aE .error-text{fill:#522;stroke:#522}#mermaid-svg-GvFkqtnlWq6f22aE .edge-thickness-normal{stroke-width:2px}#mermaid-svg-GvFkqtnlWq6f22aE .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-GvFkqtnlWq6f22aE .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-GvFkqtnlWq6f22aE .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-GvFkqtnlWq6f22aE .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-GvFkqtnlWq6f22aE .marker{fill:#333}#mermaid-svg-GvFkqtnlWq6f22aE .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-GvFkqtnlWq6f22aE {color: rgba(0, 0, 0, 0.75);font: ;}

移到自己的list
正常消费后,lpop 掉消息
线程异常中断消费,重启后先消费self list (RPOPLPUSH)
移到自己的list
正常消费后,lpop 掉消息
线程异常中断消费,重启后先消费self list (RPOPLPUSH)
pub list
RPOPLPUSH
线程1 self list
线程1
RPOPLPUSH
线程2 self list
线程2

redis list 实现消息队列 多线程消费相关推荐

  1. redis延迟消息队列不准时php,Redis实现延迟消息队列

    消息队列是应用中常用的一个技术点,通常我们可以借助消息队列中间件来实现,但是并不是所有的情况下,都需要使用到MQ. 如果只需要实现简单的消息队列,那么借助Redis即可. 如果对消息有着严格的可靠性等 ...

  2. 使用 Redis Stream 实现消息队列

    使用 Redis Stream 实现消息队列 Intro Redis 5.0 中增加了 Stream 的支持,利用 Stream 我们可以实现可靠的消息队列,并且支持一个消息被多个消费者所消费,可以很 ...

  3. redis 消息队列 过段时间不能下发_以Redis来谈消息队列

    首先 我先引入一个大家熟知的观点:Reids可以作为消息队列来使用 redis提供了两种方式来做消息队列,一种是生产者消费者模式,一种是发布订阅模式. 本篇文章将从 异步,解耦,分布式,可靠四部分来探 ...

  4. 消息队列的消费幂等性如何保证

    参考大佬文章:消息队列的消费幂等性如何保证 这里先介绍下幂等性: 幂等性: 一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同 比如:一条数据或者一个请求,重复发起多次,我们要确保对 ...

  5. redis stream 实现消息队列

    redis stream 实现消息队列 Redis5.0带来了Stream类型.从字面上看是流类型,但其实从功能上看,应该是Redis对消息队列(MQ,Message Queue)的完善实现. 基于r ...

  6. thinkphp 实现redis简单的消息队列

    thinkphp 实现redis简单的消息队列 本章简单的实现.消息队列的入列和出列 1.入列,入列作为生产者,只管尽情的成产即可,无需考虑其他 (秒杀.抢购场景除外). 此次我们假如有十个用户进入队 ...

  7. Redis如何实现消息队列

    消息队列的实现方式有很多种,比如有专业的rabbitmq,rocketmq,kafka等,这些mq提供了非常专业的功能实现异步发送,而且这些接入又比较复杂. Redis 利用 其 专有的数据结构lis ...

  8. 基于 Redis Stream 的消息队列

    文章目录 基于 Redis Stream 的消息队列 消息队列相关命令 消费者组相关命令 如何使用Stream消息队列 生产者写入消息 - XADD 消费者读取消息 - XGROUP 创建消费者组 - ...

  9. redis简单队列java_使用Redis的简单消息队列

    redis简单队列java 在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medi ...

最新文章

  1. Eclipse的Java工作集和多工程构建路径
  2. 重新学.Net[四]——效率和安全
  3. AT2339-[AGC011C]Squared Graph【黑白染色】
  4. JSF 源代码赏析之Lifecycle
  5. ballerina 学习二十六 项目docker 部署 运行(二)
  6. c语言跑马灯循环三次停止,跑马灯代码 连续不间断的跑马灯的代码(js)
  7. 2021-eclipse的安装及环境配置
  8. Struts1 页面提交到ActionForm,form为null
  9. vos系统是什么?vos网络电话系统怎样搭建?
  10. 好文分享:一切都是最好的安排
  11. ssh远程No route to host问题解决
  12. 程序人生:如何成为一名优秀的全栈工程师
  13. 地壳中元素含量排名记忆口诀_地壳中元素含量_地壳中元素含量口诀
  14. CGdiObject::DeleteObject的说法
  15. [已解决] 输出信号超出范围调整为1600x900@60hz
  16. Fidder快速上手使用
  17. 博客园使用markdown发布博客
  18. 群辉 实现多人在线文档编译 nextcloud+onlyoffice
  19. c语言写的数据挖掘的层次聚类算法(新手版)
  20. 进程与线程基础day02--------守护进程、系统日志、文件锁

热门文章

  1. excel转word_一键就可以随意互转Word、PPT、Excel、PDF,不用花钱,网友:赞
  2. 中国互联网公司最新最全阵亡名单
  3. Ubuntu上面搭建Java开发环境
  4. php 读取utf8mb4,关于php:使用带有utf8表的SET NAMEs utf8mb4
  5. Windows7启用超级管理员administrator账户的多种方法
  6. java ps h264_从海康28181的PS流解析H264的补充
  7. mybatis中的ResultMap使用
  8. (九十八)大白话一线电商公司的订单系统是如何进行数据库设计的?
  9. 大语言模型-中文Langchain
  10. 计算机无法关闭怎么办,电脑关机关不了怎么解决