elasticsearch配置性能优化

Elasticsearch 性能优化常见配置 Elasticsearch 性能优化常见配置分片异步同步数据索引存储类型 注:基于elasticsearch.yml或api请求的方式进行配置。 分片异步同步数据 不同分片之间的数据同步是一个很大的花费,默认是1s同步,如果我们不要求实时性,我们可以执行如下: $ curl -XPUT http://localhost:9200/my_index -d '{ "settings" : { "index" : { "refresh_interval":"60s" 阅读详情

index 

"index.refresh_interval": "5s",
  "index.merge.scheduler.max_thread_count": "4",  //后台合并segment线程数,一般=核数/2;
  "index.merge.policy.floor_segment": "10mb",   //根据磁盘处理速度灵活设置,太大磁盘占满反而降低查询性能
  "index.max_result_window": "100000000",

mapping

"properties": {
          "name1": {
            "type": "text",
            "norms": false,   //开启norms之后,每篇文档的每个字段需要一个字节存储norms。对于 text 类型的字段而言是默认开启norms的,因此对于不需要评分的 text 类型的字段,可以禁用norms
            "fielddata": true //开启后 可排序,聚合
          },
          "name2": {
            "type": "text",
            "norms": false
          },

        "age": { "type": "integer", "doc_values": false } //禁用后 ,节省磁盘空间,不能sort、aggregate、access the field from script
        }

1.segment合并;索引节点粒度配置index.merge.policy.floor_segment=xx mb;segment默认最小值2M
2.索引时不需要做打分的字段,关闭norms选项,减少倒排索引内存占用量;字段粒度配置omit_norms=true;
3.BoolQuery 优于 TermQuery;目前需求场景全部不需要用到分词,所以尽可能用BoolQuery;
4.避免使用对象嵌套结构组建document,建议优化为一个扁平化结构,查询多个扁平化结构在内存做聚合关联;
5.设定字符串类型为不分词,可以用于字符串排序,但是比起数字排序会消耗cpu,搜索效率更低,慎用;
6.cache设置,就目前数据业务类型,保持默认配置即可,设值fielddata.cache之类的缓存命中率低,反而吃掉了ES集群的一部分内存;

索引性能优化建议:
1.调小索引副本数;针对索引节点粒度:curl -XPUT http://xxxx:9200/m_pd_cu_id_gps_2es_inc_hi_out/_settings -d '{"number_of_replicas":1}'
2.设置延迟提交,延迟提交意味着数据提交到搜索可见,有延迟,需要结合业务配置;针对索引节点粒度:curl -XPUT http://xxxx:9200/m_pd_cu_id_gps_2es_inc_hi_out/_settings -d '{"index.refresh_interval":"10s"}';默认值1s;
3.设置索引缓冲buffer,最大512m,默认值是jvm的10%;ES集群粒度config/elasticsearch.yml :indices.memory.index_buffer_size = 10%

4.适当减少备份数,必要字段只需要提供搜索,不需要返回则将stored设为false;

如果ES提交索引请求达到瓶颈,一般任务队列task-queue为50,可以设置task-queue队列,提升搜索集群索引能力;

5.索引mapping约束尽量使用Dynamic =false 非动态mapping,使用不当很容易插入冗余的的数据导致性能下降

 

ES客户端连接池配置:性能优化的深度剖析 深入探讨ES客户端连接池的配置方法,揭示提升系统吞吐与降低延迟的关键参数调优技巧,结合实际场景分析资源复用与连接管理机制,助力高并发环境下稳定高效运行。 阅读详情

相关推荐

【Elasticsearch】集群配置性能优化

集群响应时间在业务高峰期呈指数级上升 节点频繁OOM导致服务不可用 数据分片分布失衡引发热点问题 网络拥塞造成跨机房同步延迟 这些问题的根源往往在于集群角色规划失当、网络参数配置粗放、监控体系缺失三大症结。 本文将以Elasticsearch 8.8版本为基础,深度解析集群优化的核心技术路径。通过角色分离策略、TCP层深度调优、全链路监控体系三大核心模块,结合Java API实战案例,构建高可用、高性能的ES集群架构。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 4192

Elasticsearch性能优化实战指南

0、背景 在当今世界,各行各业每天都有海量数据产生,为了从这些海量数据中获取想要的分析结果,需要对数据进行提取、转换,存储,维护,管理和分析。 这已然远远超出了普通处理工具、数据库等的实现能力,只有基于的分布式架构和并行处理机制的大数据工具所才能实现这些功能。 Elasticsearch是响应如前所述大多数用例的最热门的开源数据存储引擎之一。 Elasticsearch是一种分布式数据存储和搜索...

铭毅天下Elasticsearch 9109

26、Elasticsearch性能优化与配置指南

本文详细介绍了Elasticsearch的性能优化与配置策略,涵盖字段数据缓存、断路器、存储模块、索引缓冲区、刷新速率、线程池配置、模板管理等多个方面,并提供了综合配置建议、监控机制以及常见问题的解决方案。通过持续的性能测试、调优和监控,可以有效提升Elasticsearch集群的性能和稳定性,满足不同业务场景的需求。

mongodb5scout的博客 198

ES & Lucene 段合并相关参数

ES通过一些参数,来可以优化ES节点的IO压力。

Angus 1622

Es-Head的Linux离线部署实战指南

Es-Head是一个基于Elasticsearch的Web管理工具,用于简化和增强与Elasticsearch集群的交互。它旨在为用户提供一个直观的图形界面,用以进行数据的搜索、索引、监控和集群状态管理等操作。Es-Head支持多集群管理,并提供方便的数据可视化工具,使用户无需编写复杂查询即可进行数据分析。

weixin_42355400的博客 427

Android13 CarPowerManagementService启动流程分析

在CarPowerManagementService中init调用PowerHalService的setListener设置事件侦听器以接收车辆的电源事件。

liuning1985622的博客 956

Elasticsearch调优

es的默认配置是一个非常合理的默认配置,绝大多数情况下是不需要修改的,如果不理解某项配置的含义,没有经过验证就贸然修改默认配置,可能造成严重的后果。比如max_result_window这个设置,默认值是1W,这个设置是分页数据每页最大返回的数据量,冒然修改为较大值会导致OOM。ES没有银弹,不可能通过修改某个配置从而大幅提升ES的性能,通常出厂配置里大部分设置已经是最优配置,只有少数和具体的业务相关的设置,事先无法给出最好的默认配置,这些可能是需要我们手动去设置的。

qq_36864672的博客 1967

信号完整性入门:为什么工程师总爱用dB来描述衰减?

本文深入探讨了信号完整性分析中工程师偏爱使用dB(分贝)单位描述衰减的原因。dB通过对数转换,将大动态范围的乘除关系简化为加减运算,极大地方便了多级系统分析和链路预算计算。文章重点解释了-3dB点的核心意义,即功率衰减一半的临界状态,并阐述了其在评估信道带宽、插入损耗与回波损耗等关键参数中的实际应用,是高效工程思维和沟通的重要工具。

weixin_29263201的博客 384

ElasticSearch的segment段合并原理

注: 部分概念介绍来源于网络 一、简介 Elasticsearch索引(elasticsearch index)由一个或者若干分片(shard)组成,分片(shard)通过副本(replica)来实现高可用。一个分片(share)其实就是一个Lucene索引(lucene index),一个Lucene索引(lucene index)又由一个或者若干段(segment)组成。所以,当我们查询一个Elasticsearch索引时,查询会在所有分片上执行,既而到段(segment),然后合并所有结果。 二、

jsugs的博客 3090

手机拍视频就能训练机器人?SpatialLM开源模型实战指南(附HuggingFace部署教程)

本文详细介绍了如何利用开源模型SpatialLM通过手机视频训练机器人理解3D空间结构。从HuggingFace部署、视频预处理到模型推理和结果可视化,提供完整的实战指南,特别适合具身智能领域的开发者快速上手。

2y3u4i5o6p的博客 787

汇川EASY521 PLC实战指南:从硬件选型到程序架构与故障排查

可编程逻辑控制器(PLC)是工业自动化系统的核心大脑,其工作原理基于循环扫描机制,持续读取输入、执行用户程序并更新输出。这种确定性控制方式,使其在逻辑控制、顺序控制和运动控制中具有不可替代的技术价值,广泛应用于机械设备、生产线和过程控制等场景。对于汇川EASY521这类紧凑型高性能PLC,其核心优势在于集成了运动控制与丰富通讯接口,为中小型设备提供了高性价比的一站式解决方案。在实际应用中,工程师常需处理如“汇川sv660n”伺服驱动器的集成调试,或利用“hslcommunication”等开源库实现C#上位

weixin_42525264的博客 733

ES--优化写入速度的方法--修改配置

本文介绍如何优化ElasticSearch的写入性能。

IT利刃出鞘的博客 2859

不用敲命令!用宝塔面板可视化部署pbootCMS的保姆级教程(2024最新版)

本文提供2024年最新版pbootCMS可视化部署教程,全程使用宝塔面板操作,无需任何命令行知识。从服务器初始化、LNMP环境配置到源码上传、安装向导,手把手指导用户通过图形化界面快速搭建专业网站,适合零基础新手和追求高效建站的用户。

weixin_42509507的博客 490

ES--性能优化相关的配置

本文介绍ElasticSearch中与性能有关的配置。 相关的配置有:内存大小、 批量写的数量、索引数量

IT利刃出鞘的博客 3547

详解YOLOv8网络结构/环境搭建/数据集获取/训练/推理/验证/导出/部署

YOLO(You Only Look Once)系列算法因其高效、准确等特点而备受瞩目。由2023年Ultralytics公司发布了YOLO的最新版本YOLOv8是结合前几代YOLO的基础上的一个融合改进版。本文YOLOv8网络结构/环境搭建/数据集获取/训练/推理/验证/导出/部署,从网络结构的讲解从模型的网络结构讲解到模型的部署都有详细介绍,同时在本专栏中还包括YOLOv8模型系列的改进包括个人提出的创新点,传统卷积、注意力机制、损失函数的修改教程,能够帮助你的论文获得创新点。

Snu77的博客 8万+

基于 Simulink 的固态变压器(SST)多级协同控制实战教程

《固态变压器多级协同控制仿真指南》摘要: 本教程详细讲解了基于Simulink的固态变压器(SST)三级架构建模与控制方法。核心内容包含:1)搭建级联H桥整流(CHB)、双有源桥(DAB)和逆变器(VSI)的三级主电路;2)提出创新的多级协同控制策略,通过功率前馈实现输入输出级动态匹配;3)给出系统级功率平衡、单元级均压控制的具体实现方案。教程特别强调解决实际工程中的关键问题:代数环处理、软启动设计和刚性系统求解器选择,并提供了硬件在环(HIL)仿真建议。附带的MATLAB代码示例可直接用于实现电容电压均衡

xiaoheshang_123的博客 116

Elasticsearch核心配置与性能优化

本文总结了Elasticsearch的核心配置与性能优化策略,涵盖硬件、系统、ES配置和索引设计等关键方面。硬件层建议合理分配内存、使用SSD、优化网络和内核参数;ES配置包括集群设置、节点角色分配和安全配置;索引设计强调分片策略、冷热架构和字段优化。写入性能优化建议批量操作、调整刷新间隔;查询性能优化包括分页改进、缓存利用和查询语句优化。此外,还推荐定期监控、清理旧数据,并针对高级场景提供线程池、GC等调优方案。最后强调压力测试和慢查询日志的重要性,建议根据业务需求选择性调整配置。

HTTP404_CN的博客 1779

ENVI_基于无人机数据的果树提取与相对健康监测

一、数据处理 1.计算植被指数VDVI或GDVI:Band Math / Spectral Indices 2.制作掩膜:ROI——Threshold——Subset 二、单地块果树提取 1.绘制感兴趣区shp 2.确定果树提取参数:Count Crops 3.输出果树矢量文件:Convert Crops To Shapefile 4.果树相对健康程度分析:Calculate Crop Me...

提供技术服务、资源分享 429690771 1398

分布式搜索引擎Elasticsearch性能优化与配置

一、参数优化 文件句柄 Linux中,每个进程默认打开的最大文件句柄数是1000,对于服务器进程来说,显然太小,通过修改/etc/security/limits.conf来增大打开最大句柄数 * - nofile 65535 虚拟内存设置 max_map_count定义了进程能拥有的最多内存区域 sysctl -w vm.max_map_count=262144 ...

weixin_34362875的博客 399

深度学习工具包 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")

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Elasticsearch性能优化与配置

阅读原文 一、参数优化 文件句柄 Linux中,每个进程默认打开的最大文件句柄数是1000,对于服务器进程来说,显然太小,通过修改/etc/security/limits.conf来增大打开最大句柄数 * - nofile 65535 虚拟内存设置 max_map_count定义了进程能拥有的最多内存区域 sysctl -w vm.max_map_count=262144 修改/etc/ela...

为人性僻 语不惊人 788

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Elasticsearch 集群调优建议 yml配置、jvm设定、写入性能优化

生产环境集群搭建建议 1.ES设置尽量简洁elasticsearch.yml中尽量只写必备的参数,其他可以通过api动态设置的参数都通过api来设定动态设定的参数有transient和persistent两种设置,前者在集群重启后会丢失,后者不会,但两种设定都会覆盖elasticsearch.yml中的配置。 PUT /_cluster/settings { "persistent"...

G-vitro的博客 1953

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ElasticSearch 基于配置文件、settings设置、mapping设置的性能优化

ElasticSearch 性能优化 配置文件优化设置 elasticsearch.yml thread_pool: --bulk使用的线程池方式为fix bulk: size: 5 --bulk并发线程总数(与CPU核数相关,最大为CPU核数+1) queue_size: 1000 --线程池队列总数(...

zx711166的博客 1134

Elasticsearch入门:构建强大的搜索引擎

Elasticsearch是基于Lucene构建的开源搜索引擎,它提供了分布式存储、快速搜索和分析能力。分布式:Elasticsearch可以在多个节点上存储和搜索数据,支持水平扩展和负载均衡。实时性:Elasticsearch能够实时更新索引,并支持实时搜索。灵活性:支持多种数据类型和复杂的查询语法。通过本文的介绍,我们了解了Elasticsearch的基本概念、安装与配置、操作实践以及性能优化。Elasticsearch作为一种强大的搜索引擎,可以帮助我们快速检索和管理大规模数据。

2501_92488994的博客 509

ES性能优化:全网最全的一篇

更多的字段对搜索也是有影响的,ES 非常依赖于底层的文件系统缓存,我们肯定想把更多的数据(index segment)缓存起来,这样可以提升性能。的方式来进行处理的。使用 Bulk 的方式有利于提高写入的性能,这个其实也很好理解,如果链接不是长链接,每写入一条数据都进行一次 TCP 链接的过程,那效率是多低啊。对于写入的耗时还是很明显的,从一开始每个批次 3200 条数据的耗时 4 分 39 秒,一路优化到最后的 3 分 53 秒,需要注意的是,部分配置是有特定的使用场景的。

一只小星星 4458

Elasticsearch (ES) 接入完整指南

【代码】Elasticsearch (ES) 接入完整指南。

CrushCoco的博客 735
上一篇: elasticsearch设置字段不索引,或源数据只索引不存储
下一篇: elasticsearch 查询字段高亮
nddjava
博客等级 码龄16年 15粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值