登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
Redis基本数据类型
Redis基本数据类型
[ 复制链接 ]
荡俊屯
2025-10-1 11:56:11
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
Redis 的所有数据都是以 key-value(键值对)的形式存储的,我们所说的数据类型指的是 value 的数据类型。key 永远都是一个字符串(String)。
0、通用命令
keys:
查看当前库所有key (匹配:keys *1)
exists key:
判断某个key是否存在
type key:
查看你的key是什么类型
del key:
删除指定的key数据
expire key 10:
10秒钟:为给定的key设置过期时间
ttl key:
查看还有多少秒过期,-1表示永不过期,-2表示已过期
select:
命令切换数据库
dbsize:
查看当前数据库的key的数量
flushdb:
清空当前库
flushall:
清空全部库
1、String(字符串)
String是Redis最基础的数据类型,可存储字符串、数字和二进制数据(如图片),单个值最大
512MB
。对于整数和浮点数类型,可以直接执行
原子性
的自增/自减操作。
数据结构:
简单动态字符串(Simple Dynamic String,缩写
SDS
)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配
常用命令示例
# 基础操作
127.0.0.1:6379> SET user:name "Alice" # 设置键值对
OK
127.0.0.1:6379> GET user:name # 获取值
"Alice"
127.0.0.1:6379> DEL user:name # 删除键
(integer) 1
127.0.0.1:6379> GET user:name
(nil)
# 数字操作(原子性)
127.0.0.1:6379> SET article:100:views 0
OK
127.0.0.1:6379> INCR article:100:views # 自增1
(integer) 1
127.0.0.1:6379> INCRBY article:100:views 10 # 增加10
(integer) 11
127.0.0.1:6379> DECR article:100:views # 自减1
(integer) 10
# 批量操作(节省网络开销)
127.0.0.1:6379> MSET user:1:name "Bob" user:1:email "bob@example.com"
OK
127.0.0.1:6379> MGET user:1:name user:1:email
1) "Bob"
2) "bob@example.com"
# 设置过期时间(常用于缓存)
127.0.0.1:6379> SET session:xyz123 "user_data" EX 3600 # 3600秒后自动过期
OK
# 不存在时设置(分布式锁常用)
127.0.0.1:6379> SETNX lock:order 1 # 成功返回 1,失败返回 0
复制代码
应用场景
缓存:存储数据库查询结果
计数器:网站访问量、点赞数
会话存储:用户登录令牌
分布式锁:使用 SETNX 实现
2、Hash(哈希)
Hash 是一个键值对集合,适合存储对象。每个 Hash 可以存储 2³² - 1 个字段-值对。
数据结构:
ziplist(
压缩列表
),hashtable(
哈希表
)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。
常用命令示例
# 存储一个用户对象
127.0.0.1:6379> HSET user:1000 name "Alice" age 30 email "alice@example.org" # 设置多个field
(integer) 3
127.0.0.1:6379> HGET user:1000 name # 获取一个field的值
"Alice"
127.0.0.1:6379> HGETALL user:1000 # 获取整个哈希
1) "name"
2) "Alice"
3) "age"
4) "30"
5) "email"
6) "alice@example.org"
127.0.0.1:6379> HKEYS user:1000 # 获取所有field名
1) "name"
2) "age"
3) "email"
127.0.0.1:6379> HVALS user:1000 # 获取所有value
1) "Alice"
2) "30"
3) "alice@example.org"
# 批量获取字段
127.0.0.1:6379> HMGET user:1001 name age # ["Alice", "30"]
# 统计字段数量
127.0.0.1:6379> HLEN user:1001 # 2
# 单独操作某个field
127.0.0.1:6379> HINCRBY user:1000 age 1 # 给age字段的值增加1
(integer) 31
127.0.0.1:6379> HSET user:1000 age 32 # 直接设置age字段
(integer) 0
127.0.0.1:6379> HDEL user:1000 email # 删除email字段
(integer) 1
复制代码
应用场景
对象存储:用户信息、商品信息
购物车:用户ID为键,商品ID为字段,数量为值
配置存储:系统配置项
3、List(列表)
List 是简单的字符串列表,按照插入顺序排序。元素可以重复。可以从头部或尾部添加元素。
它的底层实际是个
双向链表
,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
常用命令示例
# 像一个队列(FIFO:先进先出)
127.0.0.1:6379> LPUSH orders:queue "order1001" # 从左边插入
(integer) 1
127.0.0.1:6379> LPUSH orders:queue "order1002"
(integer) 2
127.0.0.1:6379> RPOP orders:queue # 从右边取出,得到最早进入的"order1001"
"order1001"
127.0.0.1:6379> RPOP orders:queue # 取出"order1002"
"order1002"
# 像一个栈(LIFO:后进先出)
127.0.0.1:6379> LPUSH my:stack "task1"
127.0.0.1:6379> LPUSH my:stack "task2"
127.0.0.1:6379> LPOP my:stack # 从左边取出,得到最后进入的"task2"
"task2"
# 获取列表范围
127.0.0.1:6379> RPUSH news:latest "news_id_555" # 从右边插入,构建时间顺序列表
127.0.0.1:6379> RPUSH news:latest "news_id_556"
127.0.0.1:6379> RPUSH news:latest "news_id_557"
127.0.0.1:6379> LRANGE news:latest 0 2 # 获取前3个元素
1) "news_id_555"
2) "news_id_556"
3) "news_id_557"
127.0.0.1:6379> LRANGE news:latest 0 -1 # 获取所有元素,-1表示最后一个
1) "news_id_555"
2) "news_id_556"
3) "news_id_557"
复制代码
典型场景
消息队列(LPUSH + BRPOP 实现生产者 - 消费者模型)
最新列表(如用户最新动态、商品评论)
栈(LPUSH + LPOP)和队列(LPUSH + RPOP)
4、Set(集合)
Set 是 String 类型的无序集合,元素唯一不重复,支持交集、并集、差集等操作
数据结构:
它底层其实是一个
value为null
的
hash表
,所以添加,删除,查找的复杂度都是O(1)。
常用命令示例
# 添加成员并自动去重
127.0.0.1:6379> SADD article:800:tags "tech" "redis" "database" "tech"
(integer) 3 # 返回成功添加的数量,重复的"tech"被忽略
127.0.0.1:6379> SMEMBERS article:800:tags # 获取集合所有成员(无序)
1) "database"
2) "redis"
3) "tech"
# 集合运算
127.0.0.1:6379> SADD user:alice:follows "user:ben" "user:charlie" "user:diana"
(integer) 3
127.0.0.1:6379> SADD user:bob:follows "user:alice" "user:diana" "user:evan"
(integer) 3
127.0.0.1:6379> SINTER user:alice:follows user:bob:follows # 交集:共同关注
1) "user:diana"
127.0.0.1:6379> SUNION user:alice:follows user:bob:follows # 并集:所有关注的人
1) "user:alice"
2) "user:ben"
3) "user:charlie"
4) "user:diana"
5) "user:evan"
127.0.0.1:6379> SISMEMBER user:alice:follows "user:ben" # 检查ben是否在alice的关注列表中
(integer) 1
# 随机元素(抽奖)
127.0.0.1:6379> SADD lottery:users "user1" "user2" "user3" "user4" "user5"
(integer) 5
127.0.0.1:6379> SRANDMEMBER lottery:users 2 # 随机抽取2个用户,不删除
1) "user3"
2) "user1"
127.0.0.1:6379> SPOP lottery:users 1 # 随机抽取1个用户,并从集合中删除(防止重复中奖)
1) "user2"
复制代码
典型场景
去重存储(如用户浏览历史、点赞记录)
好友关系(共同好友、好友推荐)
标签系统(文章标签、商品分类)
随机推荐(抽奖)
5、ZSet (Sorted Set - 有序集合)
Sorted Set 类似 Set,但每个元素都关联一个分数(score),元素按分数从小到大排序。
数据结构:
hash
:hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。
跳跃表
:跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。
# 添加成员和分数
127.0.0.1:6379> ZADD leaderboard 100 "player1" 85 "player2" 120 "player3"
(integer) 3
# 按分数升序获取(低到高,WITHSCORES选项会返回分数)
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES
1) "player2"
2) "85"
3) "player1"
4) "100"
5) "player3"
6) "120"
# 按分数降序获取(高到低,获取Top 2)
127.0.0.1:6379> ZREVRANGE leaderboard 0 1 WITHSCORES
1) "player3"
2) "120"
3) "player1"
4) "100"
# 按分数范围查询
127.0.0.1:6379> ZRANGEBYSCORE leaderboard 90 110 WITHSCORES # 获取90<=score<=110的成员
1) "player1"
2) "100"
# 更新玩家分数(原子操作)
127.0.0.1:6379> ZINCRBY leaderboard 15 "player2" # 给player2加15分
"100"
127.0.0.1:6379> ZREVRANK leaderboard "player2" # 查看player2的排名(降序排名,0是第一名)
(integer) 1
复制代码
典型场景
排行榜(用户积分、商品销量)
优先级队列(按分数排序任务)
范围查询(筛选分数在特定区间的元素)
6、总结
Redis 的五种核心数据类型各有其优势和应用场景:
String:最简单灵活,适用于大多数简单场景
Hash:适合存储对象,可以部分更新字段
List:提供顺序存储,适合队列和堆栈场景
Set:提供唯一性和集合运算,适合标签和社交关系
Sorted Set:结合了Set和排序功能,适合排行榜和优先级队列
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Redis
基本
数据
类型
相关帖子
从海量数据到 AI 决策的落地方法
搞懂“元数据”:给数据办一张“身份证”
期货数据对接指南,用于获取黄金、白银、原油等大宗商品的数据。
期货数据对接指南,用于获取黄金、白银、原油等大宗商品的数据。
大疆不同任务类型执行逻辑,上云API源码分析
Flink学习笔记:状态类型和应用
1.java基本语法
DBLens 的数据安全、登录方式与离线使用说明
印度股票数据 API 对接实战指南(含实时行情与 IPO 数据)
原始类型与泛型对比笔记
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
从海量数据到 AI 决策的落地方法
0
773
梁宁
2025-12-09
业界
搞懂“元数据”:给数据办一张“身份证”
1
994
费卿月
2025-12-11
安全
期货数据对接指南,用于获取黄金、白银、原油等大宗商品的数据。
0
828
府扔影
2025-12-11
安全
期货数据对接指南,用于获取黄金、白银、原油等大宗商品的数据。
1
35
赏勿
2025-12-11
业界
大疆不同任务类型执行逻辑,上云API源码分析
0
70
迭婵椟
2025-12-12
业界
Flink学习笔记:状态类型和应用
0
171
茹静曼
2025-12-12
安全
1.java基本语法
0
519
每捎京
2025-12-15
安全
DBLens 的数据安全、登录方式与离线使用说明
0
107
郦惠
2025-12-16
安全
印度股票数据 API 对接实战指南(含实时行情与 IPO 数据)
0
686
裴涛
2025-12-17
业界
原始类型与泛型对比笔记
0
760
晖顶蝇
2025-12-17
回复
(3)
琴丁辰
2025-10-12 11:39:00
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
少琼
2025-10-30 10:31:11
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享,学习下。
镝赋洧
3 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢分享,辛苦了
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
荡俊屯
3 天前
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845358
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9982
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
156
Oracle等待事件:性能诊断与优化的核心指南
586
“静态回调+上下文指针”模式实现回调机制
103
从 Tool Calling 到 A2A,再到 MCP. 大模型
374
BUUCTF 0ctf_2018_heapstorm2 PWN house of
290
仅通过一句提示词,就可以让大模型变得更有
978
生成式引擎优化(GEO优化)全维度技术指南
543
GEO优化实战指南2025:六大服务商核心能力
759
原始类型与泛型对比笔记
684
印度股票数据 API 对接实战指南(含实时行
658
Apipost分支功能:为API开发打造专属的成本
329
OpenCVSharp:学习人脸检测例子
550
JSAPIThree 加载单体三维模型学习笔记:Sim
124
读捍卫隐私09匿名指南
72
工作中常用函数详解与示例-PostgreSQL(其他
589
很顶!零成本克隆你的声音,这款B站开源神
680
go语言/golang 自动升级配置
965
函数式编程与传统编程的对比——基于java
233
pgAdmin 后台命令执行漏洞复现及分析(CVE-
858
度假村亲子水上乐园设备哪家质量好?
286
上下文协议(MCP)Java SDK 指南