FastDFS HOWTO - 文件及目录结构

与rkipc通信 函数名称功能系统模块初始化系统模块反初始化重启恢复出厂设置导出日志导出配置文件导入配置文件系统升级获取用户数设置用户数获取用户权限设置用户权限获取用户名设置用户名获取密码(已加密)设置密码(已加密)新增用户删除用户。 阅读详情
FastDFS服务器端运行时目录结构如下:
  ${base_path}
    |__data:存放数据文件
    |__logs:存放日志文件

其中,${base_path}由配置文件中的参数“base_path”设定。

一、tracker server

tracker server目录及文件结构:
  ${base_path}
    |__data
    |     |__storage_groups.dat:存储分组信息
    |     |__storage_servers.dat:存储服务器列表
    |__logs
          |__trackerd.log:tracker server日志文件

数据文件storage_groups.dat和storage_servers.dat中的记录之间以换行符(/n)分隔,字段之间以西文逗号(,)分隔。
storage_groups.dat中的字段依次为:
  1. group_name:组名
  2. storage_port:storage server端口号

storage_servers.dat中记录storage server相关信息,字段依次为:
  1. group_name:所属组名
  2. ip_addr:ip地址
  3. status:状态
  4. sync_src_ip_addr:向该storage server同步已有数据文件的源服务器
  5. sync_until_timestamp:同步已有数据文件的截至时间(UNIX时间戳)
  6. stat.total_upload_count:上传文件次数
  7. stat.success_upload_count:成功上传文件次数
  8. stat.total_set_meta_count:更改meta data次数
  9. stat.success_set_meta_count:成功更改meta data次数
  10. stat.total_delete_count:删除文件次数
  11. stat.success_delete_count:成功删除文件次数
  12. stat.total_download_count:下载文件次数
  13. stat.success_download_count:成功下载文件次数
  14. stat.total_get_meta_count:获取meta data次数
  15. stat.success_get_meta_count:成功获取meta data次数
  16. stat.last_source_update:最近一次源头更新时间(更新操作来自客户端)
  17. stat.last_sync_update:最近一次同步更新时间(更新操作来自其他storage server的同步)

二、storage server

storage server目录及文件结构:
  ${base_path}
    |__data
    |     |__.data_init_flag:当前storage server初始化信息
    |     |__storage_stat.dat:当前storage server统计信息
    |     |__sync:存放数据同步相关文件
    |     |     |__binlog.index:当前的binlog(更新操作日志)文件索引号
    |     |     |__binlog.###:存放更新操作记录(日志)
    |     |     |__${ip_addr}_${port}.mark:存放向目标服务器同步的完成情况
    |     |
    |     |__一级目录:256个存放数据文件的目录,目录名为十六进制字符,如:00, 1F
    |           |__二级目录:256个存放数据文件的目录,目录名为十六进制字符,如:0A, CF
    |__logs
          |__storaged.log:storage server日志文件

.data_init_flag文件格式为ini配置文件方式,各个参数如下:
  # storage_join_time:本storage server创建时间
  # sync_old_done:本storage server是否已完成同步的标志(源服务器向本服务器同步已有数据)
  # sync_src_server:向本服务器同步已有数据的源服务器IP地址,没有则为空
  # sync_until_timestamp:同步已有数据文件截至时间(UNIX时间戳)

storage_stat.dat文件格式为ini配置文件方式,各个参数如下:
  # total_upload_count:上传文件次数
  # success_upload_count:成功上传文件次数
  # total_set_meta_count:更改meta data次数
  # success_set_meta_count:成功更改meta data次数
  # total_delete_count:删除文件次数
  # success_delete_count:成功删除文件次数
  # total_download_count:下载文件次数
  # success_download_count:成功下载文件次数
  # total_get_meta_count:获取meta data次数
  # success_get_meta_count:成功获取meta data次数
  # last_source_update:最近一次源头更新时间(更新操作来自客户端)
  # last_sync_update:最近一次同步更新时间(更新操作来自其他storage server)

binlog.index中只有一个数据项:当前binlog的文件索引号

binlog.###,###为索引号对应的3位十进制字符,不足三位,前面补0。索引号基于0,最大为999。一个binlog文件最大为1GB。记录之间以换行符(/n)分隔,字段之间以西文空格分隔。字段依次为:
  1. timestamp:更新发生时间(Unix时间戳)
  2. op_type:操作类型,一个字符
  3. filename:操作(更新)的文件名,包括相对路径,如:5A/3D/FE_93_SJZ7pAAAO_BXYD.S

${ip_addr}_${port}.mark:ip_addr为同步的目标服务器IP地址,port为本组storage server端口。例如:10.0.0.1_23000.mark。文件格式为ini配置文件方式,各个参数如下:
  # binlog_index:已处理(同步)到的binlog索引号
  # binlog_offset:已处理(同步)到的binlog文件偏移量(字节数)
  # need_sync_old:同步已有数据文件标记,0表示没有数据文件需要同步
  # sync_old_done:同步已有数据文件是否完成标记,0表示未完成,1表示已完成
  # until_timestamp:同步已有数据截至时间点(UNIX时间戳)
  # scan_row_count:已扫描的binlog记录数
  # sync_row_count:已同步的binlog记录数

数据文件名由系统自动生成,包括三部分:当前时间(Unix时间戳)、文件大小(字节数)和随机数。文件名长度为16字节。文件按照PJW Hash算法hash到65536(256*256)个目录中分散存储
UNet + Shuffle Attention:一种轻量高效的医学图像分割注意力机制 本文提出了一种轻量高效的医学图像分割方法,将Shuffle Attention模块嵌入UNet的上采样路径中。Shuffle Attention通过通道分组注意力机制增强关键特征,同时保持计算轻量化。该方法在上采样后应用注意力模块,有效融合高层语义与低层细节,计算开销小且易于部署。实验表明,该模型在保持UNet原有优势的基础上,通过注意力机制提升了特征聚焦能力,适用于多种图像分割任务。未来可进一步结合空间注意力或Transformer模块以增强模型性能。 阅读详情

相关推荐

IVP 2021 UNETR: Transformers for 3D Medical Image Segmentation

动机 具有跟踪和扩展路径的全卷积神经网络(FCNNs)(如编码器和解码器),近年来在各种医学图像分割应用中显示出了突出的地位。在这些体系结构中,编码器通过学习全局上下文表示来扮演一个不可或缺的角色,该全局上下文表示将进一步用于解码器的语义输出预测。 卷积层作为FCNN的主要构造块,其局部性限制了此类网络学习长时空间依赖的能力。 在NLP领域,基于transformer的模型已经在各种任务中实现了最先进的基准。transformer中的自我注意机制使他们能够动态地突出词序列的重要特征并学习其长时依赖关系。这

smile909的博客 1979

Java分布式篇5——FastDFS

Java分布式篇5——FastDFS 分布式文件系统 1、主流的分布式文件系统 1.1、 HDFS (Hadoop Distributed File System)Hadoop 分布式文件系统 高容错的系统,适合部署到廉价的机器上 能提供高吞吐量的数据访问,非常适合大规模数据应用 HDFS采用主从结构,一个HDFS是由一个name节点和N个data节点组成 name节点储存元数据,一个文件分割成N份存储在不同的data节点上 生态好 1.2、GFS Google File System 可扩展的分布式

gyfghh的博客 972

从Microchip SDK到STM32实战:手把手教你移植LAN9252 EtherCAT从站驱动(含EEPROM配置避坑)

本文详细介绍了如何将Microchip SDK中的LAN9252 EtherCAT从站驱动移植到STM32F407平台,包括FSMC接口配置、中断处理适配和EEPROM配置等关键步骤。通过实战指南和避坑技巧,帮助开发者快速实现高性能EtherCAT从站设备的开发,适用于工业自动化领域。

weixin_29197835的博客 446

fastdfs mysql_获取fastdfs所有文件

工作中,mysql中存储的图片链接信息和FastDFS实际存储的图片数量不一致,此时应该与mysql中有存储记录的图片保持一致,我们要在FastDFS服务器中删除哪些无用的图片。于是乎自己写了一个脚本。1. 读取mysql中的所有FastDFS存储图片信息---->存储到redis,保存为set2. 读取FastDFS中的图片信息---->存储到redis,保存为set3. 两个set...

weixin_35554273的博客 641

从Reset到Read:深入解析Rolling Shutter曝光流水线

本文深入解析Rolling Shutter(卷帘曝光)的工作原理,重点探讨Reset和Read信号在图像传感器中的关键作用。通过Reset-Read流水线机制,详细解释了曝光控制、时序调优及运动伪影补偿等核心技术,帮助读者理解卷帘曝光在高速摄影和动态场景中的应用。

weixin_42531925的博客 254

从MFCC到GMM:手把手教你用Python实现说话人识别(附完整代码)

本文详细介绍了如何使用Python实现说话人识别系统,从MFCC特征提取到GMM模型训练,涵盖完整的技术流程和代码示例。通过梅尔频率倒谱系数(MFCC)和高斯混合模型(GMM)的结合,构建高效的说话人识别系统,适用于身份认证和智能交互场景。文章还探讨了从传统方法到深度学习的进阶话题,如i-vector和x-vector技术。

o1p2q3r的博客 200

文件管理系统FastDFS详解

什么是FastDFS 很多以文件为载体的在线服务,如相册网站、视频网站等,都需要对文件进行管理,包括文件的存储、同步、访问(文件上传、文件下载)等,同时肯定会伴随着大容量存储和负载均衡的问题。 在日常的一些项目中,比如做用户的KYC认证等,也需要存储文件、图片、视频等。此时可以选择使用OSS云服务,也可以自己构建相对专业的文件管理系统。 FastDFS是一个开源的轻量级分布式文件系统,用于解决大数据量存储和负载均衡等问题,并需要通过专有API进行访问。满足大容量文件存储问题,并保证高性能和高扩展性。它能够很

程序新视界 2631

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1308

FastDFS

实现文件上传功能 一个轻量级的分布式文件系统,对文件进行管理,文件存储,访问,同步。有冗余备份,负载均衡,线性扩容机制。包括Tracker Server和Storage Server。利用操作系统的的文件系统来管理文件。 文件上传流程: storage定时向tracker发送状态消息 客户向tracker发送请求 tracker查看可用storage tracker返回storage的ip和端口 客户向storage上传文件 storage生成fileid storage将文件写入磁盘

qq_42605678的博客 516

详细介绍pytorch重要的API

Tensor 是 PyTorch 中最基本的数据结构,提供了多种创建和操作张量的函数。Autograd 提供了自动求导功能,可以跟踪 Tensor 上的操作并计算梯度。损失函数用于衡量模型预测值与真实值之间的差异,提供了多种损失函数。是构建神经网络的基础类,提供了定义网络层和前向传播的方法。提供了 GPU 计算的支持,包括设备管理、内存管理等。提供了一些常用的函数式操作,如激活函数、损失函数等。提供了常用的数据集、模型架构和图像转换工具。提供了数据加载和预处理的工具,包括。

hello! 1223

Dify 本地部署教程

到这里,Dify 就安装完成了,更多操作设置可以参考官方文档,Dify 和 FastGPT 基本上差不多,也可以同时安装一下 FastGPT 进行体验~Docker Compose 部署 | Dify。

Muti-Agent 6656

FastDFS HOWTO -- 目录结构及文件格式

本文较详细地介绍了FastDFS服务器端的目录结构和文件格式,包括tracker server和storage server两部分。有兴趣对FastDFS进行深入了解和研究的朋友,可以阅读本篇文章。 FastDFS服务器端运行时目录结构如下: ${base_path} |__data:存放数据文件 |__logs:存放日志文件 其中,${base_path}...

dianyi2646的博客 302

【示波器专题】无源探头的常用附件

使用探头进行测试,我们不仅要知道探头的原理,还需要了解探头的常用附件及其使用方式,这样才能在尽可能在测试中提高效率且减少出错的概率

一点硬件 692

服务器里storage文件路径,[FastDFS] FastDFS HOWTO - 文件及目录结构

FastDFS服务器端运行时目录结构如下:${base_path}|__data:存放数据文件|__logs:存放日志文件其中,${base_path}由配置文件中的参数“base_path”设定。一、tracker servertracker server目录及文件结构:${base_path}|__data| |__storage_groups.dat:存储分组信息| |__s...

weixin_42443651的博客 1128

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

当下流行的分布式文件系统大阅兵

本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系统包括:Lustre、Hadoop、MogileFS、FreeNAS、FastDFS、NFS、OpenAFS、MooseFS、pNFS、以及GoogleFS。  Lustre(www.lustre.org)  ...   本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系

Golden_lion的博客 8269

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

分布式文件系统介绍

weixin_45040801的博客 234

当下流行的分布式文件系统

 本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系统包括:Lustre、Hadoop、MogileFS、FreeNAS、FastDFS、NFS、OpenAFS、MooseFS、pNFS、以及GoogleFS。   Lustre( www.lustre.org )   lustre是一个大规模的、安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护...

muyoufang001 283

当今比较流行的分布式文件系统

      因为最近正在“研究”分布式文件系统,所以搜集了这方面的许多资料,不知是哪位比较有名气的人说过:当今社会,对于程序员或者搞IT的人来说,一定要看看分布式方面的东西(不是原话,但是大概就这个意思)。看了一段时间了,感触颇深,感觉它一定是未来发展的趋势。下面这篇就是我搜到的一篇博客,总体上介绍了一些比较流行的分布式文件系统。特此标明出处:http://hi.baidu.com/jrckkyy/blog/item/5476b87b31a785fb0bd187c7.html这位同志的博客中有许多关于分布式

Mr.Right 5892

当下流行的分布式文件系统简单介绍

本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系统包括:Lustre、Hadoop、MogileFS、FreeNAS、FastDFS、NFS、OpenAFS、MooseFS、pNFS、以及GoogleFS。  Lustre(www.lustre.org)

张波的技术积累 4279

流行的分布式文件系统

<br /><br />因为最近正在“研究”分布式文件系统,所以搜集了这方面的许多资料,不知是哪位比较有名气的人说过:当今社会,对于程序员或者搞IT的人来说,一定要看看分布式方面的东西(不是原话,但是大概就这个意思)。看了一段时间了,感触颇深,感觉它一定是未来发展的趋势。下面这篇就是我搜到的一篇博客,总体上介绍了一些比较流行的分布式文件系统。<br />特此标明出处:http://hi.baidu.com/jrckkyy/blog/item/5476b87b31a785fb0bd187c7.html<br

4826
上一篇: FastDFS HOWTO - 同步机制
下一篇: Nginx Location 语法,与简单配置
YL_WH
博客等级 码龄18年 42粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值