Redis是高性能的键值对内存数据库,能存字符串、哈希、列表、集合、有序集合这些数据结构,常用命令覆盖键管理、数据操作和各类型的专用指令,是处理缓存、会话存储、消息队列这些场景的核心工具。本文会系统讲各类数据结构的常用命令和典型应用场景。
● 字符串(String)命令 ●
字符串是Redis最基础的数据类型,能存文本、数字这些,支持自增、追加操作,适合缓存、计数器这些场景。
`SET key value [EX seconds] [PX milliseconds] [NX|XX]`:用来存键值,可选设置秒或毫秒级的过期时间,或者只在键不存在/存在时才存。实际开发里常用在缓存场景,比如`SET user:100 "张三" EX 3600`存用户信息,1小时后自动过期,这样能省内存还不会留脏数据。
`GET key`:用来取键值。和SET配合就是最基本的KV操作,比如`GET user:100`能返回"张三"。注意GET操作很快,适合高频访问的场景。
`INCR/DECR key`:给数值自增/自减1。典型用是计数器,比如`INCR page_view`统计页面访问量。要是key不存在,会自动初始化为1,这个特点常用来生成分布式ID。
`MSET/MGET key1 val1 [key2 val2...]`:批量存/取键值。需要操作多个key时,能少发很多网络请求,比如`MSET a 1 b 2`后`MGET a b`能返回["1","2"]。批量操作比一条一条发命令快好几倍。
● 哈希(Hash)命令 ●
哈希适合存对象,比如用户信息,结构是key→field→value,支持操作单个字段,比字符串更适合存结构化数据。
`HSET key field val [field val...]`:用来存哈希的字段值。比如`HSET user:1 name "李四" age 30`给user:1存多个字段,这种结构比JSON字符串省空间,还能操作单个字段。
`HGET key field`:用来取哈希的字段值。比如`HGET user:1 name`能返回"李四",只取需要的字段,不用取整个对象,特别适合大对象只访问部分字段的场景。
`HGETALL key`:用来取所有字段和值。比如`HGETALL user:1`能返回["name","李四","age","30"],虽然方便但要注意,字段太多时会阻塞Redis,生产环境尽量少用。
`HINCRBY key field increment`:给字段自增(只能是数值)。比如`HINCRBY user:1 score 10`能累加分数,比先取再存的流程更原子,适合计数场景。
● 列表(List)命令 ●
列表是简单的字符串集合,按插入顺序排,支持从两端操作,适合消息队列、文章列表这些场景。
`LPUSH/RPUSH key val [val...]`:从左/右加元素。典型消息队列实现:`LPUSH msg:list "消息1"`和`RPUSH msg:list "消息2"`后,列表是["消息1","消息2"],LPUSH+RPOP组合能实现先进先出队列。
`LPOP/RPOP key`:从左/右弹元素。比如`LPOP msg:list`能返回"消息1"并移除,列表变成["消息2"]。注意列表空时返回nil,客户端要处理这种情况。
`LRANGE key start end`:取指定范围的元素(索引从0开始)。比如`LRANGE msg:list 0 1`能返回前两个元素,配合`LLEN`能实现分页。注意end为1表示最后一个元素。
`LLEN key`:取列表长度。比如`LLEN msg:list`能返回当前元素数量,常用来监控队列堆积情况。长度计算很快,不用担心性能。
● 集合(Set)命令 ●
集合是无序且元素唯一的字符串集合,适合标签、好友关系这些需要去重和快速判断存在的场景。
`SADD key member [member...]`:加成员。比如`SADD user:tags "技术" "运动"`给用户加标签,自动去重保证唯一。注意加成功返回1,已存在返回0。
`SMEMBERS key`:取所有成员。比如`SMEMBERS user:tags`能返回所有标签,但集合无序,每次顺序可能不同。数据量大时用`SSCAN`分批取。
`SISMEMBER key member`:检查成员是否存在。比如`SISMEMBER user:tags "技术"`返回1表示存在,0不存在。操作很快,适合高频判断的场景。
`SREM key member [member...]`:删成员。比如`SREM user:tags "运动"`能移除指定标签。和`SADD`类似,删成功返回1,不存在返回0。
● 有序集合(Sorted Set)命令 ●
有序集合是带分数的集合,元素按分数排序,适合排行榜、优先级队列这些需要排序的场景。
`ZADD key score member [score member...]`:加成员及分数。比如`ZADD rank:score 100 "用户A" 200 "用户B"`创建排行榜,分数可重复但成员唯一。注意分数是double类型,支持小数。
`ZRANGE key start end [WITHSCORES]`:按分数从小到大取成员。比如`ZRANGE rank:score 0 1`能返回前两名,加`WITHSCORES`选项会同时返回分数,比如["用户A","100","用户B","200"]。
`ZREVRANGE key start end [WITHSCORES]`:按分数从大到小取成员。比如`ZREVRANGE rank:score 0 1`能返回分数最高的两名,适合查TopN的场景。
`ZRANK key member`:取成员排名(从小到大,0开始)。比如`ZRANK rank:score "用户A"`能返回其排名,配合`ZREVRANK`能查正反两个方向的排名。
上一条:Redis核心数据类型详解
下一条:Redis是什么