Redis数据类型及使用场景详解
1. String(字符串)
1.1 数据结构
- 可以存储字符串、整数或浮点数
- 最大存储512MB
- 二进制安全
1.2 基本命令
ET key value
GET key
INCR key
DECR key
INCRBY key increment
DECRBY key decrement
SETEX key seconds value
1.3 使用场景
- 计数器
INCR article:readcount:{id}
GET article:readcount:{id}
- 分布式锁
SET lock_key unique_value NX PX 10000
- 缓存
SET user:{id} {user_json_string}
SETEX session:{id} 3600 {session_data}
2. Hash(哈希)
2.1 数据结构
- 键值对集合
- field-value的映射表
- 适合存储对象
2.2 基本命令
HSET key field value
HGET key field
HMSET key field1 value1 field2 value2
HMGET key field1 field2
HGETALL key
HINCRBY key field increment
2.3 使用场景
- 用户信息管理
HMSET user:1 name "John" age 25 city "New York"
HGET user:1 name
- 商品属性管理
HMSET product:1 title "iPhone" price 999 stock 100
HINCRBY product:1 stock -1
- 购物车
HSET cart:user:1 product:1 2
HINCRBY cart:user:1 product:1 1
3. List(列表)
3.1 数据结构
3.2 基本命令
LPUSH key value
RPUSH key value
LPOP key
RPOP key
LRANGE key start stop
BLPOP key timeout
3.3 使用场景
- 消息队列
LPUSH msg:queue message
BRPOP msg:queue 0
- 最新动态
LPUSH user:news:1 news1
LRANGE user:news:1 0 9
- 文章列表
LPUSH article:list article1
LRANGE article:list 0 9
4. Set(集合)
4.1 数据结构
4.2 基本命令
SADD key member
SMEMBERS key
SISMEMBER key member
SINTER key1 key2
SUNION key1 key2
SREM key member
4.3 使用场景
- 好友关系
SADD user:1:friends 2 3 4
SISMEMBER user:1:friends 2
- 标签管理
SADD article:1:tags python redis mysql
SMEMBERS article:1:tags
- 黑名单/白名单
SADD blacklist ip1 ip2
SISMEMBER blacklist ip1
5. Sorted Set(有序集合)
5.1 数据结构
5.2 基本命令
ZADD key score member
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
ZRANK key member
ZSCORE key member
5.3 使用场景
- 排行榜
ZADD leaderboard 100 user1
ZREVRANGE leaderboard 0 9 WITHSCORES
- 延时队列
ZADD delay-queue timestamp task-id
ZRANGEBYSCORE delay-queue 0 current-timestamp
- 权重队列
ZADD weight-queue 10 task1
ZRANGE weight-queue 0 -1
6. Bitmap(位图)
6.1 数据结构
6.2 基本命令
SETBIT key offset value
GETBIT key offset
BITCOUNT key [start end]
BITOP operation destkey key [key ...]
6.3 使用场景
- 用户在线状态
SETBIT online_users user_id 1
GETBIT online_users user_id
- 签到记录
SETBIT user:sign:1 20230901 1
BITCOUNT user:sign:1
- 布隆过滤器
SETBIT bloom_filter hash_value 1
GETBIT bloom_filter hash_value
7. HyperLogLog
7.1 数据结构
7.2 基本命令
PFADD key element [element ...]
PFCOUNT key [key ...]
PFMERGE destkey sourcekey [sourcekey ...]
7.3 使用场景
- UV统计
PFADD page:uv user1 user2
PFCOUNT page:uv
- 独立IP统计
PFADD daily:ip ip1 ip2
PFCOUNT daily:ip
8. Geo(地理位置)
8.1 数据结构
8.2 基本命令
GEOADD key longitude latitude member
GEODIST key member1 member2 [unit]
GEORADIUS key longitude latitude radius unit
8.3 使用场景
- 附近的人
GEOADD locations 116.48 39.97 user1
GEORADIUS locations 116.48 39.97 5 km
- 店铺查找
GEOADD shops 116.48 39.97 shop1
GEORADIUSBYMEMBER shops shop1 1 km
9. Stream(流)
9.1 数据结构
9.2 基本命令
XADD key ID field value
XREAD COUNT count STREAMS key ID
XGROUP CREATE key groupname id
XREADGROUP GROUP group consumer STREAMS key ID
9.3 使用场景
- 消息队列
XADD mystream name Anna age 25
XREAD COUNT 2 STREAMS mystream 0
- 日志处理
XADD logs level INFO message "User logged in"
XRANGE logs - +