Redis适合把它当作一个数据库来使用么?

数据库和数据仓库的区别 数据库是一种用于存储、管理和处理结构化数据的软件系统。它的设计目的是支持大规模的数据持久化和高效的数据检索、插入、更新和删除操作。数据库中的数据通常以表格形式存储,可以通过SQL等查询语言进行访问和操作。数据库通常用于在线事务处理(OLTP)场景,例如管理用户账户、订单、库存等业务数据。 阅读详情

我们都知道,redis,基于内存,性能好,有丰富的数据结构。

但是,它真的适合作为一个数据库来使用么?

把它当作一个缓存来用,这可能是我们最常的场景之一。

但要说因为它支持持久化,就可以用来当作数据库使用,这个,不应该脱离业务场景的去谈它究竟能不能用来当作数据库使用。

之所以提出这个问题,是因为有位大佬今天给我们做分享,提出了它可以作为数据库的几点原因:

  1. 高性能:Redis是一个基于内存的数据结构服务器,因此它的读写性能非常高。这使得Redis非常适合处理大量的读写操作,尤其是在需要快速响应的场景中。
  2. 丰富的数据结构:Redis提供了多种数据结构,这使得它可以灵活地满足不同的业务需求。例如,你可以使用哈希来存储用户信息,使用列表来实现队列或栈,或者使用有序集合来实现排名功能。
  3. 持久化:Redis支持将数据持久化到磁盘上,以确保在服务器重启或故障时不会丢失数据。Redis提供了两种持久化方式:RDB(快照)和AOF(追加文件)。你可以根据需要选择适合的持久化策略。
  4. 事务和Lua脚本:Redis支持简单的事务操作,并且可以使用Lua脚本执行复杂的操作。这使得Redis在处理一些需要原子性操作的场景时非常有用。
  5. 可扩展性:Redis支持主从复制和集群功能,这使得它可以轻松地扩展以处理更大的数据量和更高的并发请求。

然而,尽管Redis具有许多优点,但它并不适合所有场景。以下是一些可能不适合使用Redis作为数据库的情况:

  1. 复杂查询:Redis不支持像SQL那样的复杂查询语言,因此如果你需要进行复杂的查询操作,可能需要考虑使用关系型数据库。
  2. 数据一致性:Redis是一个最终一致性的系统,这意味着在某些情况下,你可能会遇到数据不一致的问题。如果你对数据一致性有严格要求,可能需要考虑使用其他数据库系统。
  3. 事务处理:虽然Redis支持简单的事务操作,但它的事务处理能力相对较弱。如果你需要处理大量的事务操作,可能需要考虑使用其他支持更强事务处理能力的数据库系统。

总之,Redis是否适合作为数据库使用取决于你的具体需求。在某些场景下,Redis可能是一个非常好的选择;但在其他场景下,可能需要考虑其他数据库系统。

 

既然工作中确确实实的又一次提到了要用redis替换现有数据库的方案,那,做为开发人员,有必要先对redis做一个比较完整的学习和梳理,接下来准备整理整理,写一些关于redis相关的文章。

写,不是目的,正所谓,好记性不如烂笔头,多看、多学、多总结、多用、练、多踩坑~~~

3D Slicer:从入门到精通(二)——入门指南 本篇文章包含开始使用3D Slicer所需的信息,包括如何安装和快速开始使用基本功能,以及在哪里找到更多信息。 阅读详情

相关推荐

Hi3516CV610硬件设计避坑指南:从电源模块到DDR布线实战解析

本文深入解析了Hi3516CV610硬件设计中的关键难点与实战技巧。重点剖析了电源架构的选型陷阱与PCB布局要点,详细阐述了DDR3/L高速布线的等长匹配、信号完整性及端接策略,并提供了MIPI接口与时钟电路的隔离设计指南。旨在帮助工程师规避常见设计错误,提升系统稳定性与可靠性。

ooo22的博客 255

Redis可以用作数据库吗?它的适用场景是什么?

需要注意的是,Redis虽然性能高效,但它是基于内存的数据库,数据存储在内存中,因此对于大量数据存储方面可能不太适用。队列和消息代理:Redis的发布/订阅(Pub/Sub)功能和列表类型(List)可以用作轻量级的消息代理和任务队列。地理位置和地理搜索:Redis的地理位置命令可以存储和查询地理位置坐标,并进行附近的位置搜索、距离计算等功能。会话存储:在分布式环境中,需要将会话数据存储在共享存储中以保持用户状态的一致性。用户会话和令牌管理:Redis可以存储和管理用户会话、令牌和身份验证相关的数据。

wzxue1984的博客 766

python设计俄罗斯方块(附源码)

【代码】python设计俄罗斯方块(附源码)

牧魂的博客 2059

Redis能像MySQL一样当数据库使用吗

Redis是一个键值存储系统,它支持多种数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。MySQL是一个关系型数据库,它使用表(tables)来存储数据,表中的数据通过行(rows)和列(columns)进行组织,并支持复杂的SQL查询。然而,将Redis直接类比为MySQL这样的关系型数据库(RDBMS)并不完全准确,因为它们在数据模型、用途、性能和适用场景上存在一些重要的区别。

怀揣梦想,一颗执着于技术的心从未磨灭,内心住着一颗顽强的小强时刻提醒自己层层突破自我,同时也成就他人 591

软考29-上午题-【数据结构】-排序

数据结构7种排序

qq_31532983的博客 1579

Adversarial Texture for Fooling Person Detectors in the Physical World

本文提出了对抗纹理的想法(AdvTexture),与基本补丁攻击不同对抗纹理可以生成任意大小,可以覆盖任意大小的不了,并且纹理的任何局部都有对抗性的效果。当衣服被对抗纹理覆盖是,摄像头捕捉到的每一个局部区域都可以攻击探测器,这成功解决了片段缺失的问题。提出了一种两阶段生成方法:基于环形收割的可扩展生成攻击(TC-EGA)来制作广告纹理。第一阶段,训练一个全卷积网络FCN作为生成器,通过采样随机潜变量作为输入来产生纹理(不同于GAN中传统的生成器架构,每一层都使用卷积运算)......

weixin_49171105的博客 1067

中间件系列【二点一】 redis究竟适不适合做数据库?

redis

qq_35789269的博客 1890

微信支付开发之平台给用户转账到零钱的功能

请求消息中应包含商家批次单号、转账名称、appid、转账总金额、转账总笔数、转账openid、收款用户姓名等信息。批次已受理成功,若发起批量转账的30分钟后,转账批次单仍处于该状态,可能原因是商户账户余额不足等。【转账场景ID】 该批次转账使用的转账场景,如不填写则使用商家的默认场景,如无默认场景可为空,可前往“商家转账到零钱-前往功能”中申请。【转账总笔数】 一个转账批次单最多发起一千笔转账。【商家批次单号】 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一。

程序员weixin_sodomany的博客 3450

数据库操作——redis

redis的是使用

叶子的博客 2914

新系统申请软件著作权详细操作说明

今年八月底版权中心系统升级,新系统相对好用一些,至少不用再拿IE访问了,但是多了一项实名认证。下面介绍新系统的操作流程。 目录注册、登录和实名认证注册登录实名认证软件登记申请申请表填写鉴别材料身份证明文件权利归属证明文件其他材料提交材料变更登记 注册、登录和实名认证 首先访问版权中心系统:https://register.ccopyright.com.cn/login.html,如果老系统有账号直接登录即可,没有的话需要注册。 注册 点击注册按钮进入注册。 根据实际情况选择个人或单位,每个个人或单位只能在

Programming Talk 1万+

基于形状的模板匹配之候选点选择

基于形状的匹配匹配,顶层金字塔提取候选点

manuoo的专栏 2767

Redis锁与DB锁

场景特征推荐使用原因高并发、短事务、非核心数据Redis 锁性能高,能支撑高并发,少量异常可通过业务兜底解决低并发、长事务、核心数据DB 锁(SELECT FOR UPDATE)事务 ACID 保障数据安全,无锁过期风险,满足合规审计要求幂等性控制(如重复支付)DB 锁(唯一索引)无需锁等待,性能高于悲观锁,能有效防止重复写入分布式系统、跨服务并发Redis 锁天然支持分布式,跨服务 / 跨机器的锁控制更简单单服务、本地并发本地锁(synchronized)

AlbenXie的博客 836

作为一名爬虫人如何实现千万级数据爬取?

爬虫门槛不高,高就高在往后余生的每一次实操都随时会让你崩溃!Bro

吴秋霖的博客 1万+

怎们知道redis使用的数据库索引database是多少

如何确认Redis使用的数据库索引(database) 作为一名刚入行的开发者,了解如何与Redis进行交互以及如何察觉数据库的状态是至关重要的。本篇文章将带领你一步步了解如何确定Redis使用的数据库索引。我们将展示整个流程,提供所需的代码,并对每一步进行详细说明。 流程概述 下面是确认Redis数据库索引的整体步骤: ...

weixin_36874817的博客 514

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

redis 清空db下_Redis为什么要分16个库

原文链接 :https://www.jianshu.com/p/acfbcc74b701在实际的项目中,Redis常被用作缓存、分布式锁、消息队列等的解决方案。但是在搭建好Redis服务后,Redis默认创建了16个数据库(db0~db15),而在Redis集群下只有一个db0数据库。如下图所示。redis单机  一、16个数据库的由来Redis是一个类似于字典结构的存储服务器,一个Re...

weixin_42417004的博客 445

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

redis的基本使用

一、 Redis简介一、 Redis简介NoSQL数据库Redis在windows下的安装下载的安装包有两种形式,一种是一键安装的msi文件,还有一种是解压缩就能使用的zip文件,哪种形式都行。Redis的Windows版属于绿色软件,,解压后目录结构如下:二、redis的使用二、1、服务器启动命令通过快捷键Ctrl + C 即可停止Redis服务二、2、客户端连接命令客户端连接命令:redis-cli.exe。

学习笔记 3万+

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

关于缓存 db redis local 取舍之道

让我们来聊一下数据缓存,它是如何为我们带来快速的数据响应的。你知道吗,为了提高数据的读取速度,我们通常会引入数据缓存。但是,你知道吗,不是所有的数据都适合缓存,有些数据更适合直接从数据库查询。现在,我们就来一起讨论一下,什么样的数据适合直接从数据库查询,什么样的数据适合从缓存中读取。这将有助于我们更好地利用缓存,提高系统的性能。让我们开始吧!从前的无脑经验,db查询慢,redis缓存起来,redis真不一定快!一个简单性能测试:(测试响应时间均为二次查询的大概时间)

Mr_Wanter 995

数据仓库与数据库的不同

分享了数据仓库和数据库的不同

xieyichun_的博客 1629

【Java-Redis】Redis 集群如何选择数据库?

Redis集群仅支持db0数据库,无法使用SELECT命令切换,这是由其分片机制和分布式特性决定的。数据路由复杂度和跨节点事务一致性是多数据库受限的主要原因。建议采用业务前缀隔离(如user:*)、多集群部署或命名空间管理作为替代方案。迁移数据时需注意键前缀转换,客户端应显式配置使用db0。通过业务层实现数据隔离比依赖数据库切换更符合集群架构特点。

ZGW0513的博客 1254

Redis 是否适合像 MySQL 一样当数据库使用?

而 MySQL 的数据保护机制更完善,它的事务功能能确保一系列操作要么全成功,要么全失败,数据一致性更好,在资金交易这类对数据准确性要求极高的场景下,MySQL 更靠谱。相比之下,MySQL 作为磁盘存储的关系型数据库,虽然支持复杂查询和事务,但在面对大量数据查询时,需要频繁进行磁盘 I/O 操作 ,而机械硬盘的寻道时间和数据传输速度相对较慢,这大大限制了查询的效率,性能显著下降。Redis 作为内存数据库,读写速度快,适合高并发和低延迟的场景,尤其在需要快速响应的应用中表现优异。

Foolforuuu的博客 783

Redis持久化之RDB(Redis DataBase)

Redis是一个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭服务或者断电会丢失。Redis的数据也支持写到硬盘中,这个过程就叫做持久化。Redis提供了2种不同形式的持久化方式。

夕拾的博客 1475

数据仓库和数据库有什么区别?

数据仓库和数据库是两种不同类型的数据存储解决方案,它们在设计、用途和功能上存在显著差异。首先,数据库主要用于事务处理系统,它们支持日常操作,如数据的插入、更新和删除。数据库通常具有高度规范化的结构,以减少数据冗余并确保数据一致性

杨荧的优快云博客 2358

ok-ww 鸣潮后台自动战斗、刷声骸与一键日常:3 步装好,5 个高频坑一次排完

ok-ww 是一个基于图像识别的《鸣潮》自动化程序,能后台自动战斗、自动刷声骸、一键清日常,全程只通过 Windows 接口模拟用户点按和按键,不读内存、不改游戏文件。下面按"能干什么 → 怎么装 → 怎么刷 → 出问题查什么"的顺序讲清楚,全部基于仓库当前代码,不确定的版本与参数以项目文档为准。 [![ok-ww 设置界面:自动战斗、跳过对话、自动拾取三个常驻任务开关](https://raw

gitblog_00039的博客 382

redis 数据库的安装及使用方法

Redis(远程字典服务器) 是一个开源的、使用 C 语言编写的 NoSQL 数据库。Redis基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。set 设数据get 查数据keys 看键del 删键rename 重名 键 (覆盖)renamenx 重名 键 (不覆盖)dbsize 查看多少键个。

wyq2070857323的博客 1908

快来科普,数据仓库和数据库有什么区别?

数据仓库(Data Warehouse)是一种专门用于存储和管理大量结构化数据的信息系统。它通过整合来自不同来源的数据,为企业提供统一、一致的数据视图,以支持决策制定和业务分析。数据仓库的核心特点包括数据的集成性、时变性、非易失性和面向主题的组织方式

胡晗靓的Java学习博客 3917

最适合使用Redis作为解决方案的几个应用场景

(1)如果应用需要显示每天的注册用户数,便可以使用string作为计数器,设定一个名为REGISTERED_COUNT_TODAY的 key,并在初始化时给它设置一个到凌晨 0 点的过期时间,每当用户注册成功后便使用incr命令使该 key 增长 1,同时当每天凌晨 0 点后,这个计数器都会因为 key 过期使值清零。利用set结构的无序性,通过 Spop( Redis Spop 命令用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。

csdn3043663729的博客 2117
上一篇: 详解Java8中新引入的异步编程API之CompletableFuture
下一篇: 分享一个关于java中查看一个对象内存布局和占用空间大小的工具
Jack_abu
博客等级 码龄10年 633粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_abu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值