从海量key中查询出某一固定前缀的key

redis从海量的key里面查询出某一固定前缀的key 生成海量数据 1.Linux Bash下面执行(一定要是Bash) for((i=1;i<=20000000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done; 生成2千万条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中 2.用vim去掉行尾... 阅读详情

一 概述

在此我想提一个问题:从海量的key中查询出以某一固定前缀的key中的海量数据指的具体范围是是多小,即具体的数据规模或者是数据的边界是什么。

二 比较容易得到的方案

通过KEYS pattern来查找所有符合给定模式pattern的key,这个我们是可以得到想要的结果的,而且KEYS指令会一次性返回所有匹配的key,使用KEYS命令查询大量的key会对正在运行的业务造成影响,因为一次性返回数量过大的时候会使得服务变得卡顿。

三 利用SCAN增量式迭代命令解决问题

SCAN cursor [MATCH pttern] [Count count] //SCAN是无阻塞模式的提取指令列表,每次只会返回少量元素

命令中的cursor指的是游标,MATCH pattern值得是指令,count参数指定返回的数据个数,但是count并无法严格控制数量。

scan 0 match k1* count 10 //该命令指的是大概率的返回数量为count的且以k1开头的数据

SCAN是一个基于游标的迭代器,每次都需要基于上一次的游标延续之前的迭代过程。此过程中,要求每次查询都会使用上一次返回的游标。

此命令只有当以0作为游标的开始依次进行新的迭代,直至命令返回的游标为0为止,即当返回的游标为0的时候表示整个迭代过程都完成了。

注意:SCAN增量式迭代命令,并不能保证每次执行都返回某个给定数量的元素,可能为0个,当时命令返回的游标不是零,则应用程序就会继续使用上一个游标进行迭代,直至游标值为0,对于较大的数据集每次可能返回数十个数据,对于较小的数据集可能会直接返回所有数据集。

SCAN命令查出的所有命令可能对存在重复的值,所以我们可以利用hashset来实现数据去重。

JAVA面试准备之Redis 如何从海量Key里查询出某一固定前缀的Key 如何从海量Key里查询出某一固定前缀的Key? 1.使用keys执行(对线上业务存在很大的影响) 2.使用scan指令:无阻塞的提取出指定模式的key列表,scan每次执行只会返回少量元素,所以可以用于生产环境,而不会像keys命令带来的可能堵塞服务器的问题。 使用keys对线上的业务的影响 KES pattern:查找所有符合给定模式pattern的key KEYS指令一次性... 阅读详情

相关推荐

Redis --- 从海量Key里面查询出某一固定前缀

留言细节 摸清数据规模,即问清楚边界 使用 keys 对线上的业务的影响 KEYS pattern : 查询所有符号给定模式pattern 的key dbsize 查看数据量 批量生成Redis的测试数据 1、linux Bash 下面执行 for((i=1;i<=20000000;i++));do echo "set k$i v$i " >> /tmp/redis...

xinbumi的博客 5896

Redis删除、获取特定前缀key的优雅实现

一、数据量不大情况下,用keys Redis的单线程服务模式,命令keys会阻塞正常的业务请求。 如果你一次keys匹配的数量过多或者在del的时候遇到大key,都会直接导致业务的不可用,甚至造成redis宕机的风险。 删除 //删除所有以U:INFO:开头的key Set<String> keys1 = redisTemplate.keys("U:INFO:" + "*"); if (StringUtil.isNotNull(keys)) {

jike11231的博客 6723

Redis如何优雅的删除特定前缀key

前言 还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹! Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案 redis-cli --raw keys "ops-coffee-*" | xargs redis-cli del 直接在linux下通过redis的keys命令匹配到所有的key,然后调用系统命令xargs来删除,看似非常完美,实则风险巨大 因为Redis的单线程服务模式,命令keys会阻塞正常的业务请求,如果你一次keys匹配的数量过多或者在del的时候遇到大key,都会直接导致业务的不可

redis如何从海量key里查询出某一个固定前缀的key

redis

weixin_28952343的博客 4681

从零开始:如何用Python建立你的第一个人工智能模型

在这篇文章中,我们将介绍如何从零开始使用Python建立你的第一个人工智能模型。无论你是刚接触编程的新手,还是有经验的开发者想进一步探索人工智能领域,这篇文章都将为你提供清晰、详细的指南。我们将一步步探索数据预处理、模型建立、训练和测试的过程,以及如何解读模型的结果。

Allen1862105的博客 4万+

蓝桥杯算法:打印图形——六芒星

【输入格式】 输入一行包含一个整数 n。 【输出格式】 输出一个六芒星,表示满足题意的图形。 【样例输入】 3 4 【样例输出】 【评测用例规模与约定】 对于所有评测用例,1 ≤ n ≤ 20。 总结: 第一次做图形题,做了蛮久,图形题有很多的方式去完成,它考验的是你能不能找到更简单的那一种方式. 我初看到这个图形,第一种想法是把这个六芒星当做六个小三角形来做,然后以某种规则排列一下,就能做出来,但是尝试了一下感觉太麻烦了。 然后我的第二种想法是,这个图形是对称图形,怎么能写出一半吗? 这样另一半想办

KeepCodeing 3840

从海量数据中查询某一固定的前缀的key

keys keys key* Redis Keys 命令用于查找所有符合给定模式 pattern 的 key 。,当keys数据比较大的时候对服务器是一个隐患:简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。 scan...

qq_32748869的博客 451

AutoSAR RTE调度机制揭秘:从定时器事件到Runnable执行的完整流程

本文深入解析了AutoSAR RTE(运行时环境)的核心调度机制,详细阐述了从定时器事件触发到Runnable(可运行实体)执行的完整流程。通过剖析Rte_Start()函数、OS任务与警报的交互,以及事件驱动循环,揭示了RTE如何作为幕后指挥家,高效、可靠地协调软件组件间的周期性任务执行,是打通AutoSAR应用开发的关键。

weixin_29169899的博客 228

redis-查找特定前缀key

redis一开始提供了一个keys命令用来查看相应规则的key,可以pattern模式查找 keys命令 keys * 查看所有的key, 这个命令会阻塞redis执行其他的命令,不建议在生产使用,因为它采用的是遍历的形式,并且是redis是单线程的,顺序执行指令,当查找的key的量特别多的时候,会一直在查找,其他的命令就无法执行,导致阻塞或者超时报错等。 如果是平时在学习的时候,可以使用下,方便debug: 查找cjh开头的key, keys cjh* 查找包含有cjh的key, keys *.

chenjianhuideyueding的博客 2万+

Camera ITS测试

一、手机端设置: 将 CtsVerifier.apk 安装到设备上, 连接上linux主机。 二、主机端设置: 基础:CTS测试运行环境 然后,主机安装python2.7,及numpy/scipy/matplotlib/opencv 栈和 python 成像库。按照下面的命令依次安装: sudo apt­-get install python-­numpy sudo apt-­g...

wangubuntu的专栏 7787

linux系统下XDMA驱动的安装与测试问题总结

先看两个常见的问题。一个是驱动安装问题,一个是驱动测试错误;error 512 能识别PCIE的设备,但是The kernel modle installed correctly, but no devices were recognized.

whm128的博客 3808

Redis从海量key中查询出某一固定前缀的key

3、从海量key中查询出某一固定前缀的key 常问问题: 假如redis里有一亿个key,其中有10万个key是以某个固定的已知的前缀开头的,如何将他们全部找出来? 留意细节: 摸清数据规模(数据量是多大?根据实际场景去作答),问清楚边界 回答: 1.用keys指令找出指定模式的key列表(keys将一次性返回所有的key,key的数量过大会导致客户端卡住,也就是说当redis中的key数量非常多时,对于内存的消耗和redis服务器是隐患) 缺点:一次性需要返回所有的key,如果可以的数量过大,会使服务器卡

qq_30404223的博客 3872

迫零均衡前与迫零均衡后眼图对比附Matlab代码

迫零均衡(Decision Feedback Equalization,DFE)是一种常用的数字通信技术,用于抑制信号传输中的多径干扰。迫零均衡(Decision Feedback Equalization,DFE)是一种常用的数字通信技术,用于抑制信号传输中的多径干扰。眼图是一种常用的信号质量评估工具,通过绘制接收到的信号在时域上的波形,可以直观地观察到噪声、失真和干扰等问题。眼图是一种常用的信号质量评估工具,通过绘制接收到的信号在时域上的波形,可以直观地观察到噪声、失真和干扰等问题。

ByteSparkX的博客 459

Redis从海量key里查询出某一固定前缀的key

引入问题: 常规的查找key,使用的是KEYS pattern 查找所有符合给定模式pattern的key 但使用keys命令在海量数据下是有问题的 keys指令一次性返回所有匹配的key 键的数量过大会造成服务的卡顿, 需要等很久才会返回结果. 从海量key里查询出某一固定前缀的key 主要用到了SCAN 命令 ,该命令的格式如下: SCAN cursor [MATCH pattern] [...

Java持续实践 6441

物联网Node-Red开发教程-第6章 HTTP与Web服务

本章摘要(147字): 本章系统讲解了Node-RED中的HTTP节点应用,重点包括: 三大核心HTTP节点功能:http in(接收请求)、http response(返回响应)、http request(调用外部API) 详细演示了REST API开发流程,包括路径参数(req.params)处理和响应构造 提供了创建Hello World API、传感器数据接口等实用示例 涵盖HTTP方法特性、状态码设置及响应头配置等关键知识点 通过流程图和JSON配置直观展示节点连接方式,帮助快速掌握Web服务开发

shihui2003的博客 264

嵌入式软件工程师面试题目整理(一)

文章目录嵌入式软件工程师面试题目整理(一)Arm有多少32位寄存器?Arm2440和6410有什么区别CPU,MPU,MCU,SOC,SOPC联系与差别上拉&下拉&高阻态串口协议讲一讲RS232和RS485通讯接口有什么区别IIC时序图画一下,IIC有哪些状态,给一个字节,将它发送出去。IIC有什么注意事项?有没有用I/O模拟IIC,如果有需要注意什么?为什么2440的内存起始地址是3后面7个0呢?为什么6410的内存起始地址是5后面7个0呢?内存管理有什么看法?(MMU)锁有哪些?有什么注

嵌入式与Linux那些事的博客 7883

从海量Key里查询出某一固定前缀的Key

从海量Key里查询出某一固定前缀的Key 留意细节 摸清数据规模,即问清楚边界 使用keys对线上的业务的影响 KEYS pattern:查找所有符合给定模式pattern的key 植入了200000010个key,如果我们一次性返回前面是k1的key速度非常慢。 KEYS指令一次性返回所有匹配的key 键的数量过大会使服务卡顿 SCAN cursor [MATCH pattern] [COUNT count] 基于游标的迭代器,需要基于上一次的游标延续之前的迭代的过程 以0作为游标开始一次新

罗彬桦的博客 392

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Redis中如何从海量Key里查询出某一固定前缀的Key?

批量生成redis测试数据 1.Linux Bash下面执行 for((i=1;i<=20000000;i++)); do echo "set k$i v$i" >>/tmp/redisTest 生成2千万条redis批量设置kv的语句(key=kn, value=vn)写入到/tmp目录下的redisT& 2.用vim去掉行尾的M符号,使用方式如下:: vim /tmp/redisTest.txt :set fileformat=dos#设置文件的格式,通过这句话去掉每行结尾的^

Be_insighted的博客 812

温度PID控制PLC程序

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

如何从海量Key里查询出某一固定前缀?

1.直接查询 一次性返回所有数据,如果数据比较多的话,会卡顿

pc的博客 186

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

Redis-6.从海量Key里查询出某一固定前缀的Key

keys keys pattern:查找所有符合给定模式pattern的key 缺点: keys 指令一次性返回所有匹配的key 匹配到的键的数量过大时,会使服务卡顿 生产环境,一般情况下是杜绝使用keys指令的 scan SCAN cursor [MATCH pattern] [COUNT count] 特点: 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程 以0作为游标表示开始一次新的迭代,直到命令返回游标0完成整次遍历 不保证每次执行都返回某个给定数量的元素,支持模糊查询 一次

qq_40911404的博客 382

redis应用从海量key里查询出某一固定前缀的key

留意细节 数据规模,问清楚边界 如果数据太多 keys 指定一次性返回所有匹配的key 键的数量过大会使服务卡顿 则使用 scan (游标) match 匹配值 count (建议数量) ...

qq_45053117的博客 735

redis-从海量Key里面查询出某一固定前缀key的值存储到文件,文件大于500MB就新建文件存储

redisdetail.txt: IP:端口 dataStatusRedis.sh: #! /bin/sh rb_HOME=/apps/shadowDataObtain fname=redisdetail.txt #key的前缀 pattern="data-" for line in $(cat ${rb_HOME}/${fname}) do port=${line#*:} ip=${line%:*} ruby ${rb_HOME}/RedisStatusExporter...

yanhhuan的博客 276

redis如何从海量key里查询某一固定前缀的key

(1) KEYS pattern:查找所有符合给定模式pattern的key KEYS指令一次性返回所有匹配的key 键的数量过大会使服务卡顿 (2) SCAN cursor [MATCH pattern] [COUNT count] 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程 以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历 不保证每次执行都返回某一个给定数量的元素,支持模糊查询 一次返回的数量不可控,只能是大概率符合count参数 不会卡顿,但需要对结果去重 ...

wjg_selected的博客 1290

在Redis里,如何从海量key中查询出某一个固定前缀所有的key?

在Redis里,如何从海量key中查询出某一个固定前缀所有的key? 在Redis里,如何从海量key中查询出某一个固定前缀所有的key? 答:如果该机器是生产环境正在对外提供服务,不建议使用keys * pattern的方法进行查询,可能会使服务器卡顿,而出现事故。   一般生产服务器建议使用Scan命令,例如:  SCAN 0 MATCH aaa* COUNT...

AcceptedLin的博客 5028

数据缓存-redis从海量数据里查询某一固定前缀的key

从海量数据里查询某一固定前缀的key 如果用key 服务会出现卡顿 长时间查询 scan 取出少量元素 SCAN cursor [MATCH pattern][COUNT count] 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程 以0作为游标开始一次新的迭代,知道命令返回游标0完成一次遍历 不保证每次执行都返回某个给定数量的元素,支持模糊查询 一次返回的数量不可控,只能...

xiaoxin0630的博客 6233
上一篇: Redis支持的基本数据结构以及常用操作
下一篇: 通过Redis实现分布式锁
至学者
博客等级 码龄9年 180粉丝 773原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值