上一篇我们完成了Redis在CentOS和Ubuntu双系统的安装、配置与远程连接,成功搭建起可用的Redis环境。光把服务跑起来还不够,想要真正用好Redis,核心是吃透它的数据类型——这也是Redis区别于普通键值缓存的关键。

Redis支持数十种数据结构,但日常开发90%的场景,只需要掌握String(字符串)、Hash(哈希)、List(列表)、Set(集合)、ZSet(有序集合)这五大基础类型。本篇就用通俗讲解+实战命令+业务场景的方式,带你彻底掌握,学完直接上手用。

前置准备:先通过redis-cli连接Redis并完成认证,后续所有命令均在客户端执行,复制即可运行。

# 连接Redis
redis-cli
# 输入密码(安装时配置的requirepass)
auth 你的Redis密码
# 测试连通性
ping
# 返回 PONG 即可开始实操

一、String(字符串):最基础最常用的类型

核心定义:Redis最基础的Key-Value类型,Value是字符串格式(可存普通文本、数字、JSON串、图片二进制),单个Value最大存储512MB,是所有场景的入门选择。

适用场景

  • 缓存数据(用户信息、商品详情、配置参数)
  • 计数器(文章阅读量、接口请求次数、点赞数)
  • 分布式锁、Session共享、验证码存储

实战常用命令

# 1. 设置键值对
set key value
# 示例:缓存用户名
set username zhangsan

# 2. 获取键值
get key
# 示例:获取用户名
get username

# 3. 设置带过期时间的键(秒级)
setex key 过期时间 value
# 示例:存储验证码,10分钟过期
setex code 600 8866

# 4. 数值自增(计数器专用,原子操作)
incr key
# 示例:文章阅读量+1
incr article:views:1001

# 5. 数值自减
decr key
# 示例:库存扣减
decr stock:1001

# 6. 批量设置/获取键值
mset key1 value1 key2 value2
mget key1 key2

# 7. 删除键
del key

二、Hash(哈希):存储对象型数据

核心定义:类似Java的HashMap、Python的字典,一个Key对应多个Field-Value键值对,适合存储结构化对象(用户信息、商品信息),避免冗余建Key。

适用场景

  • 缓存对象数据(用户详情、商品参数、订单信息)
  • 批量修改单个属性,无需更新整个对象

实战常用命令

# 1. 存储单个字段
hset key field value
# 示例:存储用户ID为1001的姓名
hset user:1001 name lisi

# 2. 批量存储字段
hmset key field1 value1 field2 value2 field3 value3
# 示例:存储用户完整信息
hmset user:1001 age 25 sex male phone 13800138000

# 3. 获取单个字段值
hget key field
# 示例:获取用户年龄
hget user:1001 age

# 4. 获取对象所有字段和值
hgetall key
# 示例:获取用户1001全部信息
hgetall user:1001

# 5. 获取所有字段名/所有字段值
hkeys key
hvals key

# 6. 字段数值自增
hincrby key field 增量
# 示例:用户积分+10
hincrby user:1001 score 10

# 7. 删除指定字段
hdel key field

三、List(列表):有序可重复的队列

核心定义:有序、元素可重复的字符串列表,底层是双向链表,支持头尾快速插入删除,保持元素进入顺序。

适用场景

  • 消息队列、任务队列
  • 朋友圈/微博时间线、评论列表
  • 历史记录、最新动态

实战常用命令

# 1. 从左侧(头部)插入元素
lpush key value1 value2 value3
# 示例:添加消息队列
lpush msg:queue "登录成功" "下单成功"

# 2. 从右侧(尾部)插入元素
rpush key value1 value2

# 3. 从左侧弹出元素(删除并返回)
lpop key

# 4. 从右侧弹出元素(删除并返回)
rpop key

# 5. 获取列表指定区间元素(0开始,-1代表最后一个)
lrange key start end
# 示例:获取消息队列所有元素
lrange msg:queue 0 -1

# 6. 获取列表长度
llen key

# 7. 移除指定元素
lrem key 计数 value

四、Set(集合):无序不可重复的集合

核心定义:无序、元素不可重复的集合,底层是哈希表,支持交集、并集、差集等集合运算。

适用场景

  • 去重(用户IP记录、点赞用户去重)
  • 共同好友、共同关注、兴趣推荐
  • 随机抽奖、随机推荐

实战常用命令

# 1. 添加元素
sadd key value1 value2 value3
# 示例:存储文章点赞用户ID
sadd article:like:1001 uid1001 uid1002 uid1003

# 2. 获取所有元素
smembers key

# 3. 判断元素是否存在
sismember key value
# 示例:判断用户是否点赞
sismember article:like:1001 uid1001

# 4. 随机获取元素
srandmember key 个数

# 5. 删除指定元素
srem key value

# 6. 求两个集合交集
sinter key1 key2
# 示例:求两个用户的共同关注
sinter follow:uid1001 follow:uid1002

# 7. 求两个集合并集
sunion key1 key2

五、ZSet(有序集合):带权重的有序集合

核心定义:有序、元素不可重复,每个元素绑定一个score(权重),Redis根据score自动排序,是实现排行榜的核心类型。

适用场景

  • 排行榜(销量榜、积分榜、热搜榜)
  • 延时队列、优先级队列
  • 带排序的动态列表

实战常用命令

# 1. 添加元素(score为权重/分数)
zadd key score1 value1 score2 value2
# 示例:添加商品销量数据
zadd goods:sales 100 iphone16 88 mate70 65 xiaomi14

# 2. 按score升序获取元素(带分数)
zrange key start end withscores
# 示例:获取销量排行榜前3
zrange goods:sales 0 2 withscores

# 3. 按score降序获取元素(热门榜专用)
zrevrange key start end withscores

# 4. 增加元素分数
zincrby key 增量 value
# 示例:商品销量+5
zincrby goods:sales 5 iphone16

# 5. 获取元素排名(降序)
zrevrank key value

# 6. 删除指定元素
zrem key value

六、五大类型快速选型表

新手容易纠结选哪种类型,这张表直接对照业务场景选,不踩坑:

数据类型特点首选业务场景
String简单键值、支持数字运算缓存、计数器、验证码、分布式锁
Hash结构化对象、单Key多字段用户/商品/订单对象缓存
List有序可重复、双向队列消息队列、时间线、历史记录
Set无序去重、集合运算去重、共同好友、随机推荐
ZSet有序去重、带权重排序各类排行榜、优先级队列

七、Redis通用实用命令

不管哪种数据类型,这些高频命令都能用,提升运维效率:

# 查看所有键(生产慎用,数据量大卡顿)
keys *

# 模糊匹配键
keys prefix*

# 查看键剩余过期时间(秒)
ttl key

# 设置键的过期时间
expire key 秒数

# 查看键对应的数据类型
type key

# 清空当前数据库所有数据
flushdb

# 清空所有数据库数据(生产严禁乱用)
flushall

生产警告keys *flushallflushdb属于高危命令,数据量大时会阻塞Redis,严禁在高峰期执行!


总结与下篇预告

本篇把Redis五大核心数据类型的原理、实战命令、业务场景讲透,新手照着命令练几遍,就能应对日常开发需求。Redis的精髓就是用对数据类型,选对类型比写复杂代码更高效。

发表回复