登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
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
基本
数据
类型
相关帖子
像Git一样管理数据:深入解析数据库并发控制MVCC的实现
Hadoop大数据在2025-2026年和AI智能问数平台的规划与实践
从海量数据到 AI 决策的落地方法
搞懂“元数据”:给数据办一张“身份证”
期货数据对接指南,用于获取黄金、白银、原油等大宗商品的数据。
期货数据对接指南,用于获取黄金、白银、原油等大宗商品的数据。
大疆不同任务类型执行逻辑,上云API源码分析
Flink学习笔记:状态类型和应用
1.java基本语法
DBLens 的数据安全、登录方式与离线使用说明
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
像Git一样管理数据:深入解析数据库并发控制MVCC的实现
1
84
虾氲叱
2025-12-08
业界
Hadoop大数据在2025-2026年和AI智能问数平台的规划与实践
0
698
挚魉
2025-12-09
业界
从海量数据到 AI 决策的落地方法
0
773
梁宁
2025-12-09
业界
搞懂“元数据”:给数据办一张“身份证”
1
991
费卿月
2025-12-11
安全
期货数据对接指南,用于获取黄金、白银、原油等大宗商品的数据。
0
822
府扔影
2025-12-11
安全
期货数据对接指南,用于获取黄金、白银、原油等大宗商品的数据。
1
32
赏勿
2025-12-11
业界
大疆不同任务类型执行逻辑,上云API源码分析
0
68
迭婵椟
2025-12-12
业界
Flink学习笔记:状态类型和应用
0
170
茹静曼
2025-12-12
安全
1.java基本语法
0
514
每捎京
2025-12-15
安全
DBLens 的数据安全、登录方式与离线使用说明
0
104
郦惠
2025-12-16
回复
(3)
琴丁辰
2025-10-12 11:39:00
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
少琼
2025-10-30 10:31:11
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
镝赋洧
昨天 08:04
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
荡俊屯
昨天 08:04
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9998
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
246
RSA加密
316
pydash原型链污染
176
大模型榜单周报(2025/12/08—2025/12/12)
849
当你不再迷信“最强模型”,系统设计才刚刚
876
软件i2c
301
2025年专业起名老师联系方式汇总:全国资深
652
解码IP协议号:网络世界的“货物运单”
712
Python Selenium 漫步指南:从入门到精通
643
AI 付费模式终极对比:ChatGPT、Gemini、Cl
838
JSAPIThree 加载 3D Tiles 学习笔记:大规
358
LLM 工具调用的范式演进与认知模型集成
355
Requirements Engineering with AI for Con
343
【节点】[Adjustment-WhiteBalance节点]原
303
上海专业建筑维修服务解析:标准化流程如何
947
【分析式AI】-带你弄懂XGBoost模型
731
【分析式AI】-带你弄懂XGBoost模型
53
【分析式AI】-带你弄懂XGBoost模型
274
C语言之统计天数
241
如何使用DashVector的多向量检索
272
【分析式AI】-朴素贝叶斯算法模型