Redis 基础数据类型完整版

Redis 在 Linux 环境中的基础语法与数据类型详解 Redis 在 Linux 环境中的基础操作,以及其支持的多种数据类型的使用场景和代码示例。Redis 的灵活性和高性能使其成为电商系统中不可或缺的组成部分。通过合理应用 Redis 的各类数据类型,我们可以构建高效、可靠的系统,满足不同业务场景的需求。 阅读详情

Redis 作为一个内存数据库已经被许许多多的公司使用,它的性能非常的优秀,读写速度支持非常快而且支持 10W 的 QPS 。今天我们就来学习下它的丰富的数据类型。

Redis 数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(有序集合)。

string(字符串)

字符串类型是Redis的最基本数据结构。 字符串类型的值实际可以为字符串,数字,二进制,但是值最大不能超过512M。

keyvaluehelloworldcounter1bits10000100json{"id":1,"name":"xiaocai","age":18}

string命令

设置

set key value [EX seconds] [PX milliseconds] [NX|XX]

get key

> set name xiaocai
OK
> get name
"xiaocai"

过期

setex key seconds value

> set name1 redis1 ex 10 #10秒后过期
OK
> get name1
(nil)

> setex name2 10 redis2 #10秒后过期
OK
> get name2
"redis2"
> get name2
(nil)

> set name3 redis3 px 10 #10豪秒后过期
OK
> get name3
(nil)

不存在才能设置成功或者必须存在才能设置成功

> set hello world nx #不存在才能设置成功
OK
> set hello w nx #存在就设置失败
(nil)
> get hello
"world"

>set hello w xx  #存在才能设置成功
OK
> set world hello xx #不存在就设置失败
(nil)
> get hello
"w"
> get world
(nil)

批量设置

mset key value [key value ...]
mget key [key ...]


> mset name1 redis1 name2 redis2
OK

> mget name1 name2
1) "redis1"
2) "redis2"

> mget name1 name2 name3
1) "redis1"
2) "redis2"
3) (nil)

计数

incr key

incrby key increment

> set age 18  #value只能为整数
OK
> incr age
(integer) 19
> incrby age -5
(integer) 14
> incrby age 10
(integer) 24

删除

del key [key ...]

> del age
(integer) 1
> get age
(nil)

内部编码

  1. int 8个字节的长整型
  2. embstr 小于等于39个字节的字符串
  3. raw 大于39个字节的字符串
> set port 6379
OK
> object encoding port
"int"

> set hello world
OK
> object encoding hello 
"embstr"

> set longString abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
OK
> object encoding hello
"raw"
> strlen longString
(integer) 52

list(列表)

list类型是用来存储多个有序的字符串。每列字符串称之为元素。一个list的最大存储为2^32-1个元素。可以对列表进行双端插入和弹出,也可以指定索引下标获取元素。

list命令

头部和尾部添加元素

lpush key value [value ...]

rpush key value [value ...]

lrange key start stop

> lpush letter "a"
(integer) 1
> lpush letter "b"
(integer) 2
> lpush letter "c"
(integer) 3
> lrange letter 0 -1
1) "c"
2) "b"
3) "a"

> rpush letter "a"
(integer) 4
> rpush letter "b"
(integer) 5
> rpush letter "c"
> lrange letter 0 -1
1) "c"
2) "b"
3) "a"
4) "a"
5) "b"
6) "c"

头部和尾部弹出元素

lpop key

rpop key

> lpop letter
"c"
> lpop letter
"b"
> lrange letter 0 -1
1) "a"
2) "a"
3) "b"
4) "c"

> rpop letter
"c"
> rpop letter
"b"
> lrange letter 0 -1
1) "a"
2) "a"

索引操作 索引需要对全部list进行遍历,性能会随着元素个数的增大而变差

lrange key start stop

lindex key index

ltrim key start stop

len key

> rpush letter b c
(integer) 4
> lrange letter 0 -1
1) "a"
2) "a"
3) "b"
4) "c"
> lindex letter 2
"b"
> ltrim letter 0 -2
OK
> lrange letter 0 -1
1) "a"
2) "a"
3) "b"
> llen letter
(integer) 3

插入

insert key BEFORE|AFTER pivot value

> linsert letter before b c
(integer) 4
> linsert letter after a d
(integer) 5
> lrange letter 0 -1
1) "a"
2) "d"
3) "a"
4) "c"
5) "b"

修改

set key index value

> lset letter 2 B
OK
> lrange letter 0 -1
1) "a"
2) "d"
3) "B"
4) "c"
5) "b"

内部编码

  1. ziplist(压缩列表):小于3.2版本,当元素个数小于list-max-ziplist-entries配置(默认512个),同时每个元素的值长度都小于list-max-ziplist-value配置(默认64字节)
  2. linkedlist(链表):小于3.2版本,不满足ziplist的条件
  3. quicklist:Redis 3.2版本,以一个ziplist为节点的linkedlist
> object encoding letter
"quicklist"

hash (哈希)

hash是一个string类型的field和value的映射表。 它适合用于存储对象,它是无序的,不能使用索引操作。

hash命令

设置

hset key field value

> hset user:1 name zhangSan
(integer) 1
> hset user:1 age 18
(integer) 1

获取和获取所有的field-value

hget key field

hgetall key

> hget user:1 name
"zhangSan"
> hgetall user:1
1) "name"
2) "zhangSan"
3) "age"
4) "18"

删除

hdel key field [field ...]

> hdel user:1 age
(integer) 1
> hdel user:2 age
(integer) 0

长度

hlen key

> hlen user:1
(integer) 1

批量设置

hmset key field value [field value ...]

> hmset user:2 name liSi age 23
OK
> hmget user:2 name age
1) "liSi"
2) "23"
> hlen user:1
(integer) 1
> hlen user:2
(integer) 2

是否存在

hexists key field

> hexists user:2 name
(integer) 1
> hexists user:2 city
(integer) 0

所有的field和所有的value

hkeys key

hvals key

> hkeys user:1
1) "name"
> hkeys user:2
1) "name"
2) "age"
> hvals user:1
1) "zhangSan"
> hvals user:2
1) "liSi"

内部编码

  1. ziplist(压缩列表):当元素个数小于hash-max-ziplist-entries配置(默认512个)和每个元素大小小于hash-max-ziplist-value配置(默认64字节)时
  2. hashtable(哈希表):不满足ziplist条件时
> object encoding user:1
"ziplist"

修改配置文件hash-max-ziplist-entries为5

> hmset test t1 v1 t2 v2 t3 v3 t4 v4 t5 v5 t6 v6
OK
> object encoding test
"hashtable"

set(集合)

用来保存多个字符串元素,无序的,不能有重复元素,不能使用索引下标获取元素。一个集合可以存储2^32-1个元素。

set命令

增加

add key member [member ...]

> sadd user:1:tag it music news
(integer) 3
> sadd user:1:tag bike news
(integer) 1

删除

srem key member [member ...]

> srem user:1:tag bike
(integer) 1

个数

scard key

> scard user:1:tag
(integer) 3

是否存在

sismember key member

> sismember user:1:tag bike
(integer) 0
> sismember user:1:tag it
(integer) 1

随机返回指定个数

srandmember key [count]

> srandmember user:1:tag
"news"
> srandmember user:1:tag 3
1) "news"
2) "music"
3) "it"

随机弹出

spop key [count]

> spop user:1:tag
"news"
> srandmember user:1:tag 3
1) "music"
2) "it"

所有个数

smembers key

> smembers user:1:tag
1) "music"
2) "it"

交集

sinter key [key ...]

> sinter user:1:tag user:2:tag
1) "music"
2) "it"

并集

sunion key [key ...]

> sunion user:1:tag user:2:tag
1) "music"
2) "java"
3) "run"
4) "it"

差集

sdiff key [key ...]

> sdiff user:1:tag user:2:tag
(empty list or set)
> sadd user:1:tag sleep
(integer) 1
> sdiff user:1:tag user:2:tag
1) "sleep"
> sdiff user:2:tag user:1:tag
1) "java"
2) "run"

内部编码

  1. intset(整数集合):元素都是整数和元素个数小于set-max-intset-entries配置(默认512个)时
  2. hashtable(哈希表):不满足intset时
> object encoding user:1:tag
"hashtable"

> sadd numbers 1 2 3 4 5
(integer) 5
> object encoding numbers
"intset"

zset(有序集合)

zset保证了元素不能重复,每个元素都有一个分数(score)作为排序的依据。

zset命令

添加

zadd key [NX|XX] [CH] [INCR] score member [score member ...]

> zadd books 8.2 "Redis in Action"
(integer) 1
> zadd books 9.3 "Effective Java: Second Edition : Java"
(integer) 1
> zadd books 9.1 "Think in Java"
(integer) 1
> zadd books 9.3 "Python Cookbook" 9.0 "Effective Python"
(integer) 2

个数

zcard key

> zcard books
(integer) 5

升序返回范围的成员

zrange key start stop [WITHSCORES]

> zrange books 0 -1
1) "Redis in Action"
2) "Effective Python"
3) "Think in Java"
4) "Effective Java: Second Edition : Java"
5) "Python Cookbook"

> zrange books 2 5
1) "Think in Java"
2) "Effective Java: Second Edition : Java"
3) "Python Cookbook"

升序返回成员时带上分数

> zrange books 0 -1 withscores
 1) "Redis in Action"
 2) "8.1999999999999993" 
 3) "Effective Python"
 4) "9"
 5) "Think in Java"
 6) "9.0999999999999996"
 7) "Effective Java: Second Edition : Java"
 8) "9.3000000000000007"
 9) "Python Cookbook"
10) "9.3000000000000007"

> zrange books 2 5 withscores
1) "Think in Java"
2) "9.0999999999999996"
3) "Effective Java: Second Edition : Java"
4) "9.3000000000000007"
5) "Python Cookbook"
6) "9.3000000000000007"
  1. 精度问题:内部 score 使用 double 类型进行存储,所以存在小数点精度问题
  2. withscores:带上分数

降序

zrevrange key start stop [WITHSCORES]

> zrevrange books 0 -1 withscores
 1) "Python Cookbook"
 2) "9.3000000000000007"
 3) "Effective Java: Second Edition : Java"
 4) "9.3000000000000007"
 5) "Think in Java"
 6) "9.0999999999999996"
 7) "Effective Python"
 8) "9"
 9) "Redis in Action"
10) "8.1999999999999993"

指定value的score

zscore key member

> zscore books "Think in Java"
"9.0999999999999996"

根据score的数值区间升序

zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

> zrangebyscore books 0 9.1 withscores
1) "Redis in Action"
2) "8.1999999999999993"
3) "Effective Python"
4) "9"
5) "Think in Java"
6) "9.0999999999999996"

根据score的数值区间降序

zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]

> zrevrangebyscore books 9.1 0  withscores
1) "Think in Java"
2) "9.0999999999999996"
3) "Effective Python"
4) "9"
5) "Redis in Action"
6) "8.1999999999999993"

根据score的数值降序输出所有元素

> zrevrangebyscore books +inf -inf  withscores
 1) "Python Cookbook"
 2) "9.3000000000000007"
 3) "Effective Java: Second Edition : Java"
 4) "9.3000000000000007"
 5) "Think in Java"
 6) "9.0999999999999996"
 7) "Effective Python"
 8) "9"
 9) "Redis in Action"
10) "8.1999999999999993"
  1. +inf 正无穷
  2. -inf 负无穷

删除

zrem key member [member ...]

> zrem books "Effective Java: Second Edition : Java"
(integer) 1

增加分数

zincrby key increment member

> zincrby books 2  "Redis in Action"
"10.199999999999999"
> zincrby books -1  "Redis in Action"
"9.1999999999999993"

交集

zinterstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE

> zadd textbooks 8 "chinese" 9 "english" 9.5 "mathematics"
(integer) 3
> zadd textbooks 9.2 "Think in Java"
(integer) 1

> zrange books 0 -1
1) "Redis in Action"
2) "Effective Python"
3) "Think in Java"
4) "Python Cookbook"
> zrange textbooks 0 -1
1) "chinese"
2) "english"
3) "Think in Java"
4) "mathematics"

> zinterstore newbooks 2 books textbooks
(integer) 1
> zrange newbooks 0 -1
1) "Think in Java"

并集

zunionstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE

> zunionstore newUnionbooks 2 books textbooks
(integer) 7
> zrange newUnionbooks 0 -1
1) "chinese"
2) "Redis in Action"
3) "Effective Python"
4) "english"
5) "Python Cookbook"
6) "mathematics"
7) "Think in Java"

内部编码

  1. ziplist(压缩列表):元素个数小于zset-max-ziplist-entries配置(默认128个)和元素长度小于zset-max-ziplist-value配置(默认64B)时
  2. skiplist(跳跃表):不满足ziplist时
> object encoding books
"ziplist"

总结

这篇文章主要是学会基础的 Redis 数据类型和基本的 API 以及每个数据类型背后的原理。

「转载」vaptcha 等手势验证码图像识别与轨迹提取(思路) 作者:文安哲 从博客重开以后就说要更文章,鸽了蛮久了,赶紧补上一篇嫖嫖各位老公的流量。 最近看群里面大家讨论研究手势验证码比较多,然后我也顺带研究做了一下,给各位老公们分享一下做的过程。 首先,一起来康康手势验证码长啥样! 大概就是长这个样子,需要按照图像中的那条轨迹再图片上滑动,不得不说这类验证码确实体验感拉满,让人很想立马关掉这个网站。 那么言归正传,这类验证码该怎么做识... 阅读详情

相关推荐

别再只盯着MES了!半导体/面板厂CIM系统全家桶(EAP/YMS/SPC)保姆级入门指南

本文深入解析半导体制造中的CIM系统,涵盖EAP、YMS和SPC等关键子系统的协同工作。通过实战案例和技术细节,展示如何利用CIM系统提升生产效率、良率管理和设备维护,为半导体/面板厂提供全面的实施指南和优化策略。

weixin_33693070的博客 464

Redis的5种数据格式的使用

redis的5中数据格式的使用方法和实际应用场景

qq_38273070的博客 1718

手机OIS马达拆解:从苹果的悬丝到三星的滚珠,不同方案如何影响你的拍照体验?

本文深度解析手机OIS马达技术,对比苹果悬丝式、三星滚珠式和LG记忆合金式三种主流方案的机械原理与成像体验差异。通过详实的数据和测试结果,揭示不同OIS技术如何影响防抖性能、模组厚度及长期可靠性,为摄影爱好者和技术爱好者提供实用选购建议。

weixin_42554408的博客 309

Redis数据库(二):Redis数据库的五种基本数据类型

value除了是字符串也可以是数字!计数器统计多单位的数量对象缓存存储。

weixin_47040031的博客 1477

BUUCTF--[OGeek2019]babyrop

才学习了基本的ROP流程,到处找题练,不过也没做出来几道题,以这道32位的题作为例题吧。 这道题是BUUCTF上pwn练习题里的[OGeek2019]babyrop。 代码审计 老规矩先checksec一下: 没有canary保护,nx保护开启排除shellcode可能性,FULL RELEO为地址随机化。 观察主函数,先设定了一个闹铃,到时间就会强制退出程序,解除闹铃的方法在上一篇博客中提到过了, 这道题中闹铃函数依然对我们解题起不到什么干扰作用。 主函数的思路大概是:生成一个随机数,把这个随机数作为

N1rvana的博客 6009

基于h5端的视频录制和回溯功能的实现

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

发果叁 3193

Redis - 基础数据类型

根据官网文档的解释,可以了解 Redis 基础数据类型的一些基本信息:对于 Redis 来说,存储的 key 值都是字符串类型,讨论数据类型的时候,指的都是存储的 value 值。这里主要是包括 5 种数据类型:String、List、Set、Hash、SortedSet。如果想要了解 Redis 基础数据类型支持的命令,可以查看官方文档,筛选对应数据类型即可。

csdn_manong1的博客 994

图解凸函数与凹函数:别再被数学定义搞晕了!

本文通过图解和生活化类比,深入浅出地解释了凸函数与凹函数的数学定义及其与日常直觉的差异。文章详细介绍了凸函数的图像特征、数学定义(包括二阶导数判断)、在机器学习中的重要性,以及常见误区和实际应用中的判断技巧,帮助读者彻底理解这一关键数学概念。

weixin_29159441的博客 661

Redis基础概念和数据类型详解

详细介绍了redis的概念以及优势,对于redis的数据类型做出了详细的介绍,包括但不限于数据类型介绍,基本命令总结,以及实例应用场景

zhaolk的博客 935

扣子Coze触发器使用指南:实现工作流定时执行的完整教程

Coze平台触发器功能详解:定时触发器配置指南 摘要:Coze平台的触发器是实现自动化任务的核心组件,其中定时触发器能够按预设时间自动执行工作流。本指南介绍了定时触发器的配置方法,包括每日、每周、每月及Cron表达式等多种时间设置方式,以及如何关联工作流执行具体任务。文章还提供了健身提醒等实用案例,并涵盖了触发器调试、发布及常见问题解决方案。通过合理配置定时触发器,用户可以轻松实现各类自动化任务,如定时发送消息、数据采集等,大幅提升工作效率。

互联网架构师笔记 1927

YOLOv5改进 | 注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制,附二次创新)

本文给家大家带来的改进机制是iRMB,其是在论文Rethinking Mobile Block for Efficient Attention-based Models种提出,论文提出了一个新的主干网络EMO(后面我也会教大家如何使用该主干,本文先教大家使用该文中提出的注意力机制)。其主要思想是将轻量级的CNN架构与基于注意力的模型结构相结合(有点类似ACmix)我将iRMB和C2f结合,然后也将其用在了检测头种进行尝试三种结果进行对比,针对的作用也不相同,但是无论那种实验均有一定涨点效果。

Snu77的博客 2571

Redis常用五大基本数据类型

Redis常用五大基本数据类型

qq_38154295的博客 799

RK3588 MPP,RGA,DRM,QT之RGA

RK3588多路视频采用RGA来进行混合成一帧

dreamliweiming的博客 4267

Redis基础【完整版】:简介和常用命令、全面key操作、五种数据类型的增删改查、Redis与Python交互(附源代码)

目录 一、Redis简介和常用命令 1、Reids简介 2、redis常用命令 (1)进入数据库 (2)查看数据库版本 (3)切换到第三个数据库 (4)退出redis数据库 二、全面key操作 (1)查看当前数据有哪些键 (2)创建数据 (3)获取数据 (4)获取数据如果显示是十六进制,那么重新进入redis (5)查看key是否存在 (6)查看名称中包含a的key (7)查看key的值的类型 (8)设置键的过期时间和查看过期时间 三、五种数据类型的增删改查 ...

Oh_Python的博客 2931

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Redis数据类型详解:从基础到高级应用

Redis作为一款高性能的键值存储系统,其丰富的数据类型是其强大功能的核心。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6963

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Redis(Redis基础,SpringCache,SpringDataRedis)

本文详细讲解了redis基础内容,以及Spring Cache,Spring Data Redis技术的使用

qq_49474843的博客 2943

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redis数据类型全解析:从基础到高级应用

Redis数据类型全解析:从基础到高级应用

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 6711

Redis基础数据类型

Redis全称Remote Dictionary Service,即远程字典服务。Redis作为一款开源的基于内存的键值对存储系统,主要被用作高性能缓存服务器使用,也可作为消息中间件、Session共享等,官方概述如下:Redis 是世界上最快的内存数据库。它提供适用于缓存、向量搜索和 NoSQL 数据库的云和本地解决方案,可无缝集成到任何技术栈中——使数字客户能够轻松构建、扩展和部署我们世界赖以运行的快速应用。Redis 提供数据结构,例如字符串哈希列表集合、带有范围查询的有序集合位图地理空间索引。

huangmouren0123的博客 745

【redis基础】redis的十大数据类型

本篇文章针对有关Redis7数据类型的的使用率较高的操作进行讲解

m0_65431718的博客 4049

【Redis--01,Redis基础概念、基础指令、数据类型】

Redis基础学习

ZwProgrammer的博客 1027

Redis数据类型

Redis介绍 RedisObject的结构 1. type 2. enconding 3. lru 4. refcount 5. *prt Redis源码结构 1. 基本数据结构 2. Redis数据类型的底层实现 3. Redis数据库的实现 4. Redis服务端和客户端实现 5. 其他 Redis数据类型 String List Set Zset Hash Stream Bloom Filter Bitmap HyperLogLog Geospatial 使用场景 使用示例

骑个小蜗牛的博客 5158

Redis之五大基础数据类型(详细总结 面试必备)

Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。这 5 种数据类型是直接提供给用户使用的,是数据的保存形式,其底层实现主要依赖这 8 种数据结构:简单动态字符串(SDS)、LinkedList(双向链表)、Dict(哈希表/字典)、SkipList(跳跃表)、Intset(整数集合)、ZipList(压缩列表)、QuickList(快速列表)

qq_62592925的博客 1305

Redis(三)基础:Redis五大基础数据类型

Redis不仅只有key-value存储,实际上是一个数据结构服务器,支持不同的数据类型,可以解决从缓存到队列再到事件处理的各种问题。Strings:二进制安全的字符串Lists:按插入顺序排序的字符串元素的集合。Redis 列表是字符串值的链表。(用于实现栈和队列)不重复且无序的字符串元素的集合Sorted sets:类似Sets,不同的地方在于每个字符串元素都关联一个叫score的浮动数值(floating number value)。里面的元素是按score进行排序。

林钟一的博客 2200

Redis基础入门

简单介绍一下redis:redis是一种键值类型的数据库,我们之前学过mysql,mysql也是数据库,他们之间的区别是,redis把数据存储在磁盘中,redis把数据存储在内存中,mysql是二维表类型的数据库;leftPush向头部插入一个数据,leftPushAll插入多个,range获取指定范围的元素,rightPop删除尾部的元素,size获取列表的长度。put就是hset,delete就是hdel,get就是hget,keys,values就是hkeys,hvalues;del:删除key;

2301_79748665的博客 1554

Redis redis五种数据类型和使用场景

一、redis基本基本介绍 1、 redis解决分布式环境下缓存不同步 让缓存集中处理(大家使用同一个缓存服务),我们需要一个类似于MYSQL这样可以通过服务来提供第三方的缓存工具(缓存服务器);流行的第三方缓存服务器:memcache/redis 2、REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统(...

m0_38068812的博客 8755

Redis学习【基础篇】-关于redis中不同数据类型的使用方法

黑马redis课程学习笔记基础篇-基础数据类型使用和java集成

weixin_44923197的博客 936
下一篇: 「Java」ArrayList 的工作原理
程序员职业指南
博客等级 码龄4年 2138粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值