Redis的数据类型常用命令

devtools/2024/9/30 4:07:38/

目录

前言 

String字符串

常见命令

set

get

mget

mset

setnx

incr

incrby

decr

decyby

append

Hash哈希

常见命令

hset

hget

hexists

hdel

hkeys

hvals

hgetall

hmget

hlen

hsetnx

List 列表

 常见命令

lpush

lrange

lpushx

rpush

rpushhx

lpop

rpop

lindex

linsert

llen

Set 集合

常用命令

sadd

smembers

sismember

 scard

spop

smove

srem

 集合间的操作

集合操作命令 

sinter

sinterstore

 sunion

sunionstore

sdiff

 sdiffstore

Zset 有序集合

常用命令

zadd

zcard

 zcount

zrange

zrevrange

zpopmax

zpopmin

zrank

 zrevrank 

zscore

zrem

zincrby

总结


前言 

Redis基础(数据结构和内部编码)-CSDN博客文章浏览阅读752次,点赞9次,收藏11次。string是redis中最基本的数据结构,也是使用最频繁的一个数据结构,不仅可以存储普通字符串,还可以存储二进制数据(序列化对象,图片)等数据,redis也是针对string在不同场景进行不同编码和优化.https://blog.csdn.net/qq_63525426/article/details/142375440?spm=1001.2014.3001.5502

上篇文章详细介绍了redis数据结构和对应的编码.接下来我们将从这5中数据结构开始,学习redis的基础命令.

String字符串

String类型是redis中基础的数据类型.关于字符串我们需要注意以下几点:

  1. redis中所有的键都是String类型,而且其他几种数据类型都是基础String构建的.例如列表和集合的元素类型都是String类型.
  2. String类型的值可以是字符串,也可以是整数,浮点数,甚至是二进制数据.
  3. 一个字符串的大小不能超过512MB

常见命令

set

将string类型的value设置到key中,如何key之前存在,无论之前的数据类型是什么,都覆盖掉.

之前关于此key的ttl也失效.

语法格式: SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

 时间复杂度: O(1)

选项: 

EX: 使用秒作为单位为key设置过期时间

PX: 使用毫秒作为单位为key设置过期时间

NX: 只有key不存在时才进行设置,如果存在,则不执行

XX: 只有key存在时才进行设置,如果key之前不存在,则不执行

注意:带选项的 SET 命令可以被 SETNX 、 SETEX 、 PSETEX 等命令代替

返回值: 如果设置成功,则返回ok

127.0.0.1:6379> set mykey "hello"
OK
127.0.0.1:6379> get mykey
"hello"
127.0.0.1:6379> set mykey "he" ex 10 # 设置过期时间10s
OK
127.0.0.1:6379> get mykey  #未到10s
"he"
127.0.0.1:6379> get mykey  # 10s之后
(nil) 
127.0.0.1:6379>  
127.0.0.1:6379> set num "int"   
OK
127.0.0.1:6379> get num 
"int"
127.0.0.1:6379> del num   # 删除key 
(integer) 1
127.0.0.1:6379> 

get

获取对应key的value,如果不存在,返回nil.如果value的数据类型不是string,会报错

语法: get key

时间复杂度: O(1) 

返回值: 

返回key对应的value.如果不存在则返回nil

127.0.0.1:6379> get heiil
(nil)
127.0.0.1:6379> set heiil "123"
OK
127.0.0.1:6379> get heiil
"123"
127.0.0.1:6379> del deiil
(integer) 1
127.0.0.1:6379> exists heiil
(integer) 0
127.0.0.1:6379> hset heiil name Bob
(integer) 1
127.0.0.1:6379> get heiil
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> 

mget

一次获取多个key的值,如果对应的数据类型不是string或者key不存在,返回nil

语法: MGET key [key ...]

 时间复杂度: O(N) N是key的数量

返回值: 返回对应的value

127.0.0.1:6379> set user1 "zhangsan"
OK
127.0.0.1:6379> set user2 "lisi"
OK
127.0.0.1:6379> mget user1 user2 heiil
1) "zhangsan"
2) "lisi"
3) (nil)
127.0.0.1:6379> 

mset

一次设置多个key的value

语法:MSET key value [key value ...]

 时间复杂度: O(N) N是key的个数

返回值: ok

127.0.0.1:6379> mset user3 "sfd" user4 "ksdf" user5 "lihjsid"
OK
127.0.0.1:6379> 

setnx

设置 key-value 但只允许在 key 之前不存在的情况下。

语法: SETNX key value

时间复杂度:O(1)

返回值:1 设置成功。0 没有设置。 

127.0.0.1:6379> setnx key1 "123"
(integer) 1
127.0.0.1:6379> setnx key2 "hello"
(integer) 1
127.0.0.1:6379> 

incr

将 key 对应的 string 表示的数字加1。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对 应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错。

语法:INCR key

时间复杂度:O(1)

返回值:integer 类型的加完后的数值。 

127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> get num
"3"
127.0.0.1:6379> 
127.0.0.1:6379> incr k  # 这个key之前不存在
(integer) 1
127.0.0.1:6379> get k
"1"
127.0.0.1:6379> 
127.0.0.1:6379> set k1 "sdkfjhasdlkfhjaslkdfs"
OK
127.0.0.1:6379> incr k1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set k2 "1238917283912745192874331298757981237394285"
OK
127.0.0.1:6379> incr k1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> 

incrby

将 key 对应的 string 表示的数字加上对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如 果 key 对应的 string 不是个整型或者范围超过了 64 位有符号整型,则报错。

语法: INCRBY key decrement

 时间复杂度:O(1)

返回值:integer 类型的加完后的数值。

127.0.0.1:6379> incr k1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incrby k 100
(integer) 101
127.0.0.1:6379> incrby k1 1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> 

decr

将 key 对应的 string 表示的数字减1。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对 应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错。

语法: DECR key

时间复杂度: O(1)

返回值: integer 类型的减完后的数值。 

127.0.0.1:6379> decr k1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decr k
(integer) 100
127.0.0.1:6379> decr k
(integer) 99
127.0.0.1:6379> 

decyby

将 key 对应的 string 表示的数字减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如 果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错。

语法: DECRBY key decrement

时间复杂度:O(1)

返回值:integer 类型的减完后的数值。 

127.0.0.1:6379> decrby k 10
(integer) 89
127.0.0.1:6379> decrby k 100
(integer) -11
127.0.0.1:6379> 

append

如果 key 已经存在并且是一个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在, 则效果等同于 SET 命令。

语法: APPEND KEY VALUE

时间复杂度:O(1). 追加的字符串一般较短, 可以视为 O(1).

返回值:追加完成之后 string 的长度。 

127.0.0.1:6379> append k hello
(integer) 8
127.0.0.1:6379> get k
"-11hello"
127.0.0.1:6379> 

Hash哈希

几乎所有的主流编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数 组、映射。在 Redis 中,哈希类型是指值本身是个键值对结构,形如 key = "key",value = { { field1, value1 }, ..., {fieldN, valueN } }

hash类型的key是个字符串,而value则是一个个的键值对结构

常见命令

hset

设置hash中指定的字段(filed)的值(value)

语法: HSET key field value [field value ...]

时间复杂度:插入一组 field 为 O(1), 插入 N 组 field 为 O(N)

返回值:添加的字段的个数

127.0.0.1:6379> select 1  #切换到1数据库
OK
127.0.0.1:6379[1]> hset myhash name zhangsan
(integer) 1
127.0.0.1:6379[1]> hget myhash name
"zhangsan"
127.0.0.1:6379[1]> 

hget

获取hash中key的指定字段的值

语法: HGET key field

时间复杂度: O(1)

返回值: 字段对应的值或nil


127.0.0.1:6379[1]> hget myhash name
"zhangsan"
127.0.0.1:6379[1]> 

hexists

判断hash中是否有指定字段

语法: HEXISTS key field

时间复杂度:O(1)

返回值:1 存在,0 不存在。 

127.0.0.1:6379[1]> hexists myhash name
(integer) 1
127.0.0.1:6379[1]> hexists myhash age
(integer) 0
127.0.0.1:6379[1]> 

hdel

删除 hash 中指定的字段。

语法: HDEL key field [field ...]

时间复杂度: 删除一个元素为O(1),删除N个元素为O(N)

返回值: 本次操作所删除的个数

127.0.0.1:6379[1]> hset myhash1 name "zhangsan" age 18 password 123
(integer) 3
127.0.0.1:6379[1]> hdel myhash1 name
(integer) 1
127.0.0.1:6379[1]> hdel myhash1 name
(integer) 0
127.0.0.1:6379[1]> 

hkeys

获取 hash 中的所有字段。

语法: HKEYS key

 时间复杂度:O(N), N 为 field 的个数.

返回值:字段列表。

127.0.0.1:6379[1]> hkeys myhash1
1) "age"
2) "password"
127.0.0.1:6379[1]> 

hvals

获取 hash 中的所有的值。

语法: HVALS key

时间复杂度:O(N), N 为 field 的个数.

返回值:所有的值。 

127.0.0.1:6379[1]> hvals myhash1
1) "18"
2) "123"
127.0.0.1:6379[1]> 

hgetall

获取 hash 中的所有字段以及对应的值。

语法: HGETALL key

时间复杂度: O(N)

返回值: 字段和对应的值

127.0.0.1:6379[1]> hgetall myhash1
1) "age"
2) "18"
3) "password"
4) "123"
127.0.0.1:6379[1]> 

hmget

一次获取 hash 中多个字段的值

语法: HMGET key field [field ...]

时间复杂度:只查询一个元素为 O(1), 查询多个元素为 O(N), N 为查询元素个数.

返回值:字段对应的值或者 nil。

127.0.0.1:6379[1]> hmget myhash1 age password
1) "18"
2) "123"
127.0.0.1:6379[1]> 

 在使用hgetall时,如果哈希元素个数较多,会存在阻塞 Redis 的可能。如果开发人员只需要获取部分 field,可以使用户hmget

hlen

获取 hash 中的所有字段的个数。

语法: HLEN key

时间复杂度:O(1)

返回值:字段个数。

127.0.0.1:6379[1]> hlen myhash1
(integer) 2
127.0.0.1:6379[1]> 

hsetnx

在字段不存在的情况下,设置 hash 中的字段和值。

语法: HSETNX key field value

时间复杂度:O(1)

返回值:1 设置成功,0 失败。 

127.0.0.1:6379[1]> hsetnx myhash1 name 123
(integer) 1
127.0.0.1:6379[1]> hgetall myhash1
1) "age"
2) "18"
3) "password"
4) "123"
5) "name"
6) "123"
127.0.0.1:6379[1]> hsetnx myhash1 name 123
(integer) 0
127.0.0.1:6379[1]> hgetall myhash1
1) "age"
2) "18"
3) "password"
4) "123"
5) "name"
6) "123"
127.0.0.1:6379[1]> 

List 列表

列表类型是来存储多个有序的字符串, a、b、c、d、e 五个元素从左到右组成了个有序的列表,列表中的每个字符串称为元素(element),列表最多可以存储2的32次方-1个元素。在 Redis 中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、 获取指定索引下标的元素等。列表是灵活的数据结构,它可以充当栈和队列的⻆色.

列表两端的插入和弹出操作

 注意: List内部的编码方式不是一个简单的数组,而是更接近于双端队列

列表的元素也是可以重复的.

 常见命令

lpush

将一个或者多个元素从左侧放入(头插)到 list 中。

语法: LPUSH key element [element ...]

时间复杂度:只插入一个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数. 

返回值:插入后 list 的长度 

127.0.0.1:6379[1]> lpush mylist "helo"
(integer) 1
127.0.0.1:6379[1]> lpush mylist "llo"
(integer) 2
127.0.0.1:6379[1]> lpush mylist 1 2 3 4   # 理解头插,按照顺序进行插入 先插入1,2,3 最后是4,所以4就是list的第一个元素
(integer) 6

lrange

获取从 start 到 end 区间的所有元素,左闭右闭。

语法: LRANGE key start stop

时间复杂度:O(N)

返回值:指定区间的元素。

127.0.0.1:6379[1]> lrange mylist 0 1
1) "4"
2) "3"
127.0.0.1:6379[1]> lrange mylist 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "llo"
6) "helo"
127.0.0.1:6379[1]> 

lpushx

在 key 存在时,将一个或者多个元素从左侧放入(头插)到 list 中。不存在,直接返回

语法: LPUSHX key element [element ...]

时间复杂度:只插入一个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数.

返回值:插入后 list 的长度。

127.0.0.1:6379[1]> lpushx mylist 123
(integer) 7
127.0.0.1:6379[1]> lpushx my 1
(integer) 0
127.0.0.1:6379[1]> 

rpush

将 一个或者多个元素从右侧放入(尾插)到 list 中。

语法: RPUSH key element [element ...]

时间复杂度:只插入一个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数.

返回值:插入后 list 的长度。

127.0.0.1:6379[1]> rpush mylist 1
(integer) 8
127.0.0.1:6379[1]> rpush mylist 6 7 8 9
(integer) 12
127.0.0.1:6379[1]> lrange mylist 0 -11) "123"2) "4"3) "3"4) "2"5) "1"6) "llo"7) "helo"8) "1"9) "6"
10) "7"
11) "8"
12) "9"
127.0.0.1:6379[1]> 

rpushhx

在 key 存在时,将一个或者多个元素从右侧放入(尾插)到 list 中。

语法: RPUSHX key element [element ...]

时间复杂度:只插入一个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数.

返回值:插入后 list 的长度。

127.0.0.1:6379[1]> rpushx mylist 567
(integer) 14
127.0.0.1:6379[1]> rpushx 1 1
(integer) 0
127.0.0.1:6379[1]> 

lpop

从 list 左侧取出元素(即头删)。

语法: LPOP key [count]

时间复杂度:O(1)

返回值:取出的元素或者 nil。 

127.0.0.1:6379[1]> lpop mylist 1  # 从mylist这个list的左边开始删除,删除1个元素
1) "123"   # 删除的值
127.0.0.1:6379[1]> 
127.0.0.1:6379[1]> lpop mylist 5
1) "4"
2) "3"
3) "2"
4) "1"
5) "llo"

rpop

从 list 右侧取出元素(即尾删)。

语法: RPOP key [count]

时间复杂度:O(1)

返回值:取出的元素或者 nil。 

127.0.0.1:6379[1]> rpop mylist 5 # 从右边删除5个元素
1) "567"
2) "123"
3) "9"
4) "8"
5) "7"

lindex

获取从左数第 index 位置的元素。

语法: LINDEX key index

时间复杂度:O(N)

返回值:取出的元素或者 nil。 

127.0.0.1:6379[1]> lindex mylist 2
"6"
127.0.0.1:6379[1]> 

linsert

在特定位置插入元素。

语法: LINSERT key pivot element

时间复杂度:O(N)

返回值:插入后的 list 长度 

127.0.0.1:6379[1]> lrange mylist 0 -1
1) "helo"
2) "1"
3) "6"
127.0.0.1:6379[1]> linsert mylist before 1 2
(integer) 4
127.0.0.1:6379[1]> lrange mylist 0 -1
1) "helo"
2) "2"
3) "1"
4) "6"
127.0.0.1:6379[1]> 

llen

获取 list 的长度。

语法: LLEN key

时间复杂度:O(1)

返回值:list 的长度。 

127.0.0.1:6379[1]> llen mylist
(integer) 4
127.0.0.1:6379[1]> 

Set 集合

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

常用命令

sadd

将一个或者多个元素添加到 set 中。注意,重复的元素无法添加到 set 中。

语法:SADD key member [member ...]

时间复杂度:O(1)

返回值:本次添加成功的元素个数 

127.0.0.1:6379[1]> sadd myset 1 2 3
(integer) 3
127.0.0.1:6379[1]> sadd myset 1 
(integer) 0
127.0.0.1:6379[1]> 

smembers

获取一个 set 中的所有元素,注意,元素间的顺序是无序的。

语法: SMEMBERS key

时间复杂度:O(N)

返回值:所有元素的列表。

127.0.0.1:6379[1]> smembers myset
1) "1"
2) "2"
3) "3"
127.0.0.1:6379[1]> 

sismember

判断一个元素在不在 set 中。 

语法:SISMEMBER key member

时间复杂度:O(1)

返回值:1 表失元素在 set 中。0 表示元素不在 set 中或者 key 不存在。

127.0.0.1:6379[1]> sismember myset 2
(integer) 1
127.0.0.1:6379[1]> sismember myset 54
(integer) 0
127.0.0.1:6379[1]> 

 scard

获取一个set的基数,即为set中元素的个数

语法: SCARD key

时间复杂度:O(1)

返回值:set 内的元素个数.

127.0.0.1:6379[1]> scard myset
(integer) 3
127.0.0.1:6379[1]> 

spop

从 set 中删除并返回一个或者多个元素。注意,由于 set 内的元素是无序的,所以取出哪个元素实际是 未定义行为,即可以看作随机的。 

语法:SPOP key [count]

时间复杂度:O(N), n 是 count

返回值:取出的元素。 

127.0.0.1:6379[1]> spop myset 1
1) "3"
127.0.0.1:6379[1]> spop myset 1
1) "1"
127.0.0.1:6379[1]> spop myset 1
1) "2"
127.0.0.1:6379[1]> 

smove

将一个元素从源 set 取出并放入目标 set 中。 

语法: SMOVE source destination member

 时间复杂度:O(1)

返回值:1 表示移动成功,0 表示失败

127.0.0.1:6379[1]> smembers myset1
1) "e"
2) "n"
3) "l"
127.0.0.1:6379[1]> smembers myset2
1) "h"
2) "hel"
127.0.0.1:6379[1]> smove myset1 myset2 "n"
(integer) 1
127.0.0.1:6379[1]> smembers myset2
1) "h"
2) "n"
3) "hel"
127.0.0.1:6379[1]> smembers myset1
1) "e"
2) "l"
127.0.0.1:6379[1]> 

srem

将指定的元素从 set 中删除 

语法: SREM key member [member ...]

时间复杂度:O(N), N 是要删除的元素个数.

返回值:本次操作删除的元素个数。

127.0.0.1:6379[1]> srem myset2 "h"
(integer) 1
127.0.0.1:6379[1]> srem myset2 "n" "hel"
(integer) 2
127.0.0.1:6379[1]> smembers myset2
(empty array)
127.0.0.1:6379[1]> 

 集合间的操作

交集(inter)、并集(union)、差集(diff)

我们先来了解一下交集 并集 差集的概念

交集: 最终的结果同时出现在两个集合中   3 4 

并集: 把多个集合的数据放在一起,如果有重复的,最终保留一份  1 2 3 4 5 6

差集:  A和B做差集,就是找出那些元素,在A中存在,在B中不存在  1 2 

          B和A做差集,就是找出那些元素,在B中存在,在A中不存在  5  6 

集合操作命令 

sinter

获取给定 set 的交集中的元素

语法: SINTER key [key ...]

 时间复杂度:O(N * M), N 是最小的集合元素个数. M 是最大的集合元素个数.

返回值:交集的元素。

127.0.0.1:6379[1]> sadd k1 1 2 
(integer) 2
127.0.0.1:6379[1]> sadd k2 1 3 4
(integer) 2
127.0.0.1:6379[1]> 
127.0.0.1:6379[1]> sinter k1 k2
1) "1"
127.0.0.1:6379[1]> 

sinterstore

获取给定 set 的交集中的元素并保存到目标 set 中。 

语法:SINTERSTORE destination key [key ...]

 时间复杂度:O(N * M), N 是最小的集合元素个数. M 是最大的集合元素个数.

返回值:交集的元素个数。

127.0.0.1:6379[1]> sinter k1 k2
1) "1"
127.0.0.1:6379[1]> sinterstore k3 k1 k2
(integer) 1
127.0.0.1:6379[1]> smembers k3
1) "1"
127.0.0.1:6379[1]> 

 sunion

获取给定set中并集的元素

语法: SUNION key [key ...]

时间复杂度:O(N), N 给定的所有集合的总的元素个数.

返回值:并集的元素

127.0.0.1:6379[1]> sunion k1 k2 k3
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379[1]> 

sunionstore

获取给定 set 的并集中的元素并保存到目标 set 中。 

语法: SUNIONSTORE destination key [key ...]

时间复杂度:O(N), N 给定的所有集合的总的元素个数.

返回值:并集的元素个数。

127.0.0.1:6379[1]> sunionstore k4 k1 k2 k3
(integer) 4
127.0.0.1:6379[1]> smembers k4
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379[1]> 

sdiff

获取给定 set 的差集中的元素 

语法:SDIFF key [key ...]

时间复杂度:O(N), N 给定的所有集合的总的元素个数.

返回值:差集的元素 

127.0.0.1:6379[1]> smembers k4
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379[1]> sadd k4 "a"
(integer) 1
127.0.0.1:6379[1]> sadd k4 "b"
(integer) 1
127.0.0.1:6379[1]> sadd k4 "c"
(integer) 1
127.0.0.1:6379[1]> sadd k5 "c"
(integer) 1
127.0.0.1:6379[1]> sadd k5 "d"
(integer) 1
127.0.0.1:6379[1]> sadd k5 "e"
(integer) 1
127.0.0.1:6379[1]> sdiff k4 k5
1) "b"
2) "a"
3) "4"
4) "1"
5) "3"
6) "2"
127.0.0.1:6379[1]> 

 sdiffstore

获取给定 set 的差集中的元素并保存到目标 set 中。

语法:SDIFFSTORE destination key [key ...]

时间复杂度:O(N), N 给定的所有集合的总的元素个数. 

返回值:差集的元素个数。

127.0.0.1:6379[1]> sdiffstore k6 k4 k5
(integer) 6
127.0.0.1:6379[1]> smembers k6
1) "b"
2) "a"
3) "4"
4) "1"
5) "3"
6) "2"
127.0.0.1:6379[1]> 

Zset 有序集合

有序集合相对于字符串、列表、哈希、集合来说会有些陌生。它保留了集合不能有重复成员的 特点,但与集合不同的是,有序集合中的每个元素都有一个唯一的浮点类型的分数(score)与之关 联,着使得有序集合中的元素是可以维护有序性的,但这个有序不是用下标作为排序依据而是用这个分数。如图所示,该有序集合显示了三国中的武将的武力.

常用命令

zadd

添加或者更新指定的元素以及关联的分数到 zset 中,分数应该符合 double 类型,+inf/-inf 作为正负 极限也是合法的

zadd的相关选项:

XX: 仅仅用于更新已存在的用户

NX: 仅用于添加新元素,不会更新已存在的元素

CH: 默认情况下,zadd命令返回的是本次添加的元素个数,但是指定这个选项之后,就会包含本次更新的元素个数

INCR: 将元素的分数加上指定的分数,只能指定一个元素和分数

语法: zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

时间复杂度:O(log(N))

返回值:本次添加成功的元素个数。

127.0.0.1:6379[1]> zadd myzset 1 "one"
(integer) 1
127.0.0.1:6379[1]> zadd myzset 1 "uno"
(integer) 1
127.0.0.1:6379[1]> zadd myzset 2 "two" 3 "three"
(integer) 2
127.0.0.1:6379[1]> 
127.0.0.1:6379[1]> zrange myzset 0 -1  # 查看zset中的值
1) "one"
2) "uno"
3) "two"
4) "three"
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores  # 查看zset中的值和分数
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
127.0.0.1:6379[1]> 

zcard

获取一个 zset 的基数(cardinality),即 zset 中的元素个数。

语法: ZCARD key

时间复杂度:O(1)

返回值:zset 内的元素个数。

127.0.0.1:6379[1]> zcard myzset
(integer) 4
127.0.0.1:6379[1]> 

 zcount

返回分数在 min 和 max 之间的元素个数,默认情况下,min 和 max 都是包含的,可以通过他添加括号排除

语法: ZCOUNT key min max

时间复杂度:O(log(N))

返回值:满足条件的元素列表个数。

127.0.0.1:6379[1]> zcount myzset 1 2   # 闭区间 包含 1 2
(integer) 3
127.0.0.1:6379[1]> zcount myzset (1 (4  # 开区间,不包含 1 4
(integer) 2
127.0.0.1:6379[1]> 

zrange

返回指定区间的元素,分数按照升序。带上 WITHSCORES 可以把分数也返回。

语法: ZRANGE key start stop [WITHSCORES]

时间复杂度:O(log(N)+M)

返回值:区间内的元素列表。

127.0.0.1:6379[1]> zrange myzset 0 -1  # 查看zset中的值
1) "one"
2) "uno"
3) "two"
4) "three"
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores  # 查看zset中的值和分数
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
127.0.0.1:6379[1]> 

zrevrange

返回指定区间的元素,分数按照降序。带上 WITHSCORES 可以把分数也返回。

时间复杂度:O(log(N)+M)

返回值:区间内的元素列表

语法: ZREVRANGE key start stop [WITHSCORES]

127.0.0.1:6379[1]> zrevrange myzset 0 -1
1) "three"
2) "two"
3) "uno"
4) "one"
127.0.0.1:6379[1]> zrevrange myzset 0 -1 withscores
1) "three"
2) "3"
3) "two"
4) "2"
5) "uno"
6) "1"
7) "one"
8) "1"
127.0.0.1:6379[1]> 

zpopmax

删除并返回分数最高的 count 个元素

语法: ZPOPMAX key [count]

时间复杂度:O(log(N) * M)

返回值:分数和元素列表。 

127.0.0.1:6379[1]> zpopmax myzset 1
1) "three"
2) "3"
127.0.0.1:6379[1]> zpopmax myzset  # 这里个1是同样的效果
1) "two"
2) "2"
127.0.0.1:6379[1]> zpopmax myzset 2
1) "uno"
2) "1"
3) "one"
4) "1"
127.0.0.1:6379[1]> 
127.0.0.1:6379[1]> zcard myzset
(integer) 0
127.0.0.1:6379[1]> 

zpopmin

删除并返回分数最低的 count 个元素。

语法: ZPOPMIN key [count]

时间复杂度:O(log(N) * M)

返回值:分数和元素列表

127.0.0.1:6379[1]> zadd myzset 1 "one" 1 "uno" 2 "two" 3 "three"
(integer) 4
127.0.0.1:6379[1]> zpopmin myzset 2
1) "one"
2) "1"
3) "uno"
4) "1"
127.0.0.1:6379[1]> 

zrank

返回指定元素的排名,升序。

语法: ZRANK key member

时间复杂度:O(log(N))

返回值:排名。

127.0.0.1:6379[1]> zrank myzset one
(nil)
127.0.0.1:6379[1]> zrank myzset three
(integer) 1
127.0.0.1:6379[1]> 

 zrevrank 

语法: ZREVRANK key member

时间复杂度:O(log(N))

返回值:排名。

127.0.0.1:6379[1]> zrevrank myzset three
(integer) 0
127.0.0.1:6379[1]> 

zscore

返回指定元素的分数

语法:ZSCORE key member

时间复杂度:O(1)

返回值:分数。 

127.0.0.1:6379[1]> zscore myzset three
"3"
127.0.0.1:6379[1]> 

zrem

删除指定元素

语法: ZREM key member [member ...]

 时间复杂度:O(M*log(N))

返回值:本次操作删除的元素个数。

127.0.0.1:6379[1]> zrem myzset three
(integer) 1
127.0.0.1:6379[1]> 

zincrby

为指定的元素的关联分数添加指定的分数值

语法: ZINCRBY key increment member

 时间复杂度:O(log(N))

返回值:增加后元素的分数。

127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "two"
2) "2"
127.0.0.1:6379[1]> zincrby myzset 2 two
"4"
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "two"
2) "4"
127.0.0.1:6379[1]> 

总结

本文详细的介绍了redis中针对5种不同数据类型所操作的基本命令,这5种数据类型是redis中非常关键的知识点.在项目中也是频繁使用,应用非常广泛.


http://www.ppmy.cn/devtools/119048.html

相关文章

CSS开发全攻略

目录 一、CSS基础入门(一)CSS概述1.CSS的定义与作用2.CSS的历史与发展3.CSS的核心概念(1)选择器(Selector)(2)声明(Declaration)(3)规…

【个人笔记】数据一致性的解决方案

保证数据一致性:指保证redis里的数据和mysql的数据是一致的,不能说mysql更新了,但redis里面的还是旧的数据,反之亦然 先说结论:增删改的时候,把Redis中的缓存删了 为什么不先更新数据库,再更新…

免费制作证件照的小程序源码

1、效果展示 证件照制作,证件照免费制作,证件照调用api源码,解析代码。证件照制作小程序包,可以下载程序包,最初级版本免费下载。以上是高级版本。如果你有开发能力的话可以自己写前端,然后以下调用以下api…

5分钟精通Excel在go中的使用

一些简单操作可以在官方文档中找到,应该足够无经验的朋友们入门 介绍 - 《Excelize v2.2 中文文档》 - 书栈网 BookStack 这里贴一个中文版的链接(以excelize库为例,相对其他库来说,体验很不错),不过要注…

flink将窗口增量聚合算子和窗口全量聚合算子连用

在flink中,开窗后的聚合方式有两种,增量聚合和全量聚合,前者处理速度快,不积压数据,但是拿不到窗口中全量的信息,后者积压数据但是能拿到窗口内全量的数据。两者各有利弊。 因此滚动聚合窗口和全量聚合窗口…

Spring Boot 点餐系统:提升您的餐饮体验

第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作,对于网上点餐系统所牵扯的管理及数据保存都是非常多的,例如管理员;首页、个人中心、用户管理、美食店管理、美食分类管理、美食信息管理、美食订单管理、美食评价管理…

AI作曲家来了!看AI如何打造专属你的音乐!

音乐一直是人类文化的重要组成部分,它不仅能表达深刻的情感,还有着极高的艺术价值。随着科技的进步,尤其是人工智能技术的快速发展,AI现在已经能够参与到音乐创作中,甚至可以根据用户的需求来创作个性化的配乐。这一技…

性能优化与资源管理:优化Selenium脚本的执行效率,合理管理浏览器实例和系统资源

目录 引言 一、Selenium基础与常用方法 1.1 Selenium简介 1.2 Selenium基础用法 二、Selenium性能优化技巧 2.1 使用WebDriverWait实现显式等待 2.2 启用无头模式 2.3 设置合理的页面加载策略 2.4 禁用图片和JavaScript加载 2.5 优化元素定位 2.6 合理使用隐式等待和…