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 -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.xdnf.cn/news/150948.html

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

相关文章

Mybtais高级结果映射-多对一表映射

前言 从前我们只进行单表的sql操作,但是如果涉及多张表的操作,原先的映射关系就不太适用了,因此这里将会介绍Mybatis的高级结果映射技巧 准备工作 准备两张数据库表,一个员工表,一个部门表(我们使用oracle的…

一份转型大模型产品经理指南

作为一个产品经理,你可能已经熟悉了一些常见的AI技术和应用,比如机器学习、深度学习、自然语言处理、计算机视觉等。 但是,你是否了解什么是大模型?大模型又有什么特点和优势?为什么大模型会成为AI领域的一个重要趋势…

SQL语言入门

一、SQL语言入门: 数据库管理人员(DBA)通过数据库管理系统(DBMS)可以对数据库(DB)中的数据进行操作 SQL是一种非过程化语言,只需提出“做什么”,而不需要指明“怎么做”…

如何打造一个圈子社交系统?社交圈子论坛系统源码该如何实现

要打造一个圈子社交系统,并实现其源码,需要经历一系列详细的步骤,包括需求分析、系统设计、技术选型、开发、测试以及部署等。以下是一个全面的指南: 一、需求分析 明确目标用户:确定你的社交圈子面向哪类用户群体&a…

将U盘作为启动项报错:Verifying shim SBAT data failed: Security Policy Violation

问题描述 今天给新电脑装双系统的时候,将U盘设为启动项,总是报错,起初以为是启动盘做的有问题,报错如下: Verifying shim SBAT data failed: Security Policy Violation Something has gone seriously wrong: SBAT s…

栈的深度解析:顺序栈与链栈的实现

引言 栈是一种重要的线性数据结构,遵循“后进先出”(LIFO)的原则。栈的应用非常广泛,如表达式求值、括号匹配、递归实现等。在本文中,我们将深入探讨栈的概念,并通过顺序栈和链栈两种实现方式进行对比分析…

路径报错问题

项目场景: 假设这是我的项目结构,我现在需要在aa.js文件中引入并使用aa.geojson文件, 问题: 当我引入路径是const filePath ../geo/aa.geojson;的时候,系统报错 "aa.geojson is not Found",找不…

[000-002-01].第29节:MySQL执行流程

1、MySQL的查询流程: 客户端请求进入到数据库服务器后,先进行查询缓存,如果命中,那么就返回结果;如果没命中,进入到解析器,进行词法解析和语法解析,生成解析树;然后进入到…

企业图纸文档管理系统推荐 三大企业图纸文档管理软件详细介绍

在现代企业的设计和生产过程中,图纸文档的管理是至关重要的一环。 无论是建筑、制造业,还是技术研发领域,图纸文档的正确存储、分享与管理能够极大提升工作效率,避免误操作或信息丢失。 接下来,小编将为大家推荐三款优…

采购管理系统SRM助力电子元器件制造企业构建高效的供应商管理体系

在当今快速迭代的电子元器件制造行业中,构建一套高效、透明的供应商管理体系对于提升企业竞争力、降低运营成本、确保供应链稳定性至关重要。采购管理系统(SRM,Supplier Relationship Management)作为这一领域的得力助手,正引领着电子元器件制…

远程连接服务器时出现“这可能是由于CredSSP加密数据库修正”的错误提示的解决办法

现象: 当远程连接服务器时,有时候会出现以下提示,从而导致无法成功连接服务,如下所述: 原因: 远程桌面使用的是“凭据安全支持提供程序协议 (CredSSP) ”,这个协议在未修补的版本中是存在漏…

scrapy 爬取微博(四)【最新超详细解析】: 设计篇

一、功能设计 开始开发之前我们先对本文的scrapy微博爬虫工程进行一个功能的设计,包含的功能模块如下: 功能模块具体描述微博文章爬取根据关键词、时间范围等参数爬取微博文章,获取用户名、ID、微博mid、微博内容、点赞、转发、评论等数据微…

《深度学习》卷积神经网络 使用最优模型、调整学习率 用法解析及案例实现

目录 一、使用最优模型 1、什么是最优模型 2、如实使用最优模型 1)读取参数方法 2)调用完整模型方法 3)实例 完整代码: 打印结果: 二、调整学习率 1、什么是调整学习率 2、目的 3、调整学习率的方法 1&am…

C++ 语言课程笔记

C 语言课程笔记 C语言程序设计第四版——谭浩强著,此书中的代码题大部分已经在本文中展示,以及南开大学 C 语言上机题库 100 题的作答,如果有作答不正确的地方或者可优化的地方,欢迎指正,谢谢! 001 屏幕输出…

DAMODEL丹摩智算平台实践CogVideoX

文章目录 前言 一、平台账号注册并登录 二、部署CogVideoX (一)简介 (二)部署 1. 创建实例 2. 配置环境和依赖 3.预制模型与配置文件 三、开始运行 总结 前言 该文章主要记录DAMODEL丹摩智算平台实践过程与心得体会&…

【YashanDB知识库】客户端字符集与数据库字符集兼容问题

本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7352675.html?templateId1718516 问题现象 客户端yasql配置字符集为GBK,服务端yasdb配置字符集为UTF8,之后执行语句: 会发现: 期望是两个都…

FAT32取证分析

前言: 在正常工作中经常会有数据恢复或者取证分析的场景,数据是否能被恢复,主要还是看数据是否被覆盖,正常情况下文件虽然被删除,只是修对应的标志位,文件本身数据并不会被破坏,所以我们就可以…

【Java】1.初识Java

文章目录 1. 使用记事本创建.Java程序2. 使用IDEA创建第一个Java程序3. 标识符4. 关键字 1. 使用记事本创建.Java程序 先创建了HelloWorld.java这个文件。然后用Sublime Text记事本打开,输入以下代码。 winr,cmd输入D:切换到D盘,然后输入cd …

投资气膜场馆:开启未来体育发展的新纪元—轻空间

随着对体育设施建设的重视,气膜场馆作为一种创新的体育设施,正日益成为投资的热门选择。气膜场馆凭借其独特的优势和多重好处,不仅能提升体育场馆的功能性和经济性,更为地方经济发展注入了新的活力。 成本效益显著 气膜场馆具有快…

419. 棋盘上的战舰(C++)

题目 给你一个大小为 m x n 的矩阵 board 表示棋盘,其中,每个单元格可以是一艘战舰 X 或者是一个空位 . ,返回在棋盘 board 上放置的 舰队 的数量。 舰队 只能水平或者垂直放置在 board 上。换句话说,舰队只能按 1 x k&#xff…