Redis 是一个高性能的键值存储数据库,支持多种数据类型,远超简单的键值对。这些数据类型使其在缓存、消息队列、排行榜等场景中表现出色。以下是 Redis 的主要数据类型及其用法。
目录
- 字符串 (String)
- 哈希 (Hash)
- 列表 (List)
- 集合 (Set)
- 有序集合 (Sorted Set)
- HyperLogLog
- 地理空间 (Geo)
- 流 (Stream)
- 位图 (Bitmap)
- 其他类型
- 参考资料
1. 字符串 (String)
描述:最基本的数据类型,用于存储文本、数字或序列化数据(如 JSON)。最大长度为 512MB。
用途:
- 缓存(如网页内容)
- 计数器
- 存储配置或序列化对象
示例:
SET key "Hello Redis"
GET key
# 输出: "Hello Redis"
INCR counter
# 输出: 1
SETEX session 3600 "user123" # 设置 1 小时过期
命令:SET
, GET
, INCR
, DECR
, SETEX
, MSET
, MGET
2. 哈希 (Hash)
描述:存储键值对的集合,适合表示对象(如用户信息)。每个哈希可存储 2³²-1 个字段。
用途:
- 存储结构化数据(如用户资料)
- 配置管理
示例:
HSET user:1 name "Alice" age 25
HGET user:1 name
# 输出: "Alice"
HGETALL user:1
# 输出: name "Alice" age "25"
命令:HSET
, HGET
, HGETALL
, HDEL
, HINCRBY
, HMSET
3. 列表 (List)
描述:有序的字符串列表,支持从两端操作,适合队列或栈。最大长度为 2³²-1。
用途:
- 消息队列
- 最新数据列表(如时间线)
- 任务队列
示例:
LPUSH queue "task1"
RPUSH queue "task2"
LPOP queue
# 输出: "task1"
LRANGE queue 0 -1
# 输出: "task2"
命令:LPUSH
, RPUSH
, LPOP
, RPOP
, LRANGE
, LTRIM
, BLPOP
4. 集合 (Set)
描述:无序、不重复的字符串集合,适合去重或关系运算。最大元素数为 2³²-1。
用途:
- 去重(如标签、好友列表)
- 集合运算(如共同关注)
示例:
SADD myset "apple" "banana"
SMEMBERS myset
# 输出: "apple" "banana"
SINTER set1 set2
# 输出: 交集元素
命令:SADD
, SMEMBERS
, SREM
, SINTER
, SUNION
, SDIFF
, SCARD
5. 有序集合 (Sorted Set)
描述:带分数的集合,元素唯一,按分数排序。适合排行榜或优先级队列。
用途:
- 排行榜(如游戏积分)
- 优先级任务
- 时间排序
示例:
ZADD leaderboard 100 "Alice" 200 "Bob"
ZRANGE leaderboard 0 -1 WITHSCORES
# 输出: "Alice" "100" "Bob" "200"
ZREVRANK leaderboard "Alice"
# 输出: 1
命令:ZADD
, ZRANGE
, ZREM
, ZSCORE
, ZRANK
, ZINCRBY
6. HyperLogLog
描述:基于概率的结构,用于估算集合的基数(唯一元素数),占用极小内存(约 12KB)。
用途:
- 统计独立访客(UV)
- 大规模去重计数
示例:
PFADD page:visits "user1" "user2"
PFCOUNT page:visits
# 输出: 2(近似值)
PFMERGE merged page1 page2
命令:PFADD
, PFCOUNT
, PFMERGE
7. 地理空间 (Geo)
描述:存储经纬度坐标,支持距离计算和范围查询(Redis 3.2+)。
用途:
- 附近的人
- 地理位置服务
示例:
GEOADD cities 116.4 39.9 "Beijing"
GEODIST cities Beijing Shanghai km
# 输出: 距离(公里)
GEORADIUS cities 116.4 39.9 100 km
命令:GEOADD
, GEOPOS
, GEODIST
, GEORADIUS
, GEOSEARCH
8. 流 (Stream)
描述:日志式数据结构,支持追加和消费消息(Redis 5.0+)。适合事件流或消息队列。
用途:
- 日志记录
- 事件驱动系统
- 消费者组
示例:
XADD mystream * sensor-id 123 temp 23.5
XREAD COUNT 2 STREAMS mystream 0
XGROUP CREATE mystream mygroup $
命令:XADD
, XREAD
, XGROUP
, XACK
, XRANGE
9. 位图 (Bitmap)
描述:基于字符串的位操作,适合存储二进制状态。最大长度为 512MB。
用途:
- 用户在线状态
- 布隆过滤器
- 签到统计
示例:
SETBIT user:1:online 100 1
GETBIT user:1:online 100
# 输出: 1
BITCOUNT user:1:online
命令:SETBIT
, GETBIT
, BITCOUNT
, BITOP
10. 其他类型
- Bitfield:对位图进行复杂操作,如增量计数。
BITFIELD mykey INCRBY u8 100 1
- 布隆过滤器(需模块):用于高效去重(非核心类型,需安装 RedisBloom)。
11. 参考资料
- 官方文档:Redis Data Types
- 命令参考:Redis Commands
- 中文教程:Redis 中文网 – 数据类型
- 实践指南:Redis University – Data Types
发表回复