Redis的数据类型常用命令

目录

前言 

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 -1
 1) "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中非常关键的知识点.在项目中也是频繁使用,应用非常广泛.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值