Redis 提供了丰富的内存数据结构类型,每种类型针对不同场景设计。以下是主要数据类型及其特点详解:
String(字符串)
bash
SETEX key seconds value # 设置过期时间
INCR counter # 原子计数器
GETRANGE str 0 5 # 子字符串操作
Hash(哈希表)
bash
HSET user:1000 name "John" age 30
HGETALL user:1000
List(列表)
bash
LPUSH news "latest news"
RPOP orders # 队列消费
LTRIM hot 0 99 # 保持100条最新记录
Set(集合)
bash
SADD tags "redis" "database"
SINTER user1:tags user2:tags # 共同标签
Sorted Set(有序集合)
bash
ZADD leaderboard 100 "player1"
ZREVRANGE leaderboard 0 9 # TOP10
Bitmaps(位图)
bash
SETBIT daily_active 20230101 1 # 标记活跃
BITCOUNT weekly_active # 统计活跃数
HyperLogLog
bash
PFADD visitors "192.168.1.1"
PFCOUNT visitors
Geospatial(地理空间)
bash
GEOADD cities 116.40 39.90 "Beijing"
GEORADIUS cities 115 40 100 km
Stream(流)
bash
XADD mystream * sensor-id 1234 temp 19.8
XREAD COUNT 2 STREAMS mystream 0
选型建议: - 缓存场景优先使用String - 对象存储使用Hash - 需要排序时选择Sorted Set - 精确去重用Set,大数据量估算用HyperLogLog - 消息队列场景新项目建议用Stream替代List
性能注意事项: 1. 小数据(<100元素)Hash比String更省内存 2. Sorted Set的ZRANGE时间复杂度O(log(N)+M) 3. 大量Key会消耗额外内存,考虑使用Hash整合
可通过TYPE key
命令查看现有key的数据类型,MEMORY USAGE key
分析内存占用情况。