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

2024-01-05 09:36:04 浏览数 (1)

字符串

  • 优点:简单、灵活,可以存储任意类型的数据,支持丰富的字符串操作命令。
  • 应用场景:缓存、计数器、分布式锁、消息队列等。
  • 底层数据结构:简单动态字符串(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(可选):指定集合运算的聚合方式。

0 人点赞