前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis常用数据类型与基本命令指北

Redis常用数据类型与基本命令指北

作者头像
Andromeda
发布2024-01-05 09:36:04
1550
发布2024-01-05 09:36:04
举报
文章被收录于专栏:Andromeda的专栏Andromeda的专栏

字符串

  • 优点:简单、灵活,可以存储任意类型的数据,支持丰富的字符串操作命令。
  • 应用场景:缓存、计数器、分布式锁、消息队列等。
  • 底层数据结构:简单动态字符串(SDS)。

SET:设置指定键的字符串值。

代码语言:javascript
复制
SET key value

GET:获取指定键的字符串值。

代码语言:javascript
复制
GET key

DEL:删除指定键及其关联的字符串值。

代码语言:javascript
复制
DEL key [key ...]

INCR:将指定键的值递增 1。

代码语言:javascript
复制
INCR key

DECR:将指定键的值递减 1。

代码语言:javascript
复制
DECR key

INCRBY:将指定键的值增加指定的整数[浮点数]增量。

代码语言:javascript
复制
INCRBY[FLOAT] key increment

DECRBY:将指定键的值减去指定的整数减量。

代码语言:javascript
复制
DECRBY key decrement

APPEND:将指定值追加到指定键的字符串值的末尾。

代码语言:javascript
复制
APPEND key value

STRLEN:获取指定键的字符串值的长度。

代码语言:javascript
复制
STRLEN key

SETEX:设置指定键的字符串值,并指定过期时间(以秒为单位)。

代码语言:javascript
复制
SETEX key seconds value

位运算

GETSET:设置指定键的字符串值,并获取之前的值。

代码语言:javascript
复制
GETSET key value

SETBIT:设置指定位置的位值(0 或 1)。

代码语言:javascript
复制
SETBIT key offset value

GETBIT:获取指定位置的位值。

代码语言:javascript
复制
GETBIT key offset

BITCOUNT:计算指定键的字符串值中置为 1 的位的数量。

代码语言:javascript
复制
BITCOUNT key [start end]

BITOP:对多个键进行位运算,并将结果存储到指定的键中。

代码语言:javascript
复制
BITOP operation destkey key [key ...]

- operation 可以是 AND(按位与)、OR(按位或)、XOR(按位异或)或 NOT(按位取反)。
- destkey 是存储结果的键。
- key 是参与位运算的键。

BITFIELD:通过位域操作对指定键的字符串值进行复杂的位级操作。

代码语言:javascript
复制
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]

- GET:获取指定类型和偏移量的位域值。
- SET:设置指定类型和偏移量的位域值。
- INCRBY:将指定类型和偏移量的位域值增加指定的增量。
- OVERFLOW:指定位域操作的溢出策略。

散列类型

要使用字符串类型存储一个对象,那么需要将对象序列化成一个字符串来表达,但是这样无法提供对单个字段的操作,每次都需要将对象完整取出,这样十分消耗资源,同时字符串无法提供对单个字段的原子操作,容易产生条件竞争,因此可以使用散列类型存储。 Redis 的散列类型与关系型数据库的表的字段不同,对每一个对象可以单独设置其字段。

  • 优点:适合存储对象,可以方便地对对象的字段进行读写操作。
  • 应用场景:存储对象、缓存、存储用户信息等。
  • 底层数据结构:哈希表(Hash Table)。

HSET:设置散列中指定字段的值。

代码语言:javascript
复制
HSET key field value

HGET:获取散列中指定字段的值。

代码语言:javascript
复制
HGET key field

HDEL:删除散列中一个或多个字段。

代码语言:javascript
复制
HDEL key field [field ...]

HEXISTS:检查散列中是否存在指定字段。

代码语言:javascript
复制
HEXISTS key field

HSETNX:字段不存在时赋值,如果不存在返回 1,否则返回 0

代码语言:javascript
复制
HSETNX key field value

HLEN:获取散列中字段的数量。

代码语言:javascript
复制
HLEN key

HKEYS:获取散列中所有字段的列表。

代码语言:javascript
复制
HKEYS key

HVALS:获取散列中所有值的列表。

代码语言:javascript
复制
HVALS key

HGETALL:获取散列中所有字段和值的列表。

代码语言:javascript
复制
HGETALL key

HMSET:同时设置散列中多个字段的值。

代码语言:javascript
复制
HMSET key field1 value1 [field2 value2 ...]

HMGET:获取散列中多个字段的值。

代码语言:javascript
复制
HMGET key field1 [field2 ...]

HINCRBY 增加数字

代码语言:javascript
复制
HINCRBY key field increment

列表类型

Redis 提供了一组用于操作列表(list)数据类型的命令。列表是一个有序的元素集合,可以在列表的两端进行插入、删除和访问操作。

  • 优点:有序、可重复,支持快速的头尾插入、删除操作。
  • 应用场景:消息队列、发布/订阅、最新消息列表等。
  • 底层数据结构:双向链表(Linked List)和压缩列表(ZipList)。

以下是一些常用的 Redis 列表类型的命令:

LPUSH:将一个或多个值插入到列表的左侧(头部)。

代码语言:javascript
复制
LPUSH key value [value ...]

RPUSH:将一个或多个值插入到列表的右侧(尾部)。

代码语言:javascript
复制
RPUSH key value [value ...]

LPOP:移除并获取列表的左侧(头部)元素。

代码语言:javascript
复制
LPOP key

RPOP:移除并获取列表的右侧(尾部)元素。

代码语言:javascript
复制
RPOP key

LINDEX:获取列表中指定索引位置的元素值。

代码语言:javascript
复制
LINDEX key index

LLEN:获取列表的长度(元素个数)。

代码语言:javascript
复制
LLEN key

LRANGE:获取列表中指定范围的元素(包含 stop)。支持负索引,-1 表示倒数第一个元素,-2 表示倒数第二个。

代码语言:javascript
复制
LRANGE key start stop

LTRIM 用于修剪(Trim)列表的命令。它用于保留列表中指定范围内的元素,而将其它元素删除。

代码语言:javascript
复制
LTRIM key start stop

LREM:从列表中删除指定数量的匹配元素。count 为负数则取绝对值,为 0 则删除所有。

代码语言:javascript
复制
LREM key count value

LINSERT:在列表中指定元素的前面或后面插入一个新元素。

代码语言:javascript
复制
LINSERT key BEFORE|AFTER pivot value

LSET:设置列表中指定索引位置的元素值。

代码语言:javascript
复制
LSET key indexvalue

RPOPLPUSH 从一个列表的右侧(尾部)弹出一个元素,并将该元素推入到另一个列表的左侧(头部)。

代码语言:javascript
复制
RPOPLPUSH source destination

集合类型

Redis 提供了一种称为集合(Set)的数据类型,它是一个无序、唯一的元素集合,底层数据结构使用的是哈希表(Hash Table)。Redis 的集合提供了高效的成员检查和集合操作,例如并集、交集和差集等。

  • 优点:无序、不重复,支持高效的成员判断和集合运算。
  • 应用场景:标签系统、好友关系、共同兴趣等。
  • 底层数据结构:哈希表(Hash Table)和跳跃表(Skip List)。

以下是一些常用的 Redis 集合类型的命令:

SADD:将一个或多个成员添加到集合中。

代码语言:javascript
复制
SADD key member [member ...]

SREM:从集合中移除一个或多个成员。

代码语言:javascript
复制
SREM key member [member ...]

SMEMBERS:获取集合中的所有成员。

代码语言:javascript
复制
SMEMBERS key

SISMEMBER:检查成员是否存在于集合中。

代码语言:javascript
复制
SISMEMBER key member

SCARD:获取集合中的成员数量。

代码语言:javascript
复制
SCARD key

SUNION:计算多个集合的并集。计算顺序,比如 SUNION A B C 是先计算 A 和 B 的并集,再计算结果和 C 的并集。

代码语言:javascript
复制
SUNION key [key ...]

SINTER:计算多个集合的交集。

代码语言:javascript
复制
SINTER key [key ...]

SDIFF:计算多个集合的差集。

代码语言:javascript
复制
SDIFF key [key ...]

还可以将集合运算的结果存储

代码语言:javascript
复制
SUNIONSTORE destination key [key ...]
SINTERSTORE destination key [key ...]
SDIFFSTORE destination key1 key2

SRANDMEMBER:随机获取集合中的一个或多个成员。

代码语言:javascript
复制
SRANDMEMBER key [count]

SPOP 用于随机移除并返回集合中一个或多个随机成员。

代码语言:javascript
复制
SPOP key [count]

有序集合

在 Redis 中,有序集合(Sorted Set)的底层数据结构是使用跳跃表(Skip List)和哈希表(Hash Table)的结合。

跳跃表是一种有序数据结构,类似于链表的结构,但通过添加多级索引(层级)来加快查找速度。每个节点都包含一个成员和对应的分数值,并通过指针连接到下一个节点和下一层的节点。通过跳跃表的层级结构,可以在平均时间复杂度为 O(logN)的情况下进行快速的范围查询、插入和删除操作。

然而,跳跃表并不适合高效地执行诸如按照成员进行查找的操作,因此在 Redis 中,为了提供更高效的成员查找功能,有序集合还使用了一个辅助的数据结构——哈希表。

有序集合常用于需要根据某个值进行排序和检索的场景。

  • 优点:有序、不重复,可以对成员进行排序和范围查找,支持高效的排名和分数计算。
  • 应用场景:排行榜、热门文章、按权重筛选数据等。
  • 底层数据结构:跳跃表(Skip List)和哈希表(Hash Table)。

ZADD:向有序集合中添加一个或多个成员,每个成员都有一个分数值。

代码语言:javascript
复制
ZADD key score1 member1 [score2 member2 ...]

ZREM:从有序集合中移除一个或多个成员。

代码语言:javascript
复制
ZREM key member1 [member2 ...]

ZSCORE:获取有序集合中指定成员的分数。

代码语言:javascript
复制
ZSCORE key member

ZRANK:获取有序集合中指定成员的排名(按照分数从低到高排序)。

代码语言:javascript
复制
ZRANK key member

ZREVRANK:获取有序集合中指定成员的排名(按照分数从高到低排序)。

代码语言:javascript
复制
ZREVRANK key member

ZRANGE:按照排名范围获取有序集合中的成员(按照分数从低到高排序)。

代码语言:javascript
复制
ZRANGE key start stop [WITHSCORES]

ZREVRANGE:按照排名范围获取有序集合中的成员(按照分数从高到低排序)。

代码语言:javascript
复制
ZREVRANGE key start stop [WITHSCORES]

ZRANGEBYSCORE:按照分数范围获取有序集合中的成员。

代码语言:javascript
复制
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

ZREMRANGEBYRANK:根据成员的排名范围来移除有序集合中的成员。

代码语言:javascript
复制
ZREMRANGEBYRANK key start stop

ZREMRANGEBYSCORE:用于根据成员的分数范围来移除有序集合中的成员。

代码语言:javascript
复制
ZREMRANGEBYSCORE key min max

ZCOUNT:计算有序集合中指定分数范围内的成员数量。

代码语言:javascript
复制
ZCOUNT key min max

ZINCRBY:增加有序集合中指定成员的分数。

代码语言:javascript
复制
ZINCRBY key increment member

ZARD:获取集合中元素数量。

代码语言:javascript
复制
ZCARD key

ZINTERSTORE:计算一个或多个有序集合的交集,并将结果存储到一个新的有序集合中。

代码语言:javascript
复制
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

ZUNIONSTORE:计算一个或多个有序集合的并集,并将结果存储到一个新的有序集合中。

代码语言:javascript
复制
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

ZDIFFSTORE:计算一个有序集合与一个或多个有序集合的差集,并将结果存储到一个新的有序集合中。

代码语言:javascript
复制
ZDIFFSTORE destination numkeys key [key ...]

这几个集合运算命令的参数解释:

  • destination:结果有序集合的键名。
  • numkeys:参与运算的有序集合数量。
  • key:参与运算的有序集合的键名。
  • WEIGHTS weight [weight ...](可选):指定每个有序集合的权重,用于进行加权运算。
  • AGGREGATE SUM|MIN|MAX(可选):指定集合运算的聚合方式。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字符串
  • 位运算
  • 散列类型
  • 列表类型
  • 集合类型
  • 有序集合
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档