Redis:常用命令总结

打印 上一主题 下一主题

主题 843|帖子 843|积分 2531

目录
1 . 前置内容
1.1 基本全局命令
KEYS
 EXISTS 
DEL
 EXPIRE
 TTL
TYPE
1.2 数据结构和内部编码
2. String类型
SET
GET
MGET
MSET
INCR
INCRBY 
DECR
DECRBY
INCRBYFLOAT
命令小结​编辑
内部编码
3 . Hash 哈希类型 
HSET
HGET
HEXISTS
HDEL
HKEYS
HVALS
HGETALL
HMGET
HLEN
HINCRBY
HINCRBYFLOAT
命令小结 ​编辑
内部编码
4 . List列表
LPUSH
LPUSHX
LRANGE
LPOP
LINDEX
LLEN
命令小结​编辑
内部编码
5 . Set 集合
SADD
SMEMBERS
SISMEMBER
SCARD
SPOP
SMOVE
SREM
SINTER
SINTERSTORE
SUNION
SUNIONSTORE
SDIFF
SDIFFSTORE
命令小结 ​编辑
内部编码
6 . Zset 有序集合
ZADD
ZCARD
ZCOUNT
ZRANGE
ZREVRANGE
ZPOPMAX
ZPOPMIN
ZRANK
ZREVRANK
ZSCORE
ZREM
ZINCRBY
ZINTERSTORE
ZUNIONSTORE
命令小结​编辑
内部编码
7. 渐进式遍历
8. 数据库命令 


1 . 前置内容

1.1 基本全局命令

KEYS

语法
   KEYS pattern
  用于匹配所有符合模版条件的key
  


 EXISTS 

   EXISTS key [key ...] 
  判定某个 key 是否存在。
  上面我们添加了三个key 分别是 k1 k2 k3 我们用存在的key和不存在的key来进行测试,看看结果怎样 


DEL

   DEL  key [key ...] 
  删除指定的key
返回值: 删除掉key的个数

 EXPIRE

   EXPIRE key seconds
  为指定的 key 添加秒级的逾期时间(Time To Live TTL)
  


 TTL

   TTL key
  获取指定 key 的逾期时间,秒级。
  返回值:剩余逾期时间。-1 表现没有关联逾期时间,-2 表现 key 不存在。
  

TYPE

   TYPE key
  返回 key 对应的数据类型。
  
1.2 数据结构和内部编码

type 命令现实返回的就是当前键的数据结构类型,它们分别是:string(字符串)、list(列 表)、hash(哈希)、set(集合)、zset(有序集合),但这些只是 Redis 对外的数据结构,现实上 Redis 针对每种数据结构都有自己的底层内部编码实现,而且是多种实现,如许 Redis 会 在符合的场景选择符合的内部编码。


  • 字符串(String):Redis 使用简朴动态字符串(SDS)来存储字符串数据。SDS 是一种结构化的字符串表现,可以动态调解大小,而且可以在 O(1) 时间内获取字符串长度。
  • 列表(List):Redis 使用压缩列表(ziplist)或双向循环链表(linkedlist)来存储列表数据。压缩列表是一种紧凑的数据结构,可以在一定程度上节省内存空间。双向循环链表则提供了更好的性能,但会消耗更多的内存。
  • 哈希表(Hash):Redis 使用压缩列表或哈希表(hashtable)来存储哈希数据。压缩列表实用于小规模的哈希数据,而哈希表则实用于大规模的哈希数据。
  • 集合(Set):Redis 使用整数集合(intset)或哈希表来存储集合数据。整数集合实用于存储整数类型的数据,而哈希表实用于存储任意类型的数据。
  • 有序集合(Sorted Set):Redis 使用跳跃表(skiplist)和哈希表来存储有序集合数据。跳跃表提供了快速的查找和插入操纵,而哈希表则提供了快速的范围查询操纵。

2. String类型

SET

将 string 类型的 value 设置到 key 中。假如 key 之前存在,则覆盖,无论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。
  1. SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
复制代码


  • EX seconds⸺使用秒作为单位设置 key 的逾期时间。
  • PX milliseconds⸺使用毫秒作为单位设置 key 的逾期时间。
  • NX ⸺只在 key 不存在时才进行设置,即假如 key 之前已经存在,设置不执行。
  • XX ⸺只在 key 存在时才进行设置,即假如 key 之前不存在,设置不执行。 
GET

获取 key 对应的 value。假如 key 不存在,返回 nil。假如 value 的数据类型不是 string,会报错。
  1. GET key
复制代码
MGET

⼀次性获取多个 key 的值。假如对应的 key 不存在大概对应的数据类型不是 string,返回 nil。
  1. MGET key [key ...]
复制代码
MSET

⼀次性设置多个 key 的值。
  1. MSET key value [key value ...]
复制代码
INCR

将 key 对应的 string 表现的数字加1。假如 key 不存在,则视为 key 对应的 value 是 0。假如 key 对应的 string 不是⼀个整型大概范围超过了 64 位有符号整型,则报错。
  1. INCR key
复制代码
返回值:加1之后, key 的值。  
INCRBY 

将 key 中储存的数字加上指定的增量值。,假如 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
  1. INCRBY key incr_amount
复制代码
返回值:加上指定的增量值之后, key 的值。 
DECR

将 key 对应的 string 表现的数字减⼀。假如 key 不存在,则视为 key 对应的 value 是 0。
  1. DECR key
复制代码
DECRBY

将 key 对应的 string 表现的数字减去对应的值。假如 key 不存在,则视为 key 对应的 value 是 0。
  1. DECRBY key decr_amount
复制代码
INCRBYFLOAT

将 key 对应的 string 表现的浮点数加上对应的值。假如对应的值是负数,则视为减去对应的值。假如 key 不存在,则视为 key 对应的 value 是 0。假如 key 对应的不是 string,大概不是⼀个浮点数,则报 错。允许接纳科学计数法表现浮点数。
  1. INCRBYFLOAT KEY_NAME INCR_AMOUNT
复制代码

命令小结


内部编码

字符串类型的内部编码有 3 种:


  • int: 8 个字节的长整型。
  • embstr: 小于等于39个字节的字符串
  • raw: 大于等于39个字节的字符串


3 . Hash 哈希类型 

 
哈希类型中的映射关系通常称为 field-value,用于区分 Redis 团体的键值对(key-value),注意这里的 value 是指 field 对应的值,不是键(key)对应的值,请注意 value 在差异上下文的作用。
HSET

 设置 hash 中指定的字段(field)的值(value)。
  1. redis> HSET myhash field1 "Hello"
  2. (integer) 1
  3. redis> HGET myhash field1
  4. "Hello
复制代码
HGET

获取 hash 中指定字段的值。
  1. redis> HSET myhash field1 "foo"
  2. (integer) 1
  3. redis> HGET myhash field1
  4. "foo"
  5. redis> HGET myhash field2
  6. (nil)
复制代码
HEXISTS

判定 hash 中是否有指定的字段。
  1. redis> HSET myhash field1 "foo"
  2. (integer) 1
  3. redis> HEXISTS myhash field1
  4. (integer) 1
  5. redis> HEXISTS myhash field2
  6. (integer) 0
复制代码
HDEL

删除 hash 中指定的字段。
  1. redis> HSET myhash field1 "foo"
  2. (integer) 1
  3. redis> HDEL myhash field1
  4. (integer) 1
  5. redis> HDEL myhash field2
  6. (integer) 0
复制代码
HKEYS

获取 hash 中的所有字段。
  1. redis> HSET myhash field1 "Hello"
  2. (integer) 1
  3. redis> HSET myhash field2 "World"
  4. (integer) 1
  5. redis> HKEYS myhash
  6. 1) "field1"
  7. 2) "field2"
复制代码
HVALS

获取 hash 中的所有的值。
  1. redis> HSET myhash field1 "Hello"
  2. (integer) 1
  3. redis> HSET myhash field2 "World"
  4. (integer) 1
  5. redis> HVALS myhash
  6. 1) "Hello"
  7. 2) "World"
复制代码
HGETALL

获取 hash 中的所有字段以及对应的值。
  1. redis> HSET myhash field1 "Hello"
  2. (integer) 1
  3. redis> HSET myhash field2 "World"
  4. (integer) 1
  5. redis> HGETALL myhash
  6. 1) "field1"
  7. 2) "Hello"
  8. 3) "field2"
  9. 4) "World"
复制代码
HMGET

⼀次获取 hash 中多个字段的值
  1. redis> HSET myhash field1 "Hello"
  2. (integer) 1
  3. redis> HSET myhash field2 "World"
  4. (integer) 1
  5. redis> HMGET myhash field1 field2 nofield
  6. 1) "Hello"
  7. 2) "World"
  8. 3) (nil)
复制代码
HLEN

获取 hash 中的所有字段的个数。
  1. redis> HSET myhash field1 "Hello"
  2. (integer) 1
  3. redis> HSET myhash field2 "World"
  4. (integer) 1
  5. redis> HLEN myhash
  6. (integer) 2
复制代码
HINCRBY

 将 hash 中字段对应的数值添加指定的值。返回添加后hash的值
  1. redis> HSET myhash field 5
  2. (integer) 1
  3. redis> HINCRBY myhash field 1
  4. (integer) 6
  5. redis> HINCRBY myhash field -1
  6. (integer) 5
  7. redis> HINCRBY myhash field -10
  8. (integer) -5
复制代码
HINCRBYFLOAT

HINCRBY 的浮点数版本。
  1. redis> HSET mykey field 10.50
  2. (integer) 1
  3. redis> HINCRBYFLOAT mykey field 0.1
  4. "10.6"
  5. redis> HINCRBYFLOAT mykey field -5
  6. "5.6"
  7. redis> HSET mykey field 5.0e3
  8. (integer) 0
  9. redis> HINCRBYFLOAT mykey field 2.0e2
  10. "5200"
复制代码
命令小结 


内部编码

ziplist(压缩列表):当哈希类型元素个数小于 hash-max-ziplist-entries 配置(默认 512 个)、 同时所有值都小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使用 ziplist 作为哈 希的内部实现,ziplist 使用更加紧凑的结构实现多个元素的一连存储,所以在节省内存方面比 hashtable 更加优秀。
hashtable(哈希表):当哈希类型无法满足 ziplist 的条件时,Redis 会使用hashtable 作为哈希 的内部实现,因为此时 ziplist 的读写服从会下降,而hashtable 的读写时间复杂度为 O(1)。

4 . List列表

列表(List)是一种简朴的、可变长度的字符串序列,支持在两头进行插入和删除操纵。

LPUSH

将一个大概多个元素从左侧放入(头插)到 list 中
  1. redis> LPUSH mylist "world"
  2. (integer) 1
  3. redis> LPUSH mylist "hello"
  4. (integer) 2
  5. redis> LRANGE mylist 0 -1
  6. 1) "hello"
  7. 2) "world"
复制代码
LPUSHX

在 key 存在时,将一个大概多个元素从左侧放入(头插)到 list 中。不存在,直接返回
  1. redis> LPUSH mylist "World"
  2. (integer) 1
  3. redis> LPUSHX mylist "Hello"
  4. (integer) 2
  5. redis> LPUSHX myotherlist "Hello"
  6. (integer) 0
  7. redis> LRANGE mylist 0 -1
  8. 1) "Hello"
  9. 2) "World"
  10. redis> LRANGE myotherlist 0 -1
  11. (empty array)
复制代码
LRANGE

获取从 start 到 end 区间的所有元素,左闭右闭
  1. redis> RPUSH mylist "one"
  2. (integer) 1
  3. redis> RPUSH mylist "two"
  4. (integer) 2
  5. redis> RPUSH mylist "three"
  6. (integer) 3
  7. redis> LRANGE mylist 0 0
  8. 1) "one"
  9. redis> LRANGE mylist -3 2
  10. 1) "one"
  11. 2) "two"
  12. 3) "three"
  13. redis> LRANGE mylist -100 100
  14. 1) "one"
  15. 2) "two"
  16. 3) "three"
  17. redis> LRANGE mylist 5 10
  18. (empty array)
复制代码
LPOP

从 list 左侧取出元素(即头删)。
  1. redis> RPUSH mylist "one" "two" "three" "four" "five"
  2. (integer) 5
  3. redis> LPOP mylist
  4. "one"
  5. redis> LPOP mylist
  6. "two"
  7. redis> LPOP mylist
  8. "three"
  9. redis> LRANGE mylist 0 -1
  10. 1) "four"
  11. 2) "five"
复制代码
LINDEX

获取从左数第 index 位置的元素
  1. redis> LPUSH mylist "World"
  2. (integer) 1
  3. redis> LPUSH mylist "Hello"
  4. (integer) 2
  5. redis> LINDEX mylist 0
  6. "Hello"
  7. redis> LINDEX mylist -1
  8. "World"
  9. redis> LINDEX mylist 3
  10. (nil)
复制代码
LLEN

获取 list ⻓度。
  1. redis> LPUSH mylist "World"
  2. (integer) 1
  3. redis> LPUSH mylist "Hello"
  4. (integer) 2
  5. redis> LLEN mylist
  6. (integer) 2
复制代码
命令小结


内部编码

Ziplist:


  • 当列表的元素数量较少且每个元素的长度较短时,Redis会使用Ziplist编码。
  • Ziplist是一种紧凑的内存表现方式,可以有用地存储小型列表。
  • 优点:节省内存,恰当小型列表。
  • 缺点:在进行插入和删除操纵时,性能较低。
Linked List:


  • 当列表的元素数量增长到一定阈值时,Redis会将其转换为双向链表。
  • 链表允许在两头快速插入和删除操纵。
  • 优点:支持快速的插入和删除操纵。
  • 缺点:相对于Ziplist,内存占用更高。
Quicklist:


  • Redis 3.2引入了Quicklist作为列表的默认实现。
  • Quicklist结合了Ziplist和链表的优点,使用多个Ziplist块来存储元素,并通过链表毗连这些块。
  • 优点:在内存使用和性能之间取得了精良的均衡,恰当大多数使用场景。

5 . Set 集合

集合类型也是保存多个字符串类型的元素的,但和列表类型差异的是,集合中
1)  元素之间是无序的
2)元素不允许重复
一个集合中最多可以存储 
个元素。Redis 除了支持集合内的增删查改操纵,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在现实开发中办理许多问题。

SADD

将⼀个大概多个元素添加到 set 中。注意,重复的元素无法添加到 set 中
  1. redis> SADD myset "Hello"
  2. (integer) 1
  3. redis> SADD myset "World"
  4. (integer) 1
  5. redis> SADD myset "World"
  6. (integer) 0
  7. redis> SMEMBERS myset
  8. 1) "Hello"
  9. 2) "World"
复制代码
SMEMBERS

获取⼀个 set 中的所有元素,注意,元素间的顺序是无序的。
  1. redis> SADD myset "Hello"
  2. (integer) 1
  3. redis> SADD myset "World"
  4. (integer) 1
  5. redis> SMEMBERS myset
  6. 1) "Hello"
  7. 2) "World"
复制代码
SISMEMBER

判定⼀个元素在不在 set 中。
  1. redis> SADD myset "one"
  2. (integer) 1
  3. redis> SISMEMBER myset "one"
  4. (integer) 1
  5. redis> SISMEMBER myset "two"
  6. (integer) 0
复制代码
SCARD

获取⼀个 set 的基数(cardinality),即 set 中的元素个数。
  1. redis> SADD myset "Hello"
  2. (integer) 1
  3. redis> SADD myset "World"
  4. (integer) 1
  5. redis> SCARD myset
  6. (integer) 2
复制代码
SPOP

Spop 命令用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素.

SMOVE

将一个元素从源 set 取出并放入目标 set 中。
  1. redis> SADD myset "one"
  2. (integer) 1
  3. redis> SADD myset "two"
  4. (integer) 1
  5. redis> SADD myotherset "three"
  6. (integer) 1
  7. redis> SMOVE myset myotherset "two"
  8. (integer) 1
  9. redis> SMEMBERS myset
  10. 1) "one"
  11. redis> SMEMBERS myotherset
  12. 1) "three"
  13. 2) "two"
复制代码
SREM

将指定的元素从 set 中删除。
  1. redis> SADD myset "one"
  2. (integer) 1
  3. redis> SADD myset "two"
  4. (integer) 1
  5. redis> SADD myset "three"
  6. (integer) 1
  7. redis> SREM myset "one"
  8. (integer) 1
  9. redis> SREM myset "four"
  10. (integer) 0
  11. redis> SMEMBERS myset
  12. 1) "three"
  13. 2) "two"
复制代码
SINTER

获取给定 set 的交会合的元素。
  1. redis> SADD key1 "a"
  2. (integer) 1
  3. redis> SADD key1 "b"
  4. (integer) 1
  5. redis> SADD key1 "c"
  6. (integer) 1
  7. redis> SADD key2 "c"
  8. (integer) 1
  9. redis> SADD key2 "d"
  10. (integer) 1
  11. redis> SADD key2 "e"
  12. (integer) 1
  13. redis> SINTER key1 key2
  14. 1) "c"
复制代码
SINTERSTORE

获取给定 set 的交会合的元素并保存到目标 set 中。
  1. SINTERSTORE destination key [key ...]
复制代码
  1. redis> SADD key1 "a"
  2. (integer) 1
  3. redis> SADD key1 "b"
  4. (integer) 1
  5. redis> SADD key1 "c"
  6. (integer) 1
  7. redis> SADD key2 "c"
  8. (integer) 1
  9. redis> SADD key2 "d"
  10. (integer) 1
  11. redis> SADD key2 "e"
  12. (integer) 1
  13. redis> SINTERSTORE key key1 key2
  14. (integer) 1
  15. redis> SMEMBERS key
  16. 1) "c"
复制代码
SUNION

获取给定 set 的并会合的元素
  1. redis> SADD key1 "a"
  2. (integer) 1
  3. redis> SADD key1 "b"
  4. (integer) 1
  5. redis> SADD key1 "c"
  6. (integer) 1
  7. redis> SADD key2 "c"
  8. (integer) 1
  9. redis> SADD key2 "d"
  10. (integer) 1
  11. redis> SADD key2 "e"
  12. (integer) 1
  13. redis> SUNION key1 key2
  14. 1) "a"
  15. 2) "c"
  16. 3) "e"
  17. 4) "b"
  18. 5) "d"
复制代码
SUNIONSTORE

获取给定 set 的并会合的元素并保存到目标 set 中。
  1. SUNIONSTORE destination key [key ...]
复制代码
  1. redis> SADD key1 "a"
  2. (integer) 1
  3. redis> SADD key1 "b"
  4. (integer) 1
  5. redis> SADD key1 "c"
  6. (integer) 1
  7. redis> SADD key2 "c"
  8. (integer) 1
  9. redis> SADD key2 "d"
  10. (integer) 1
  11. redis> SADD key2 "e"
  12. (integer) 1
  13. redis> SUNIONSTORE key key1 key2
  14. (integer) 5
  15. redis> SMEMBERS key
  16. 1) "a"
  17. 2) "c"
  18. 3) "e"
  19. 4) "b"
  20. 5) "d"
复制代码
SDIFF

获取给定 set 的差会合的元素
  1. SDIFF key [key ...]
复制代码
SDIFFSTORE

获取给定 set 的差会合的元素并保存到目标 set 中
  1. SDIFFSTORE destination key [key ...]
复制代码
命令小结 


内部编码

集合类型的内部编码有两种:
intset(整数集合):当集合中的元素都是整数而且元素的个数小于 set-max-intset-entries 配置 (默认 512 个)时,Redis 会选用intset 来作为集合的内部实现,从而淘汰内存的使用。• hashtable(哈希表):当集合类型无法满足 intset 的条件时,Redis 会使用 hashtable 作为集合 的内部实现。

6 . Zset 有序集合

有序集合相对于字符串、列表、哈希、集合来说会有⼀些生疏。它保存了集合不能有重复成员的 特点,但与集合差异的是,有序集合中的每个元素都有⼀个唯⼀的浮点类型的分数(score)与之关联,着使得有序集合中的元素是可以维护有序性的,但这个有序不是用下标作为排序依据而是用这个分数。

ZADD

添加大概更新指定的元素以及关联的分数到 zset 中,分数应该符合 double 类型,+inf/-inf 作为正负极限也是合法的。
  1. ZADD key score1 value1[score2 value2...]
复制代码
ZCARD

获取⼀个 zset 的基数(cardinality),即 zset 中的元素个数。
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZCARD myzset
  6. (integer) 2
复制代码
ZCOUNT

返回分数在 min 和 max 之间的元素个数,默认情况下,min 和 max 都是闭区间的
  1. ZCOUNT key min max
复制代码
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZADD myzset 3 "three"
  6. (integer) 1
  7. redis> ZCOUNT myzset -inf +inf
  8. (integer) 3
  9. redis> ZCOUNT myzset 1 3
  10. (integer) 3
  11. redis> ZCOUNT myzset (1 3
  12. (integer) 2
  13. redis> ZCOUNT myzset (1 (3
  14. (integer) 1
复制代码
ZRANGE

返回指定区间⾥的元素,分数按照升序。带上 WITHSCORES 可以把分数也返回。
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZADD myzset 3 "three"
  6. (integer) 1
  7. redis> ZRANGE myzset 0 -1 WITHSCORES
  8. 1) "one"
  9. 2) "1"
  10. 3) "two"
  11. 4) "2"
  12. 5) "three"
  13. 6) "3"
  14. redis> ZRANGE myzset 0 -1
  15. 1) "one"
  16. 2) "two"
  17. 3) "three"
  18. redis> ZRANGE myzset 2 3
  19. 1) "three"
  20. redis> ZRANGE myzset -2 -1
  21. 1) "two"
  22. 2) "three"
复制代码
ZREVRANGE

返回指定区间里的元素,分数按照降序。带上 WITHSCORES 可以把分数也返回。
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZADD myzset 3 "three"
  6. (integer) 1
  7. redis> ZREVRANGE myzset 0 -1 WITHSCORES
  8. 1) "three"
  9. 2) "3"
  10. 3) "two"
  11. 4) "2"
  12. 5) "one"
  13. 6) "1"
  14. redis> ZREVRANGE myzset 0 -1
  15. 1) "three"
  16. 2) "two"
  17. 3) "one"
  18. redis> ZREVRANGE myzset 2 3
  19. 1) "one"
  20. redis> ZREVRANGE myzset -2 -1
  21. 1) "two"
  22. 2) "one"
复制代码

ZPOPMAX

删除并返回分数最高的 count 个元素
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZADD myzset 3 "three"
  6. (integer) 1
  7. redis> ZPOPMAX myzset
  8. 1) "three"
  9. 2) "3"
复制代码
ZPOPMIN

删除并返回分数最低的 count 个元素
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZADD myzset 3 "three"
  6. (integer) 1
  7. redis> ZPOPMIN myzset
  8. 1) "one"
  9. 2) "1"
复制代码

ZRANK

返回指定元素的排名,升序。
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZADD myzset 3 "three"
  6. (integer) 1
  7. redis> ZRANK myzset "three"
  8. (integer) 2
  9. redis> ZRANK myzset "four"
  10. (nil)
复制代码
ZREVRANK

返回指定元素的排名,降序。
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZADD myzset 3 "three"
  6. (integer) 1
  7. redis> ZREVRANK myzset "one"
  8. (integer) 2
  9. redis> ZREVRANK myzset "four"
  10. (nil)
复制代码
ZSCORE

返回指定元素的分数。
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZSCORE myzset "one"
  4. "1"
复制代码
ZREM

删除指定的元素。
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZADD myzset 3 "three"
  6. (integer) 1
  7. redis> ZREM myzset "two"
  8. (integer) 1
  9. redis> ZRANGE myzset 0 -1 WITHSCORES
  10. 1) "one"
  11. 2) "1"
  12. 3) "three"
  13. 4) "3"
复制代码
ZINCRBY

为指定的元素的关联分数添加指定的分数值,返回值为新分数值,以字符串形式表现。
  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZINCRBY myzset 2 "one"
  6. "3"
  7. redis> ZRANGE myzset 0 -1 WITHSCORES
  8. 1) "two"
  9. 2) "2"
  10. 3) "one"
  11. 4) "3"
复制代码
ZINTERSTORE

求出给定有序集合中元素的交集并保存进目标有序集合中,在归并过程中以元素为单位进行归并,元 素对应的分数按照差异的聚合方式和权重得到新的分数。
  1. ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight
  2. [weight ...]] [AGGREGATE <SUM | MIN | MAX>]
复制代码
  1. redis> ZADD zset1 1 "one"
  2. (integer) 1
  3. redis> ZADD zset1 2 "two"
  4. (integer) 1
  5. redis> ZADD zset2 1 "one"
  6. (integer) 1
  7. redis> ZADD zset2 2 "two"
  8. (integer) 1
  9. redis> ZADD zset2 3 "three"
  10. (integer) 1
  11. redis> ZINTERSTORE out 2 zset1 zset2 WEIGHTS 2 3
  12. (integer) 2
  13. redis> ZRANGE out 0 -1 WITHSCORES
  14. 1) "one"
  15. 2) "5"
  16. 3) "two"
  17. 4) "10"
复制代码
ZUNIONSTORE

求出给定有序集合中元素的并集并保存进目标有序集合中,在归并过程中以元素为单位进行归并,元 素对应的分数按照差异的聚合方式和权重得到新的分数。
命令小结


内部编码

ziplist(压缩列表):当有序集合的元素个数小于 zset-max-ziplist-entries 配置(默认 128 个),同时每个元素的值都小于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会用 ziplist 来作 为有序集合的内部实现,ziplist 可以有用淘汰内存的使用。
skiplist(跳表):当 ziplist 条件不满足时,有序集合会使⽤ skiplist 作为内部实现,因为此时 ziplist 的操纵服从会下降

7. 渐进式遍历

渐进式遍历(Incremental Traversal)是一种在数据结构中逐步访问元素的方法,通常用于处理大型数据集或流式数据,以避免一次性加载所有数据而导致的内存消耗。
关键概念:

  • 分批处理:数据被分成多个小批次进行处理,而不是一次性加载所有数据。这种方法可以淘汰内存使用并提高响应速度。
  • 懒加载:仅在需要时加载数据,而不是预先加载所有数据。这种方式可以提高性能,尤其是在处理大数据集时。
  • 迭代器模式:使用迭代器来逐步访问数据结构中的元素。迭代器可以提供一种同一的方式来遍历差异类型的数据结构。

  1. redis 127.0.0.1:6379> scan 0
  2. 1) "17"
  3. 2) 1) "key:12"
  4. 2) "key:8"
  5. 3) "key:4"
  6. 4) "key:14"
  7. 5) "key:16"
  8. 6) "key:17"
  9. 7) "key:15"
  10. 8) "key:10"
  11. 9) "key:3"
  12. 10) "key:7"
  13. 11) "key:1"
  14. redis 127.0.0.1:6379> scan 17
  15. 1) "0"
  16. 2) 1) "key:5"
  17. 2) "key:18"
  18. 3) "key:0"
  19. 4) "key:2"
  20. 5) "key:19"
  21. 6) "key:13"
  22. 7) "key:6"
  23. 8) "key:9"
  24. 9) "key:11"
复制代码
8. 数据库命令 

  1. //切换数据库
  2. select dbIndex
  3. //清除数据库
  4. flushdb / flushall  # flushdb 只清除当前数据库,flushall 会清楚所有数
  5. 据库。
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表