更多资料请前往–》软考历年真题

Redis 支持五种核心数据类型,每种类型都有特定的应用场景和命令集,以下是详细分类说明:

  1. 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

  1. 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(存在)
  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
  1. Set(集合)

‌应用场景‌:无序唯一集合(如标签系统)‌

‌常用命令‌:

SADD key member [member…]:添加成员

SMEMBERS key:获取所有成员

SISMEMBER key member:判断成员是否存在

SUNION key1 key2:并集运算

典型应用场景

  1. 标签系统
SADD article:123:tags "tech" "database"
SADD user:456:interests "tech"
SINTER article:123:tags user:456:interests  # 查找共同标签
  1. 好友关系
SADD user:100:friends "200" "300"
SISMEMBER user:100:friends "200"  # 检查是否为好友
  1. 数据去重
SADD unique_visitors "192.168.1.1"
SCARD unique_visitors  # 获取独立访客数
  1. 内容推荐
SUNION user:100:history user:200:history  # 合并浏览记录生成推荐池
  1. (Sorted Set/Zset)有序集合

‌应用场景‌:带权重的有序数据(如排行榜)‌

‌常用命令‌:

  1. 添加元素(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)