Redis 数据类型与命令
字符串(String)
在生产中我常用字符串类型存储简单的键值数据。例如缓存用户会话信息或临时计算结果。字符串类型操作简便且性能高,在需要快速读写的小型数据场景下较为合适。
常用命令
可通过SET key value
为键赋值,再用GET key
获取对应值。如果需要统计访问量,我会使用INCR key
或DECR key
对存储数值的键进行自增自减,以便在高并发下实现高效计数。
SET user:1 "Alice"
GET user:1
INCR user:count
DECR user:count
哈希(Hash)
我在实际应用中常用哈希来存储对象信息,如用户档案或商品信息。与字符串相比,哈希更适合以键值对的形式组织复杂数据,使得修改单个字段更灵活且数据存储更紧凑。
常用命令
使用HSET key field value
为哈希添加或更新字段值,用HGET key field
获取特定字段的值。如果要遍历全部字段及值,可使用HGETALL key
。
HSET user:1 name "Alice" age 30
HGET user:1 name
HGETALL user:1
列表(List)
在生产环境中我会用列表来处理有序队列数据。例如在消息队列中用LPUSH
和RPOP
实现先进先出,或在实时任务列表中使用RPUSH
插入新任务,然后LPOP
获取待处理任务。
常用命令
用LPUSH key value
从左侧插入元素,用RPUSH key value
从右侧插入元素。通过LPOP key
或RPOP key
从对应侧弹出元素,灵活构建队列或栈结构。
LPUSH queue "task1"
RPUSH queue "task2"
LPOP queue
RPOP queue
集合(Set)
在生产中我常用集合类型来存储去重后的用户 ID 集,或标记已处理任务的标识集合。集合中的元素是无序且唯一的,有利于快速判断某元素是否存在。
常用命令
SADD key member
添加元素,SREM key member
删除元素。使用SMEMBERS key
列出全部元素,用SISMEMBER key member
判断元素是否在集合中。
SADD users "Alice" "Bob" "Charlie"
SMEMBERS users
SISMEMBER users "Alice"
有序集合(Sorted Set)
在排行榜或积分统计中,我会选用有序集合。其通过为每个成员关联一个分数实现自动排序,适合实现排行榜、评分系统和延迟队列等场景。
常用命令
ZADD key score member
添加成员及其分数,用ZRANGE key start stop
查看指定排名区间的成员列表。使用ZREM key member
可移除特定成员,ZCARD key
则返回成员总数。
ZADD leaderboard 100 "Alice" 200 "Bob"
ZRANGE leaderboard 0 -1
ZREM leaderboard "Alice"
位图(Bitmap)
在大规模用户活跃度统计中,我常以位图存储用户活跃标记。例如通过SETBIT key offset value
标记某用户在特定日期内是否访问过系统,然后使用位操作指令统计整体活跃用户数。
常用命令
SETBIT key offset value
设置位图中某偏移量的值,GETBIT key offset
获取该位置值。大规模场景下,可快速统计特定条件的用户数量。
SETBIT user:1 100 1
GETBIT user:1 100
发布/订阅(Pub/Sub)
在需要跨服务器快速广播消息时,我会使用发布订阅模型。客户端可通过SUBSCRIBE
订阅频道,并在消息发布后实时收到通知。
常用命令
PUBLISH channel message
发布消息到频道,SUBSCRIBE channel
订阅频道接收消息,UNSUBSCRIBE channel
取消订阅。
PUBLISH news "Hello World"
SUBSCRIBE news
事务(Transaction)
在实际操作中我会用事务确保一组命令的原子性。例如在一次性更新多个键时使用MULTI
开始事务,执行若干命令后用EXEC
提交。若需放弃事务中命令则使用DISCARD
。
常用命令
MULTI
SET user:2 "Bob"
INCR user:2
EXEC
Lua 脚本
我在处理需要保证原子性的复杂逻辑时,会将逻辑写成 Lua 脚本,然后通过EVAL
执行。这样可以减少与 Redis 的网络交互次数,提升操作效率。
常用命令
EVAL "return redis.call('GET', KEYS[1])" 1 user:1
数据类型特性对比表
下表概括了常用数据类型的特点与适用场景,便于我在实际运维中快速选择合适的数据结构
数据类型 | 有序性 | 重复允许 | 典型应用场景 |
---|---|---|---|
String | 无 | 支持重复值 | 简单键值对缓存、计数器 |
Hash | 基于字段组织 | 字段唯一 | 存储对象数据、用户信息 |
List | 有序 | 支持重复值 | 队列、消息列表 |
Set | 无序 | 元素唯一 | 去重、快速成员判断 |
Sorted Set | 有序(由分数决定) | 元素唯一 | 排行榜、延迟队列 |