当前位置: 首页 > news >正文

redis数据的使用

Redis 作为高性能的键值存储数据库,提供了 8种核心数据结构,每种结构都有独特的底层实现、特性和适用场景,核心设计目标是“兼顾性能与内存效率”。以下从 数据结构定义、底层原理、核心命令、使用场景 四个维度,逐一详细解析:

一、String(字符串):Redis 最基础的数据结构

1. 数据结构定义

String 是 Redis 最核心、最常用的数据结构,本质是 二进制安全的动态字符串(可存储文本、图片二进制、序列化对象等),单个 String 最大容量为 512MB
特性:键值对映射(1个键对应1个值)、支持原子操作(如自增/自减)。

2. 底层原理:简单动态字符串(SDS)

Redis 没有使用 C 语言原生字符串(以 \0 结尾的字符数组),而是自定义了 SDS(Simple Dynamic String) 结构,解决 C 字符串的缺陷:

struct sdshdr {int len;        // 已使用字节数(字符串长度)int free;       // 未使用字节数(剩余空间)char buf[];     // 存储字符串的字节数组(二进制安全,无需\0结尾)
};

SDS 的核心优势:

  • 动态扩容:当字符串追加(APPEND)时,若 free 不足,会按“当前 len 的 2 倍(len<1MB)或 +1MB(len≥1MB)”扩容,避免频繁内存分配。
  • 二进制安全:不依赖 \0 识别字符串结尾,可存储图片、视频等二进制数据。
  • 高效获取长度:直接读取 len 字段(O(1)),无需遍历字符数组(C 字符串为 O(n))。
3. 核心命令
命令功能描述示例
SET key value设置键值对(覆盖旧值)SET name "zhangsan"
GET key获取键对应的值GET name → “zhangsan”
INCR key对数值类型的 String 原子自增 1(仅支持整数)INCR count → 若原是 5,返回 6
DECR key原子自减 1DECR count → 5
APPEND key str追加字符串到原值末尾APPEND name "123" → “zhangsan123”
SET key value NX EX t仅当键不存在时设置(NX),并设置过期时间 t 秒(EX),用于分布式锁SET lock 1 NX EX 5
4. 使用场景
  • 缓存热点数据:存储高频访问的简单数据(如商品详情、用户昵称),减轻数据库压力。
    例:SET product:1001 "{\"name\":\"手机\",\"price\":3999}" EX 3600(缓存商品1001的信息1小时)。
  • 计数器:实现接口调用次数、点赞数、阅读量等原子计数。
    例:用户点赞时执行 INCR like:article:2024,查看点赞数时 GET like:article:2024
  • 分布式锁:利用 SET NX EX 命令实现分布式锁(确保同一时间只有一个线程执行临界区代码)。
  • 存储二进制数据:存储小图片、序列化后的对象(如 Java 的 Serializable 对象)。

二、Hash(哈希):适合存储“对象型数据”

1. 数据结构定义

Hash 是 键值对的集合(类似 Java 的 HashMap),1个 Hash 键对应多个“字段-值”对(Field-Value),适合存储结构化对象(如用户、商品)。
特性:可单独操作某个字段(无需更新整个对象)、节省内存(相比多个 String 键)。

2. 底层原理:压缩列表(ziplist)+ 哈希表(dict)

Redis 会根据 Hash 中 字段数量字段/值的大小 自动切换底层实现:

  • 场景1:小数据量(字段数 ≤ 512 且每个字段/值 ≤ 64B):使用 压缩列表(ziplist)
    压缩列表是连续内存的紧凑结构,无哈希表的指针开销,内存效率极高。结构为:[prev_len][len][data][prev_len][len][data]...(前一个元素长度 + 当前元素长度 + 数据)。
  • 场景2:大数据量(字段数 > 512 或字段/值 > 64B):切换为 哈希表(dict)
    哈希表由“数组 + 链表”组成(解决哈希冲突),支持 O(1) 级别的字段查询/插入/删除,但内存开销比压缩列表大。
3. 核心命令
命令功能描述示例
HSET key field value给 Hash 键设置“字段-值”对(覆盖旧字段)HSET user:100 name "zhangsan" age 20
HGET key field获取 Hash 键中某个字段的值HGET user:100 name → “zhangsan”
HMGET key f1 f2批量获取多个字段的值HMGET user:100 name age → [“zhangsan”, “20”]
HDEL key field删除 Hash 键中的某个字段HDEL user:100 age
HGETALL key获取 Hash 键的所有“字段-值”对(大数据量慎用,会阻塞线程)HGETALL user:100 → [“name”,“zhangsan”]
HLEN key获取 Hash 键的字段总数HLEN user:100 → 1
4. 使用场景
  • 存储结构化对象:存储用户信息、商品详情等,避免创建多个 String 键(如 user:100:nameuser:100:age)。
    例:HSET user:100 name "lisi" gender "male" phone "13800138000",更新手机号时仅需 HSET user:100 phone "13900139000"
  • 购物车:以用户 ID 为 Hash 键,商品 ID 为字段,商品数量为值。
    例:用户100的购物车:HSET cart:100 prod:1001 2 prod:2002 1(2个商品1001,1个商品2002),修改数量时 HINCRBY cart:100 prod:1001 1
  • 配置项存储:存储服务的多维度配置(如数据库连接池的 maxSizetimeout)。

三、List(列表):有序、可重复的“链表”

1. 数据结构定义

List 是 有序、可重复的元素集合(类似 Java 的 LinkedList),支持从两端插入/删除元素,底层是双向链表,可实现“栈”“队列”“阻塞队列”。
特性:有序(按插入顺序排列)、可重复、支持索引访问(但效率低,O(n))。

2. 底层原理:快速列表(quicklist)

Redis 3.2 前,List 底层是“压缩列表(小数据)+ 双向链表(大数据)”;3.2 后统一为 快速列表(quicklist),是“双向链表 + 压缩列表”的结合体:

  • 快速列表的每个节点是一个 压缩列表(存储多个元素),节点间通过双向指针连接。
  • 优势:既保留双向链表的“高效两端操作”,又通过压缩列表减少节点间的指针开销,平衡性能与内存效率。
3. 核心命令
命令功能描述示例
LPUSH key elem从 List 左侧(头部)插入元素LPUSH list1 a b → [b,a]
RPUSH key elem从 List 右侧(尾部)插入元素RPUSH list1 c → [b,a,c]
LPOP key从左侧弹出元素(删除并返回)LPOP list1 → “b”,List 变为 [a,c]
RPOP key从右侧弹出元素RPOP list1 → “c”,List 变为 [a]
LRANGE key start end获取索引从 startend 的元素(end=-1 表示最后一个)LRANGE list1 0 -1 → [“a”]
BLPOP key timeout阻塞式从左侧弹出元素(若 List 为空,等待 timeout 秒后返回,timeout=0 表示永久等待)BLPOP list1 0(永久等待,直到有元素插入)
4. 使用场景
  • 消息队列(MQ):利用 LPUSH + BRPOP 实现阻塞队列(生产者 LPUSH 插入消息,消费者 BRPOP 阻塞获取消息),避免轮询消耗 CPU。
    例:订单消息队列:LPUSH order:queue "order1001"(生产者),BRPOP order:queue 0(消费者阻塞获取)。
  • 最新列表:存储“最新 N 条数据”(如新闻feed、用户最近浏览记录),利用 LPUSH + LTRIM 限制长度。
    例:用户100的最近浏览:LPUSH view:100 prod:1001,再 LTRIM view:100 0 9(只保留前10条)。
  • 栈/队列实现LPUSH + LPOP 实现栈(先进后出),LPUSH + RPOP 实现队列(先进先出)。

四、Set(集合):无序、不可重复的“哈希集合”

1. 数据结构定义

Set 是 无序、不可重复的元素集合(类似 Java 的 HashSet),支持集合运算(交集、并集、差集),适合“去重”和“关系计算”。
特性:元素唯一(自动去重)、无序(无法通过索引访问)、支持 O(1) 级别的元素判断。

2. 底层原理:整数集合(intset)+ 哈希表(dict)

Redis 根据 Set 中 元素类型数量 切换底层实现:

  • 场景1:元素全为整数且数量 ≤ 512:使用 整数集合(intset)
    整数集合是连续内存的紧凑结构(存储有序整数),无哈希表的指针开销,内存效率极高。
  • 场景2:元素含非整数或数量 > 512:使用 哈希表(dict)
    哈希表的“键”存储 Set 元素,“值”固定为 NULL,利用哈希表的“键唯一”特性实现 Set 的去重。
3. 核心命令
命令功能描述示例
SADD key elem向 Set 中添加元素(重复元素会自动忽略)SADD set1 a b c
SMEMBERS key获取 Set 中的所有元素(大数据量慎用)SMEMBERS set1 → [“a”,“b”,“c”]
SISMEMBER key elem判断元素是否在 Set 中(O(1))SISMEMBER set1 a → 1(存在)
SINTER key1 key2求两个 Set 的交集(共同元素)SADD set2 b c dSINTER set1 set2 → [“b”,“c”]
SUNION key1 key2求两个 Set 的并集(所有元素去重)SUNION set1 set2 → [“a”,“b”,“c”,“d”]
SREM key elem从 Set 中删除元素SREM set1 a → 1(删除成功)
SRANDMEMBER key n随机获取 Set 中的 n 个元素(不删除)SRANDMEMBER set1 2 → [“b”,“c”]
4. 使用场景
  • 去重:存储不重复的数据(如用户标签、文章关键词)。
    例:文章2024的标签:SADD tag:2024 "java" "redis" "mysql",自动去重。
  • 好友关系计算:求共同好友(交集)、好友推荐(并集-差集)。
    例:用户100的好友 SADD friend:100 101 102 103,用户101的好友 SADD friend:101 102 103 104,共同好友 SINTER friend:100 friend:101 → [102,103]。
  • 抽奖:利用 SRANDMEMBERSPOP(随机删除并返回)实现公平抽奖。
    例:抽奖用户 SADD lottery 1001 1002 1003,抽1人 SPOP lottery → 1002。
  • 黑名单/白名单:判断用户是否在黑名单(SISMEMBER blacklist:user 100),O(1) 效率。

五、Sorted Set(ZSet,有序集合):带“分数”的有序集合

1. 数据结构定义

ZSet 是 有序、不可重复的元素集合,每个元素关联一个“分数(score,浮点数)”,Redis 按分数从小到大排序。
特性:元素唯一、按分数有序、支持按分数范围/排名查询。

2. 底层原理:压缩列表(ziplist)+ 跳表(skiplist)+ 哈希表(dict)

ZSet 底层是“跳表 + 哈希表”的组合(小数据量时用压缩列表):

  • 跳表(skiplist):实现“按分数有序”和“范围查询”。跳表是多层有序链表,通过“索引层”减少查询时的遍历次数,查询/插入/删除效率为 O(log n)(类似红黑树,但实现更简单)。
  • 哈希表(dict):存储“元素 → 分数”的映射,实现 O(1) 级别的“元素查分数”“元素是否存在”判断。
  • 两者共享元素数据(跳表存元素和分数,哈希表存元素和分数的指针),确保数据一致性。
3. 核心命令
命令功能描述示例
ZADD key score elem向 ZSet 中添加元素(指定分数,重复元素会更新分数)ZADD rank 95 "zhangsan" 88 "lisi"
ZRANGE key start end按分数升序获取索引 startend 的元素(WITHSCORES 显示分数)ZRANGE rank 0 -1 WITHSCORES → [“lisi”,88,“zhangsan”,95]
ZREVRANGE key start end按分数降序获取元素ZREVRANGE rank 0 -1 → [“zhangsan”,“lisi”]
ZSCORE key elem获取元素的分数ZSCORE rank zhangsan → 95
ZINCRBY key incr elem给元素的分数增加 incr(可负)ZINCRBY rank 2 zhangsan → 97
ZRANGEBYSCORE key min max按分数范围获取元素((min 表示不包含 min)ZRANGEBYSCORE rank 90 100 → [“zhangsan”]
ZRank key elem获取元素的升序排名(从0开始)ZRank rank lisi → 0
4. 使用场景
  • 排行榜:按分数排序(如考试成绩、游戏积分、接口调用量)。
    例:学生成绩排行榜:ZADD score:rank 98 "wangwu" 95 "zhangsan",查前3名 ZREVRANGE score:rank 0 2
  • 延迟队列:以“时间戳”为分数,元素为任务ID,通过 ZRANGEBYSCORE key 0 当前时间 获取到期任务。
    例:10秒后执行的任务:ZADD delay:queue 1717245600 "task1001"(1717245600是10秒后的时间戳),定时任务每秒执行 ZRANGEBYSCORE delay:queue 0 1717245599 获取到期任务。
  • 范围查询:按分数筛选数据(如筛选积分在 100-200 之间的用户)。
    例:ZRANGEBYSCORE user:score 100 200 → 积分符合的用户ID。

六、其他高频数据结构(HyperLogLog、Geo、BitMap)

1. HyperLogLog:基数统计(去重计数)
  • 定义:用于“基数统计”(即“不重复元素的个数”),特点是 内存效率极高(统计10亿个数据仅需约12KB),但有 0.81% 的误差。
  • 原理:基于“概率算法”,通过统计哈希值的“前导零个数”估算基数(无需存储所有元素)。
  • 核心命令PFADD key elem(添加元素)、PFCOUNT key(统计基数)、PFMERGE dest key1 key2(合并两个 HyperLogLog)。
  • 场景:UV统计(网站独立访客)、搜索关键词去重计数、用户行为次数去重(如“用户今日点击商品的不重复次数”)。
2. Geo:地理信息存储(LBS服务)
  • 定义:存储经纬度(如纬度39.9042,经度116.4074),支持距离计算、范围查询。
  • 原理:底层是 ZSet,将经纬度通过“GeoHash 算法”编码为一个 64 位整数(作为 ZSet 的分数),利用 ZSet 的有序性实现地理查询。
  • 核心命令GEOADD key 经度 纬度 地点(添加地点)、GEODIST key 地点1 地点2(计算距离)、GEORADIUS key 经度 纬度 半径 单位(查询半径内的地点)。
  • 场景:附近的人(查询用户周围1公里的其他用户)、商家定位(查询附近的餐厅)、LBS游戏(如“ Pokemon GO ”的地图定位)。
3. BitMap:位存储(高效状态标记)
  • 定义:将 String 作为“位数组”,每个 bit 代表一个状态(0/1),适合存储“布尔型”数据(如是否签到、是否在线)。
  • 原理:String 的底层是字节数组,1个字节 = 8个 bit,通过 SETBIT 操作指定位置的 bit。
  • 核心命令SETBIT key offset value(设置第 offset 位的 bit 值,0/1)、GETBIT key offset(获取第 offset 位的 bit 值)、BITCOUNT key(统计 bit 为1的个数)。
  • 场景:签到(用户100在2024年5月1日签到:SETBIT sign:100:202405 0 1,0是5月1日的偏移量)、用户在线状态(SETBIT online:user 100 1 表示用户100在线)、布隆过滤器(结合多个 BitMap 实现高效去重)。

七、数据结构选择总结

选择 Redis 数据结构的核心是 “匹配业务需求与数据结构特性”,以下是决策指南:

业务需求推荐数据结构核心原因
简单键值映射、缓存、计数器String基础、高效、支持原子操作
结构化对象(用户、商品)Hash单独操作字段、节省内存
有序列表(消息队列、最新列表)List两端操作高效、支持阻塞队列
去重、集合运算(好友关系)Set自动去重、支持交集/并集
排序、排名、范围查询ZSet按分数有序、支持排名和范围筛选
基数统计(UV、去重计数)HyperLogLog内存效率极高、支持海量数据
地理信息(附近的人)Geo支持经纬度存储和距离计算
布尔状态(签到、在线)BitMap位存储、内存效率极高

结尾交付物提议

要不要我帮你整理一份 “Redis 数据结构选型与核心命令速查表”?表格会清晰列出每种数据结构的特性、适用场景、核心命令和注意事项,方便你日常开发中快速查阅和选型。

Redis 提供了丰富的命令用于操作不同数据结构,以下按 8种核心数据结构 分类整理了常用及重要命令,包含命令语法、功能描述和示例,方便全面查阅。

一、String(字符串)命令

String 是最基础的键值对结构,支持字符串、数字等多种类型操作。

命令语法功能描述示例返回值/效果示例
SET key value [NX|XX] [EX seconds|PX milliseconds]设置键值对,NX(仅不存在时)、XX(仅存在时),EX/PX设置过期时间SET name "redis" EX 3600OK
GET key获取键对应的值GET name“redis”
GETSET key value设置新值并返回旧值GETSET name "new-redis"“redis”(旧值)
INCR key对数值类型键原子自增1(非数值会报错)INCR count(原value=5)6
INCRBY key increment原子自增指定数值INCRBY count 3(原=6)9
DECR key / DECRBY key decrement原子自减1 / 自减指定数值DECR count(原=9)8
APPEND key value追加字符串到原值末尾APPEND name "db"(原=“redis”)7(新长度)
STRLEN key获取字符串长度STRLEN name(值为"redisdb")7
SUBSTR key start end截取字符串(start/end为索引,负数表示倒数)SUBSTR name 0 2(值为"redisdb")“red”
SETNX key value仅当键不存在时设置(等价于SET key value NXSETNX lock "1"1(成功)/ 0(失败)
SETEX key seconds value设置键值并指定过期时间(等价于SET key value EX secondsSETEX temp 60 "data"OK

二、Hash(哈希)命令

Hash 用于存储“字段-值”对集合,适合结构化数据。

命令语法功能描述示例返回值/效果示例
HSET key field value [field2 value2 ...]设置哈希表的字段值(支持批量)HSET user:1 name "tom" age 202(成功设置的字段数)
HGET key field获取哈希表中指定字段的值HGET user:1 name“tom”
HMGET key field1 [field2 ...]批量获取多个字段的值HMGET user:1 name age[“tom”, “20”]
HGETALL key获取哈希表中所有字段和值(大哈希慎用)HGETALL user:1[“name”,“tom”,“age”,“20”]
HDEL key field1 [field2 ...]删除哈希表中的字段HDEL user:1 age1(成功删除的字段数)
HLEN key获取哈希表的字段总数HLEN user:1(剩余name字段)1
HEXISTS key field判断字段是否存在于哈希表中HEXISTS user:1 name1(存在)/ 0(不存在)
HKEYS key获取哈希表中所有字段名HKEYS user:1[“name”]
HVALS key获取哈希表中所有字段值HVALS user:1[“tom”]
HINCRBY key field increment对哈希表中字段的数值原子自增(仅支持整数)HINCRBY user:1 age 5(原=20)25

三、List(列表)命令

List 是有序可重复的元素集合,支持两端操作。

命令语法功能描述示例返回值/效果示例
LPUSH key element [element2 ...]从列表左侧(头部)插入一个或多个元素LPUSH fruits "apple" "banana"2(列表长度)
RPUSH key element [element2 ...]从列表右侧(尾部)插入一个或多个元素RPUSH fruits "orange"3(列表长度)
LPOP key从列表左侧弹出元素(删除并返回)LPOP fruits“banana”
RPOP key从列表右侧弹出元素RPOP fruits“orange”
LRANGE key start end获取列表中索引从startend的元素(end=-1表示最后一个)LRANGE fruits 0 -1(剩余[“apple”])[“apple”]
LLEN key获取列表长度LLEN fruits1
LREM key count value从列表中删除count个值为value的元素(count>0从左,<0从右,=0全删)LREM fruits 1 "apple"1(删除数量)
LSET key index value设置列表中指定索引的元素值(索引越界报错)LSET fruits 0 "grape"OK
LTRIM key start end截取列表,只保留startend的元素(删除其他元素)LTRIM fruits 0 0(保留首元素)OK
BLPOP key [key2 ...] timeout阻塞式从左侧弹出元素(列表为空时等待timeout秒,0表示永久)BLPOP fruits 10若超时返回nil,否则返回[key, value]
BRPOP key [key2 ...] timeout阻塞式从右侧弹出元素BRPOP fruits 10同上

四、Set(集合)命令

Set 是无序不可重复的元素集合,支持集合运算。

命令语法功能描述示例返回值/效果示例
SADD key member [member2 ...]向集合中添加元素(重复元素自动忽略)SADD tags "java" "redis"2(成功添加的元素数)
SMEMBERS key获取集合中所有元素(大集合慎用)SMEMBERS tags[“java”, “redis”]
SISMEMBER key member判断元素是否在集合中SISMEMBER tags "java"1(存在)/ 0(不存在)
SREM key member [member2 ...]从集合中删除元素SREM tags "java"1(删除数量)
SCARD key获取集合元素总数SCARD tags(剩余[“redis”])1
SPOP key [count]随机删除并返回集合中的count个元素(默认1个)SPOP tags 1“redis”
SRANDMEMBER key [count]随机返回集合中的count个元素(不删除)SRANDMEMBER tags 1(若有元素)“redis”
SINTER key1 [key2 ...]求多个集合的交集(共同元素)SADD set1 1 2 3SADD set2 2 3 4SINTER set1 set2[2, 3]
SUNION key1 [key2 ...]求多个集合的并集(所有元素去重)SUNION set1 set2[1, 2, 3, 4]
SDIFF key1 [key2 ...]求集合1与其他集合的差集(只在1中存在的元素)SDIFF set1 set2[1]
SINTERSTORE dest key1 [key2 ...]将交集结果存储到dest集合SINTERSTORE inter set1 set22(交集元素数)

五、ZSet(有序集合)命令

ZSet 是按“分数”排序的无序不可重复集合。

命令语法功能描述示例返回值/效果示例
ZADD key score member [score2 member2 ...]向有序集合添加元素(指定分数,重复元素更新分数)ZADD rank 90 "alice" 85 "bob"2(成功添加的元素数)
ZRANGE key start end [WITHSCORES]按分数升序返回索引startend的元素(WITHSCORES带分数)ZRANGE rank 0 -1 WITHSCORES[“bob”, “85”, “alice”, “90”]
ZREVRANGE key start end [WITHSCORES]按分数降序返回元素ZREVRANGE rank 0 -1[“alice”, “bob”]
ZSCORE key member获取元素的分数ZSCORE rank "alice"“90”
ZINCRBY key increment member为元素的分数原子增减increment(支持负数)ZINCRBY rank 5 "alice"“95”
ZREM key member [member2 ...]从有序集合中删除元素ZREM rank "bob"1(删除数量)
ZCARD key获取有序集合元素总数ZCARD rank(剩余alice)1
ZRANK key member返回元素的升序排名(从0开始)ZRANK rank "alice"(分数95)0
ZREVRANK key member返回元素的降序排名ZREVRANK rank "alice"0
ZRANGEBYSCORE key min max [LIMIT offset count]按分数范围返回元素((min表示不包含,+inf表示正无穷)ZRANGEBYSCORE rank 80 100[“alice”]
ZCOUNT key min max统计分数在minmax之间的元素数ZCOUNT rank 80 1001

六、HyperLogLog 命令

HyperLogLog 用于高效基数统计(不重复元素个数)。

命令语法功能描述示例返回值/效果示例
PFADD key element [element2 ...]向HyperLogLog添加元素PFADD uv:20240501 "user1" "user2"1(至少添加1个新元素)/ 0
PFCOUNT key [key2 ...]统计基数(不重复元素个数)PFCOUNT uv:202405012
PFMERGE destkey key1 [key2 ...]合并多个HyperLogLog到destkeyPFMERGE uv:202405 uv:20240501 uv:20240502OK

七、Geo(地理信息)命令

Geo 用于存储经纬度并支持地理查询。

命令语法功能描述示例返回值/效果示例
GEOADD key longitude latitude member [longitude2 latitude2 member2 ...]添加地理坐标(经度、纬度、地点名)GEOADD cities 116.4074 39.9042 "beijing" 121.4737 31.2304 "shanghai"2(添加的地点数)
GEODIST key member1 member2 [unit]计算两个地点的距离(单位:m/km/mi/ft,默认m)GEODIST cities beijing shanghai km“1318.3821”(公里)
GEOPOS key member [member2 ...]获取地点的经纬度GEOPOS cities beijing[[116.40740096569061, 39.90420249027864]]
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [COUNT count]查找指定经纬度半径内的地点(WITHCOORD带坐标,WITHDIST带距离,COUNT限制数量)GEORADIUS cities 116.4 39.9 100 km COUNT 1符合条件的地点列表
GEORADIUSBYMEMBER key member radius unit ...以指定地点为中心查找半径内的地点(参数同GEORADIUS)GEORADIUSBYMEMBER cities beijing 100 km北京周边100公里内的地点

八、BitMap(位图)命令

BitMap 以位为单位存储状态(0/1)。

命令语法功能描述示例返回值/效果示例
SETBIT key offset value设置第offset位的值(0或1,offset从0开始)SETBIT sign:user1 0 1(第0位设为1)0(原位置的值)
GETBIT key offset获取第offset位的值GETBIT sign:user1 01
BITCOUNT key [start end]统计位值为1的数量(start/end为字节索引,默认全量)BITCOUNT sign:user11
BITOP operation destkey key1 [key2 ...]对多个位图执行位运算(AND/OR/XOR/NOT),结果存到destkeyBITOP OR sign:all sign:user1 sign:user2运算后结果的字节数
BITPOS key value [start] [end]查找第一个值为value(0或1)的位位置BITPOS sign:user1 10

九、通用命令(适用于所有数据结构)

命令语法功能描述示例返回值/效果示例
KEYS pattern查找匹配pattern的所有键(生产环境慎用,会阻塞)KEYS user:*[“user:1”, “user:2”]
EXISTS key [key2 ...]判断键是否存在EXISTS name1(存在)/ 0(不存在)
DEL key [key2 ...]删除键DEL name1(删除的键数)
EXPIRE key seconds设置键的过期时间(秒)EXPIRE name 601(成功)/ 0(键不存在)
PEXPIRE key milliseconds设置过期时间(毫秒)PEXPIRE name 60000同上
TTL key查看键的剩余过期时间(秒,-1=永不过期,-2=已过期)TTL name50(剩余50秒)
PTTL key查看剩余过期时间(毫秒)PTTL name50000
PERSIST key移除键的过期时间(设为永不过期)PERSIST name1(成功)/ 0(键不存在或无过期)
TYPE key查看键的数据结构类型TYPE name“string”
RENAME key newkey重命名键(若newkey存在则覆盖)RENAME name usernameOK
SCAN cursor [MATCH pattern] [COUNT count]渐进式遍历键(替代KEYS,非阻塞)SCAN 0 MATCH user:* COUNT 10[新cursor, 键列表]

使用说明

  1. 命令大小写:Redis命令不区分大小写(如SETset等效),但键和值区分大小写。
  2. 性能注意:标记“慎用”的命令(如HGETALLSMEMBERS)在数据量大时会阻塞Redis,建议用渐进式命令(如HSCANSSCAN)替代。
  3. 版本差异:部分命令在Redis不同版本中有细微差异(如GEO命令在3.2+支持),建议结合官方文档确认。

如需某类命令的详细使用场景或性能优化建议,可以进一步说明。

http://www.dtcms.com/a/462967.html

相关文章:

  • 智能网站建设模板售后黔西南建设厅网站
  • 给个网站2022年手机上能用的二级学院网站建设整改方案
  • 俄语网站建设注意事项网站建设技术员
  • 第8章:扩展边界:技术之外的视野(4)
  • 雨灿网站建设海报设计说明200字
  • 最便宜的重庆网站建设姚家园做网站
  • 【学习篇】Redis 分布式锁
  • Win文件批量格式转换为UTF8 chardet
  • 常熟公司网站建设电话百度seo怎么把关键词优化上去
  • C++ 运算符全面详解
  • 架构师论文《论大数据平台的数据质量保障测试体系》
  • MySQL执行过程
  • 手机网站建站平台三五互联网站管理登录地址
  • 怎么做付款链接网站wordpress 登录
  • 洛阳网站建设启辰网络seo排名软件哪个好
  • 表情生成器在线制作gif凌源网站优化
  • 崇川网站建设网站开发实用技术第2版
  • 电子商务网站开发实例管理员网站
  • 网站开发公司流程wordpress邮箱用不了
  • 前端网站建设邢台做移动网站
  • 企业网站模板中文wordpress分页美化
  • 效果图网站密码破解wordpress 4.8.3
  • 【agent】AI 数字人构建3:sherpa-onnx 语音转文本TMSpeech 构建和使用
  • 制作网站需要多少时间手机模拟装修app
  • LWIP IP 报文输入流程详解
  • 照明回路配线长度-连续测量更方便
  • 自学网站开发哪个网站好域名备案和网站备案区别
  • 政务门户网站建设思想河南seo推广公司
  • 上海网站分站建设福建省建筑信息平台
  • 控制板与上位机通讯协议