laravel中如何使用消息队列_chen529834149的博客-CSDN博客_rd_kafka_offset_tail


本站和网页 https://blog.csdn.net/chen529834149/article/details/76918406 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

laravel中如何使用消息队列_chen529834149的博客-CSDN博客_rd_kafka_offset_tail
laravel中如何使用消息队列
置顶
chen529834149
于 2017-08-08 16:44:29 发布
12935
收藏
分类专栏:
php
laravel
文章标签:
kafka消息队列
php
同时被 2 个专栏收录
56 篇文章
0 订阅
订阅专栏
laravel
39 篇文章
0 订阅
订阅专栏
queue配置
首先说明一下我之前的项目中如何使用queue的。
我们现在的项目都是用的symfony,老一点的项目用的symfony1.4,新一点的项目用的都是symfony2。symfony用起来整体感觉还是很爽的,尤其symfony2,整体上来讲使用了很多java里面框架的设计思想。但是他不支持queue。在symfony,我们使用queue也经历了几个过程。最开始使用张堰同学的httpsqs。这个简单使用,但是存在单点。毕竟我们的项目还是正式对外服务的,所以我们研究了Apache旗下的开源项目ActiveMQ,研究研究发现还有Apache旗下还有更新的MQ,那就是Apollo。最后我们决定使用的Apollo。
queue在我们的项目中主要的应用场景就是异步处理一些比较耗时的功能,比如同步第三方数据、数据有变动了同步通知到我们的第三方数据使用者等等。我们大致的思路是这样的,在各个controller里面如果需要异步处理的,就把一个json对象encode一下,塞到Apollo里面。再写一个work的Command,在这个Command中解析json对象,根据里面的action和参数决定来调用不同的方法处理。根据业务需要同时在不同的机器上运行Command作为守护进程一直跑着,也算实现异步多任务处理应用的方案。就这么一直使用着,直到发现了laravel。打算研究一下。如果可能替代一下也不是不可能。呵呵。
由于才开始学习,当然直接上laravel5。routes、controller、view都基本上和symfony差别不到,上手倒是不困难。最后研究一下queue。
1、安装laravle,使用composer,倒是很简单。
composer global require
"laravel/installer=~1.1"
vi
~/.bash_profile
把~/.composer/vendor/bin 加入到环境变量中。
source
~/.bash_profile
就可以直接在命令行中使用laravel了。试一下。
laravel -V
能够看到下面的,就代表成功了。
Laravel Installer version 1.2.1
2、创建项目。
laravel new guagua
3、配置redis和queue。
4、创建controller,
php artisan
make
:controller DefaultController
在controller的action中push100个queue的任务。
for
$i
= 0;
$i
< 100;
$i
++) {
  
Queue::push(
new
SendEmail(
"ssss"
$i
));
5、创建queue的Command
php artisan
make
command
SendEmail --queued
修改app/Commands/SendEmail.php,添加一个私有变量。
protected
$msg
同时修改构造函数。
public
function
__construct(
$msg
  
$this
->msg =
$msg
再修改的handle方法
public
function
handle() {
  
sleep(4);
  
echo
$this
->msg.
"\t"
date
"Y-m-d H:i:s"
).
"\n"
  
$this
->
delete
();
6、修改routes
Route::get(
'/'
, [
  
'as'
=>
'index'
  
'uses'
=>
'DefaultController@index'
]);
7、监听queue
php artisan queue:listen
为了验证多任务处理,我们同时开三个窗口运行同样的命令。
8、用laravel内建的server启动服务
php artisan serve --port 8080
打开浏览器,访问http://localhost:8080/页面。当然也可以用nginx,apache之类的。但是需要各种配置,还是内建的使用方便。
在控制台就能看到各个queue执行的情况了,如下图。可以看到100个任务被三个work平分了。
到此,基本达到了我想要的效果。验证了laravel可以简单实现queue,并且可以多任务处理。
make command生成的代码中use App\Commands\Command ,但是运行时提示没有这个文件。 解决办法,修改为 use Illuminate\Console\Command; 不知道为什么会出现这个低级问题,难道是我mac系统问题,还是我的人品问题。 在controller的action中push队列的时候,没有异步执行,还是在action的脚本中执行的。 发现是配置问题,原来不仅仅要修改config中的queue.php,还要修改.evn中相关配置。 虽然问题解决了,但是还是觉得蛋疼,不能理解。还需要在学习学习laravel。
异步队列使用方法
1.配置
关于队列的定义,这里就不作介绍了。我们要使用异步队列就有两个关键:
(1)存储队列的地方 (2)执行任务的服务 打开 config/queue.php ,这是Laravel5关于队列的配置文件。首先我们可以通过 default 参数指定默认队列驱动,默认配置是 sync , 这是同步队列,我们要做异步队列首先就要改变这里。假设我们用 database 作为驱动,队列任务将会存放在数据库中,而我们后面会另外启动一个后台服务来处理队列任务,这就是异步方式了。
'default'
=>
'database'
修改完配置后,我们需要创建一个表来存放队列任务,Laravel5已经在自带artisan命令中内置了一个指令用来生成数据迁移,只需要两条命令即可,当然你得实现配置好数据库连接。
php artisan queue:table
php artisan migrate
这样就自动在数据库中创建了 jobs 表。
2.启动队列监听服务
通过下面这条指令启动队列监听服务,它会自动处理 jobs 表中的队列任务:
php artisan queue:listen
在linux中,如果想让它在后台执行,可以这样:
nohup
php artisan queue:listen &
3.添加队列任务
关于队列任务的添加,手册里说的比较详细,这里就简单举个例子吧。
首先,通过artisan创建一个队列命令:
php artisan
make
command
SendEmail --queued
这样会生成 app/Commands/SendEmail.php 这个类文件,这个类会被标识为队列命令,你可以在 handle 方法中写自己的业务逻辑。
在控制器中,可以简单通过 Bus::dispatch 分发任务:
Bus::dispatch(
new
\App\Commands\SendEmail());
你会发现任务不会立即执行,而是被放到 jobs 表中,由队列监听服务处理。
更详细的用法建议参考 command bus 和 queue 相关的手册章节。
在之前项目进行采集数据时,采用kafka消息队列,也挺不错的,接下来我们来搭建kafka消息队列:
mac安装kafka
1.安装最新版的kafka
brew install kafka
这将安装所有的依赖,包括zookeeper
2.启动zookeeper
brew services start zookeeper //启动zookeeper
zkServer start //或者这样启动
可以用 brew info zookeeper 命令查看zookeeper的相关信息,包括启动命令
3.启动kafka
brew services start kafka //启动kafka
kafka-server-start /usr/local/etc/kafka/server.properties //或者这样启动
同样可以用 brew info kafka 命令查看kafka的相关信息,包括启动命令
4. 创建一个topic
/usr/local/bin/kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
创建了一个名字为test的topic, topic的名字最好是全e文,不要有 _ .等特殊符号,可以用以下命令查看创建的 topic
/usr/local/bin/kafka-topics --list --zookeeper localhost:2181 //查看topic
/usr/local/bin/kafka-topics --delete --zookeeper localhost:2181 --topic entere //删除名为entere的topic
5. 发送消息 producer
/usr/local/bin/kafka-console-producer --broker-list localhost:9092 --topic test
hello this is a test message
6. 消费消息 consumer
/usr/local/bin/kafka-console-consumer --zookeeper localhost:2181 --topic test --from-beginning
7. 配置多个broker集群
到目前为止,我们都是在单个broker上运行的,但是这没啥好玩的。对于Kafka来说,单个broker其实就是一个大小为1的集群,所以对于启动多个broker的实例来说,道理也是一样的,并没有太多变化。但是为了感觉一下他,就让我们将我们的集群扩充道3个节点(仍然全部运行在我们的本地机器上)。 首先我们为每一个broker建一个配置文件:
cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties
现在,编辑这些新文件,并设置以下属性:
config/server-1.properties:
broker.id=1
port=9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
port=9094
log.dir=/tmp/kafka-logs-2
其中broker.id属性是一个不重复的常量,用来表示集群中每个节点的名字。我们在这里不得不重写port和log.dir,这只是因为我们是在同一台机器上运行这些命令,而我们要防止多个borker使用同一个端口注册而覆盖彼此的内容。
我们已经有了Zookeeper并且我们的单节点已经启动,所以我们现在需要启动这两个新节点:
/usr/local/bin/kafka-server-start config/server-1.properties &
/usr/local/bin/kafka-server-start config/server-2.properties &
现在创建一个有三个备份因子的新topic:
/usr/local/bin/kafka-topics --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
好了,现在我们有一个集群了,但是我们怎么知道每个个broker都在做什么呢?让我们运行describe topics命令来看看:
/usr/local/bin/kafka-topics --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
这是上面输出的说明。第一行给出了所有分区的总结,此外每一行都是一个分区的信息。因为我们现在在这个topic上只有两个分区,所以就只有两行。
"leader" 负责给定分区中所有的读和写的任务。分区将随即选取一个节点作为leader。
“replicas” 列出了所有当前分区中的副本节点。不论这些节点是否是leader或者是否处于激活状态,都会被列出来。
“isr” 是表示“在同步中”的副本节点的列表。是replicas列表的一个子集,包含了当前处于激活状态的节点,并且leader节点开头。
注意在我们的例子中,节点1该topic仅有的一个分区中的leader节点。
我们可以在之前我们创建的topic中运行同样的命令,来看看是什么情况:
/usr/local/bin/kafka-topics --describe --zookeeper localhost:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
看,和猜测的一样 -- 在之前的topic下没有副本节点,且其运行在server 0上,它是我们在创建topic时在集群中创建的唯一一个server。
让我们向我们的新topic发布一些消息:
/usr/local/bin/kafka-console-producer --broker-list localhost:9092 --topic my-replicated-topic
my test message 1
my test message 2
现在让我们消费这些消息:
/usr/local/bin/kafka-console-consumer --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic
my test message 1
my test message 2
现在让我们测试一下容错性。Broker 1是其中的leader,让我们关了它:
ps | grep server-1.properties
7564 ttys002 0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java...
kill -9 7564
Leader节点转移了,并且1号节点不再存在于“正在同步”的副本集合内:
/usr/local/bin/kafka-topics --describe --zookeeper localhost:218192 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 2 Replicas: 1,2,0 Isr: 2,0
但是这些消息仍然可以用来消费,即便是原本负责写的leader节点被关掉了:
bin/kafka-console-consumer --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic
my test message 1
my test message 2
安装kafka的php扩展
brew install homebrew/php/php70-rdkafka
我们这里选取了 php70-rdkafka 这个扩展,安装后重启php-fpm,大功告
producer
php发送消息示例
<?php
public function handle()
$title = "传唤华为,没有赢家的阻击战";
$content = "美国政府继3月份对中兴下重手处罚之后,开始瞄准华为。";
//$host_list = "172.16.88.12:9092";
//$host_list = "172.16.88.11:2181/kafka/q-ksg2na7l";
$broker = "172.16.88.12:9092";
//$broker = "localhost:9092";
$kafka = new \RdKafka\Producer();
$kafka->setLogLevel(LOG_DEBUG);
$num = $kafka->addBrokers($broker);
echo "added $num brokers \r\n";
$topic = $kafka->newTopic("topic_article_publish");
for($i = 0; $i < 20; $i++){
$msg = [
'header'=>[
'type'=>'article_publish',
'time'=>time(),
],
'body'=>[
'title'=>$i.'--'.$title,
'content'=>$i.'__'.$content,
],
];
$topic->produce(RD_KAFKA_PARTITION_UA, 0, json_encode($msg,JSON_UNESCAPED_UNICODE));
echo "the $i message sended successfully \r\n";
?>
consumer
php接收消息示例
<?php
public function handle()
$broker = "172.16.88.12:9092";
//$broker = "localhost:9092";
$rk = new \RdKafka\Consumer();
$rk->setLogLevel(LOG_DEBUG);
$num = $rk->addBrokers($broker);
$topic = $rk->newTopic("topic_article_publish");
$topic->consumeStart(0, RD_KAFKA_OFFSET_END);
//RD_KAFKA_OFFSET_BEGINNING,从partition消息队列的开始进行consume;
//RD_KAFKA_OFFSET_END,从partition中的将要produce的下一条信息开始(忽略即当前所有的消息)
//rd_kafka_offset_tail(5),consume 5 messages from the end,取最新5条
while (true) {
$msg = $topic->consume(0, 1000);
if(null === $msg){
} else {
if ($msg->err) {
echo $msg->errstr(), "\n";
sleep(10);
} else {
//var_dump($msg);
echo $msg->payload, "\n";
echo $msg->offset,"\n";
?>
chen529834149
关注
关注
点赞
收藏
评论
laravel中如何使用消息队列
queue配置首先说明一下我之前的项目中如何使用queue的。我们现在的项目都是用的symfony,老一点的项目用的symfony1.4,新一点的项目用的都是symfony2。symfony用起来整体感觉还是很爽的,尤其symfony2,整体上来讲使用了很多java里面框架的设计思想。但是他不支持queue。在symfony,我们使用queue也经历了几个过程。最开始使用张堰同学的
复制链接
扫一扫
专栏目录
Laravel开发-producer
08-28
Laravel开发-producer 基于规则的简单类解析
laravel 消息队列的简单使用
xxpxxpoo8的专栏
09-21
301
1,安装laravel redis扩展
composer require predis/predis -vvv
2 配置redis
REDIS_HOST=192.168.0.110
REDIS_PASSWORD=aJEWARAWR
REDIS_PORT=6379
//队列连接
QUEUE_CONNECTION=redis
3 执行代码
php artisan make:job TestJob
3,模拟分发100个任务 队列名为 my_custom,这个在监听时需要
p...
参与评论
您还未登录,请先
登录
后发表或查看评论
laravel 使用rabbitmq
最新发布
m0_37634311的博客
10-27
705
php laravel rabbitmq
Laravel 的消息队列剖析
cangqiong_xiamen的博客
08-20
289
在实际工作中也不止遇见过一次这个问题,我在想着以前是怎么处理的呢?我记得当初在上家公司的时候直接使用的是 laravel 的 queue 来实现的。当然,这里说的 laravel 的 queue 实际上也是基于 redis 的队列实现的。正好今天遇上这个问题,追下底层机制。
使用如下:http://learnku.com/docs/laravel/5.3/queues
// 创建10分钟后执行的任务
$job = (new ProcessPodcast($pocast))
-&gt
Laravel Queue——消息队列任务与分发源码剖析
cangqiong_xiamen的博客
08-20
309
在实际的项目开发中,我们经常会遇到需要轻量级队列的情形,例如发短信、发邮件等,这些任务不足以使用 kafka、RabbitMQ 等重量级的消息队列,但是又的确需要异步、重试、并发控制等功能。通常来说,我们经常会使用 Redis、Beanstalk、Amazon SQS 来实现相关功能,laravel 为此对不同的后台队列服务提供统一的 API,本文将会介绍应用最为广泛的 redis 队列。
本文参考文档资料:
使用 Laravel Queue 不得不明白的知识
Laravel 的消息队列剖析
背景知识
在讲
Laravel Queue—消息队列任务
littlexiaoshuishui的博客
01-13
741
Laravel Queue—消息队列任务
laravel队列的使用
队列可以通过多种方式实现,在config/queue.php配置connection
//这里配置了三种方式,具体选哪一种,需要在.env配置 QUEUE_CONNECTION=redis
'connections' => [
'sync' => [
'driver' =...
Laravel队列的用法
qq_41688060的博客
09-04
2106
laravel队列 可分为【同步队列】和【延时队列】两种
一,默认QUEUE_DRIVER=sync 是同步的,使用delay延时队列不能使用同步的,否则不起作用。
要想使用延时队列必须把 QUEUE_DRIVER设置成 redis 或者 datebase 延迟才起作用
二,一般什么情况下会用到延迟队列呢?举个栗子(商城用户生成订单后没有付款三十分钟后取消订单,这个时候用延时队列来处理岂不快哉,或者群发邮件短信等一些耗时的操作时就需要用到延时队列,这样就可以减轻服务器的压力,减少等待时间)
三,创建任务类
laravel队列
九步
04-25
1693
1 环境
Laravel是一种类似ThinkPHP的php框架,封装的诸多功能可以很方便的使用。队列Queue便是其中之一。
Windows环境下,可使用PHPstorm作为Laravel的集成开发环境IDE。
2 队列
Laravel可配置多种队列驱动,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具体参见app/config/queue.php)
其中sync为同步,database为使用数据库,后面三种为第三方队列服务
kafka php 安装配置,Kafka的介绍以及基于PHP的kafka的安装和测试
weixin_32987379的博客
03-10
148
本篇文章给大家分享的内容是关于Kafka的介绍以及基于PHP的kafka的安装和测试,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们。简介Kafka 是一种高吞吐量的分布式发布订阅消息系统kafka角色必知producer:生产者。consumer:消费者。topic: 消息以topic为类别记录,Kafka将消息种子(Feed)分类, 每一类的消息称之为一个主题(Topic)。brok...
laravel 消息队列的简单使用和理解
NobleCharacter的博客
06-28
305
laravel 消息队列的简单使用和理解
laravel消息队列如何使用
weixin_42905245的博客
03-03
667
业务场景:项目里边有很多视频资源需要上传到抖音资源库,通过队列一条一条上传。
(1)创建任务【生成任务类】
在你的应用程序中,队列的任务类都默认放在 app/Jobs 目录下。如果这个目录不存在,那当你运行 make:job Artisan 命令时目录就会被自动创建。你可以用以下的 Artisan 命令来生成一个新的队列任务
php artisan make:job DyUploadResource
任务类结构
任务类的结构很简单,一般来说只会包含一个让队列用来调用此任务的 handle 方法。
laravel学习笔记--消息队列
小信的博客
09-01
217
通过队列,你可以将耗时任务 (如发送电子邮件) 的处理往后推延。延迟这些耗时的任务可以极大地提升 web 请求响应速度
队列配置文件存储在 config/queue.php 中。
在这个文件中,你可以找到框架中包含的每个队列驱动程序的连接配置,其中包括数据库,Beanstalkd,Amazon
SQS,Redis,和一个同步驱动程序(供本地使用)。还包括一个用于丢弃排队任务的 null 队列驱动
驱动程序说明和先决条件
数据库
要使用 database 队列驱动程序,需要一个数据库表来保存任务。要生成创
laravel使用消息队列
Virus
08-05
3222
队列
队列用于异步执行消耗时间多的工作,比如发送邮件等操作,好处是可以快速为客户响应结果,具体处理异步后台的操作。
下面的操作使用高效的redis完成处理,所以需要安装相应的扩展包
composer require "predis/predis:~1.0"
处理失败任务
有时你的队列任务会失败。Laravel包含了一个便捷的方式指定任务会被最大尝试的次数。在一个任务到达了它最大尝试次数之后,它会...
laravel 任务队列_Laravel 队列系统实现及使用教程
weixin_39673184的博客
12-19
314
Laravel 队列系统实现及使用教程由 学院君 创建于2年前, 最后更新于 8个月前版本号 #2简介注:Laravel 现在提供了基于 Redis 的,拥有美观的后台和配置系统的 Horizon 队列扩展包,完整信息参考 Horizon文档。Laravel 队列为不同的后台队列服务提供了统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队...
laravel8 实现(数据库)消息队列,简单案例
daxianyu666的博客
12-21
831
1. 新建观察者模型,关联要使用的model模型
php artisan make:observer NoticeObserver -m Models/Notice
2.查看模型中自带的方法
<?php
namespace App\Observers;
use App\Models\Notice;
class NoticeObserver
/**
* Handle the Notice "created" event.
* @para.
laravel8消息队列
mirrorZQ的博客
06-13
151
laravel中消息中间件的使用
Laravel框架安装RabbitMQ消息中间件步骤
weixin_30625691的博客
05-22
179
Laravel5.6 整合 RabbitMQ 消息队列
简介:
Laravel 队列为不同的后台队列服务提供了统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和响应的时间。
队列配置文件存放在config/queue.php。每一种队列驱动的配置都可...
laravel异步队列的使用
cfun_goodmorning的博客
01-08
3733
功能实现描述:在做大富翁网页小游戏时候,用户跳转指定步数需要获取相关奖品,例如优惠券,实物奖,此时需要给用户发送系统消息,如果他注册了网站。此时就用到了异步
1.首先在laravel用异步很方便。
PHP artisan make : job sendprize
创建一个job任务
<?php
namespace App\Jobs;
use Illuminate\Bus\Qu...
Laravel 队列(Queue)的正确使用方法 - 学习/实践
william_n的博客
07-01
5817
最近在用laravel5.5稳定版做一个wifi探针的项目, 其中使用到swoole和laravel队列事件等特性, 其中对队列的使用使用的方法记录一下,方便以后查阅.
工具/原料
laravel5.5 & composer & lnmp环境
php7.1.x+
方法/步骤
首先检查自己的环境是否符合要求[其中我用php7是因为我系统里面有多...
laravel之任务队列
xiaonanhaijing的博客
06-22
271
laravel之
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
chen529834149
CSDN认证博客专家
CSDN认证企业博客
码龄7年
暂无认证
53
原创
14万+
周排名
64万+
总排名
31万+
访问
等级
3074
积分
46
粉丝
34
获赞
25
评论
62
收藏
私信
关注
热门文章
在微信小程序中实现时间日期的选择,并且显示当前选择的时间日期
34783
在微信小程序中实现进度条实例
30114
laravel5.5如何使用使用队列
20436
微信随机红包数详解和算法代码
19863
laravel中路由的详解和实例总结
15223
分类专栏
php
56篇
框架
5篇
json
2篇
thinkphp
2篇
laravel
39篇
jquery
1篇
服务器
9篇
web前端技术
1篇
git使用
3篇
API规范
2篇
语言包
1篇
language
1篇
git
1篇
mysql
1篇
H5
1篇
web
3篇
redis
1篇
小程序
5篇
最新评论
如何查看mysql 优化后的执行语句
lzb19971202:
在吗? 怎么联系
在做微信分享发送红包时思路
o__________wu:
微信红包转发有吗?3246274697私我
微信随机红包数详解和算法代码
raoxiaoya:
使用 bcmath
在微信小程序中实现时间日期的选择,并且显示当前选择的时间日期
ʚ大可儿ྂɞ:
这颜色敢不敢再浅点,担心大家看的太清伤眼嘛!我的天
laravel中路由的详解和实例总结
vvvjack7:
感谢
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
在使用laravel进行开发时能更有好的寻找代码中的bug及sql的优化
laravel图片上传,但是图片较大我们进行裁切处理
laravel中的图片上传封装的工具类
2019年3篇
2018年18篇
2017年56篇
2016年7篇
目录
目录
分类专栏
php
56篇
框架
5篇
json
2篇
thinkphp
2篇
laravel
39篇
jquery
1篇
服务器
9篇
web前端技术
1篇
git使用
3篇
API规范
2篇
语言包
1篇
language
1篇
git
1篇
mysql
1篇
H5
1篇
web
3篇
redis
1篇
小程序
5篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值