更多资料请前往–》软考历年真题
Redis 支持五种核心数据类型,每种类型都有特定的应用场景和命令集,以下是详细分类说明:
- String(字符串)
应用场景:存储简单值(如计数器、缓存数据)
常用命令:
SET key value:设置键值对
GET key:获取值
SET mykey "Hello" # 设置键值
GET mykey # 返回"Hello"
INCR/DECR:对整数值自增1或自减1,若key不存在则初始化为0后操作
SET counter 10
INCR counter #返回11(自增1)
DECR counter #返回10(自减1)
INCRBY/DECRBY:按指定步长增减整数值
SET inventory 50
INCRBY inventory 5 # 返回55(增加5)
DECRBY inventory 8 # 返回47(减少8)
INCRBYFLOAT:对浮点数值增减指定浮点数
SET temperature 36.5
INCRBYFLOAT temperature 0.7 # 返回37.2(增加0.7)
INCRBYFLOAT temperature -1.2 # 返回36.0(减少1.2)
APPEND key value:追加字符串
APPEND
SET greeting "Hello"
APPEND greeting " World" # 值变为"Hello World"
不存在的key会自动创建
APPEND new_key “Redis” # 创建新键并设置值为"Redis"
二进制安全示例
SET binary_data “\x00\x01”
APPEND binary_data “\x02\x03” # 可追加二进制数据
STRLEN key:获取字符串长度
常规字符串
SET message “Redis”
STRLEN message # 返回5(字节数)
中文处理(UTF-8编码)
SET chinese “中文”
STRLEN chinese # 返回6(每个中文占3字节)
空键处理
STRLEN non_existent_key # 返回0
- Hash(哈希)
应用场景:存储对象(如用户信息)
常用命令:
HSET key field value:设置哈希表中字段值,若字段存在则覆盖
HSET user:1001 name "Alice" # 返回1(新建字段)
HSET user:1001 age 25 # 返回1(新建字段)
HSET user:1001 name "Bob" # 返回0(覆盖旧值)
HGET key field:获取字段值
HGET user:1001 name # 返回"Bob"
HGET user:1001 email # 返回nil(字段不存在)
HGETALL key:获取所有字段和值(大数据量慎用)
HGETALL user:1001 # 返回["name","Bob","age","27"]
HDEL key field:删除指定字段
HDEL user:1001 age # 返回1(删除成功)
HEXISTS 检查字段是否存在
HEXISTS user:1001 name # 返回1(存在)
- List(列表)
应用场景:有序集合(如消息队列)
常用命令:
LPUSH key value:左侧插入元素
RPUSH key value:右侧插入元素
LPUSH mylist "A" # 左侧插入"A",列表变为["A"]
LPUSH mylist "B" "C" # 左侧批量插入,列表变为["C","B","A"]
RPUSH mylist "D" # 右侧插入"D",列表变为["C","B","A","D"]
LRANGE key start stop:获取范围元素
LRANGE mylist 0 -1 # 获取全部元素,返回["C","B","A","D"]
LRANGE mylist 1 2 # 获取索引1-2的元素,返回["B","A"]
LPOP key:移除并获取左侧元素
LPOP mylist # 移除并返回左侧第一个元素"C",列表变为["B","A","D"]
RPOP mylist # 移除并返回右侧第一个元素"D",列表变为["B","A"]
LLEN key:获取列表长度
LLEN mylist # 返回当前列表长度2
- Set(集合)
应用场景:无序唯一集合(如标签系统)
常用命令:
SADD key member [member…]:添加成员
SMEMBERS key:获取所有成员
SISMEMBER key member:判断成员是否存在
SUNION key1 key2:并集运算
典型应用场景
- 标签系统
SADD article:123:tags "tech" "database"
SADD user:456:interests "tech"
SINTER article:123:tags user:456:interests # 查找共同标签
- 好友关系
SADD user:100:friends "200" "300"
SISMEMBER user:100:friends "200" # 检查是否为好友
- 数据去重
SADD unique_visitors "192.168.1.1"
SCARD unique_visitors # 获取独立访客数
- 内容推荐
SUNION user:100:history user:200:history # 合并浏览记录生成推荐池
- (Sorted Set/Zset)有序集合
应用场景:带权重的有序数据(如排行榜)
常用命令:
- 添加元素(ZADD)
向有序集合添加元素或更新分数
格式:ZADD key [NX|XX] [CH] [INCR] score member
特性:NX仅添加新成员,XX仅更新现有成员,CH返回变更成员数,INCR实现分数递增
ZADD myzset 1 "one" 2 "two" 3 "three" # 添加三个成员
ZADD myzset NX 4 "four" # 仅当"four"不存在时添加
ZADD myzset XX CH 2.5 "two" # 仅更新已存在的"two"分数并返回修改计数:ml-citation{ref="1,2" data="citationList"}
二、范围查询命令
ZRANGE:按索引升序获取成员
格式:ZRANGE key start stop [WITHSCORES]
示例:
ZRANGE myzset 0 -1 获取全部成员
ZREVRANGE:按索引降序获取成员
格式:ZREVRANGE key start stop [WITHSCORES]
与ZRANGE排序方向相反
ZRANGE myzset 0 -1 WITHSCORES # 返回全部成员及分数(升序)
ZREVRANGE myzset 0 1 # 返回分数最高的两个成员(降序):ml-citation{ref="1,2" data="citationList"}
ZRANGEBYSCORE:按分数范围查询(升序)
格式:ZRANGEBYSCORE key min max [WITHSCORES]
支持-inf和+inf表示无限范围
ZRANGEBYSCORE myzset 1 3 # 返回分数1≤score≤3的成员
ZRANGEBYSCORE myzset (2 +INF LIMIT 1 2 # 返回分数>2的前两个成员:ml-citation{ref="2,9" data="citationList"}
ZREVRANGEBYSCORE:按分数范围降序查询
格式:ZREVRANGEBYSCORE key max min [WITHSCORES]
参数min/max位置与升序版本相反
三、排名与统计命令
ZRANK/ZREVRANK:获取成员排名
格式:ZRANK key member(升序)
ZREVRANK key member(降序)
返回:成员排名(从0开始)
ZCOUNT:统计分数区间内成员数
格式:ZCOUNT key min max
示例:
ZCOUNT myzset 10 20
ZRANK myzset "two" # 返回"two"的升序排名(从0开始)
ZSCORE myzset "three" # 返回"three"的分数:ml-citation{ref="7,8" data="citationList"}
ZINCRBY:增减成员分数
格式:ZINCRBY key increment member
特性:若成员不存在则自动添加
ZINCRBY myzset 0.5 "two" # 将"two"的分数增加0.5:ml-citation{ref="2,8" data="citationList"}
四、删除操作命令
ZREM:删除指定成员
格式:ZREM key member [member …]
返回:成功删除的成员数
ZREM myzset "one" # 删除指定成员
ZPOPMAX myzset 2 # 删除并返回分数最高的2个成员:ml-citation{ref="2,7" data="citationList"}
ZREMRANGEBYRANK:按排名区间删除
格式:ZREMRANGEBYRANK key start stop
示例:删除排名1-3的成员
ZREMRANGEBYSCORE:按分数区间删除
格式:ZREMRANGEBYSCORE key min max
支持开区间(如(10表示大于10)
浙公网安备 33010602011771号