跳到主要内容

Redis 数据类型与命令

字符串(String)

在生产中我常用字符串类型存储简单的键值数据。例如缓存用户会话信息或临时计算结果。字符串类型操作简便且性能高,在需要快速读写的小型数据场景下较为合适。

常用命令

可通过SET key value为键赋值,再用GET key获取对应值。如果需要统计访问量,我会使用INCR keyDECR 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)

在生产环境中我会用列表来处理有序队列数据。例如在消息队列中用LPUSHRPOP实现先进先出,或在实时任务列表中使用RPUSH插入新任务,然后LPOP获取待处理任务。

常用命令

LPUSH key value从左侧插入元素,用RPUSH key value从右侧插入元素。通过LPOP keyRPOP 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有序(由分数决定)元素唯一排行榜、延迟队列