Redis的数据类型常用命令

news2024/11/21 1:44:12

目录

前言 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postman下载安装和导入导出脚本一键执行

下载和安装 首先,下载并安装PostMan,请访问PostMan的官方下载网址:https://www.getpostman.com/downloads/ 下载所需的安装程序后,直接安装即可 第一次打开会要求登录账号密码,如果没有,直接关闭&#xf…

海报制作哪个软件好?建议试试这5个

2024年过得飞快,转眼间国庆佳节即将到来。 在这个举国欢庆的时刻,无论是商家还是个人,都希望通过海报来传递节日的喜悦和祝福。制作一张吸引人的海报,不仅能提升品牌形象,还能增强节日氛围。 那么,如何快…

【Python报错已解决】TypeError: can only concatenate str (not “int“) to str

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【Java 问题】基础——Java 概述

Java 概述 1. 什么是 Java ?2. Java 语言有哪些特点3. JVM、JDK 和 JRE 有什么区别?4. 说说什么是跨平台性?原理是什么?5. 什么是字节码?采用字节码的好处是什么?6. 为什么说 Java 语言 "编译与解释并存"?…

汽车行业SAP全球模版导入方案【集团出海部署】

在汽车行业实施SAP系统是一个复杂且具挑战性的项目,涉及多个业务模块和跨部门协作。以下是一个汽车行业SAP实施的导入方案,包括关键步骤、模块选择、最佳实践和注意事项。 1. 项目启动及规划 项目启动 项目发起:确定项目范围、目标和业务需…

Spring源码-ConfigurationClassPostProcessor类解析spring相关注解

ConfigurationClassPostProcessor类的作用 此类是一个后置处理器的类,主要功能是参与BeanFactory的建造,主要功能如下 1、解析加了Configuration的配置类 2、解析ComponentScan扫描的包 3、解析ComponentScans扫描的包 4、解析Import注解 该类在springbo…

【原创教程】如何用西门子1500读写巴鲁夫RFID

实现的功能及应用的场合 通过使用RFID进行对托盘信息工件信息的追踪记忆,方便了解工件的状态内容。适用于流水线等场合。 硬件配置 巴鲁夫RFID 巴鲁夫RFID一套包含:RFID分析单元,RFID数据读写头,RFID数据载体。 ①RFID分析单…

ai写论文哪个平台好?分享4款ai论文写作平台软件

在当前的学术研究和论文写作领域,AI技术的应用已经成为一种趋势。通过智能算法和大数据分析,AI工具能够帮助学者和学生提高写作效率、优化内容结构,并确保论文的原创性和质量。以下是四款备受推荐的AI论文写作平台软件: 1. 千笔-…

Js基础

JS编写位置 将代码编写在html网页script标签 <script>// 弹出alert("test")// 控制台输出日志console.log("hello world")// 向网页输入内容&#xff0c;即往body中写内容document.write("write content")</script> 将代码编写在外部…

原腾讯云AI产品线项目经理李珊受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 原腾讯云AI产品线项目经理、资深项目管理专家李珊女士受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为&#xff1a;AI助力项目经理的决策支持系统。大会将于10月26-27日在北京举办…

生态布局再进一步!拓数派 PieCloudDB Database 与 openEuler 完成兼容互认证

随着信息技术的快速发展&#xff0c;国产化自主创新已成为国家战略的核心部分。拓数派自主研发的云原生虚拟数仓 PieCloudDB 与国产操作系统 openEuler 已完成相互兼容性测试&#xff0c;并获得 openEuler 技术测评证书。 目前&#xff0c;拓数派已成功与华为鲲鹏、麒麟软件、龙…

基于Java+Mysql实现的PC端图书管理系统软件

Library_system 图书管理系统。用Java实现的PC端软件。使用MySql作为DBMS操作本地数据库&#xff0c;用JDBC连接Java和数据库。实现图书管理系统的基本功能 项目介绍 该项目主要实现了图书管理系统几个主要的基本功能&#xff0c;做这小项目是为了简单学习数据库设计、包括E…

系统架构师-面向服务架构(SOA)全解

1、为什么需要SOA架构 1.1 系统集成问题 异构系统整合 例如&#xff0c;一个企业可能同时拥有用 Java 开发的企业资源规划&#xff08;ERP&#xff09;系统、用 C# 开发的客户关系管理&#xff08;CRM&#xff09;系统以及用 Python 开发的数据分析系统。通过 SOA&#xff0…

9月24日笔记

内网信息收集 本机基础信息收集 当通过web渗透或者其他方式活动服务器主机权限之后&#xff0c;需要以该主机作为跳板&#xff0c;对内网环境进行渗透&#xff0c;对于攻陷的第一台主机&#xff0c;其在内网中所处的网络位置、当前登录的用户、该用户有什么样的权限、其操作系…

微信小程序开发第八课

一 公告 1.1 微信小程序端 #js###const api require("../../config/settings.js") Page({data: {noticeList: [{title: 公告标题1,create_time: 2024-04-25,content: 公告内容描述1&#xff0c;公告内容描述1&#xff0c;公告内容描述1。, // 可以根据实际情况添加…

几个将ppt文件压缩变小的方法!

几个将ppt文件压缩变小的方法&#xff01;在构建集文字、图像、视频及数据表于一体的综合PPT演示文稿时&#xff0c;一个常见挑战是随着内容的不断丰富&#xff0c;文件体积也随之膨胀&#xff0c;这往往源于直接嵌入未经优化的多媒体资源及设计上的冗余元素&#xff0c;如繁复…

数字人实战第五天——Dinet 训练自己的数字人

一、简介 DINet 是一个形变修复网络&#xff0c;专门用于解决高分辨率人脸视觉配音中的难题。它的设计目的是为了提升视觉配音的保真度和细节丰富性&#xff0c;特别是在少样本学习的情境下&#xff0c;即在训练数据较少的情况下依然能够实现较好的配音效果。 DINet的技术实现…

html TAB切换按钮变色、自动生成table

<!DOCTYPE html> <head> <meta charset"UTF-8"> <title>Dynamic Tabs with Table Data</title> <style> /* 简单的样式 */ .tab-content { display: none; border: 1px solid #ccc; padding: 1px; marg…

【专题总结】【一文解决】多继承下的构造函数执行顺序

多继承下的构造函数执行顺序 派生类构造函数执行顺序如下 ①调用基类构造函数→调用顺序按它们被继承时【从左至右】被说明的次序 ②调用子对象的构造函数→调用顺序按它们在【类中说明次序】 ③调用派生类的构造函数 【典型题1】13浙工大卷二读程序4题 【分析】下面①classC:p…

Mybatis Mapper 代理开发

文章目录 1, 实体类2、将Mapper接口写好3、UserMapper.xml 配置文件4、mybatis-config.xml 配置文件5、编写代码 Mybatis Mapper 代理开发 总的来说&#xff0c;有这几点&#xff1a; 定义域SQL映射文件同名的Mapper接口&#xff0c;并且将Mapper接口和SQL映射文件位置在同一目…