前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis02——一篇终结redis的五种数据类型操作命令(可学习、复习、面试、收藏备用)

redis02——一篇终结redis的五种数据类型操作命令(可学习、复习、面试、收藏备用)

作者头像
用户10127530
发布2022-10-26 18:22:27
6480
发布2022-10-26 18:22:27
举报
文章被收录于专栏:半旧的技术栈半旧的技术栈

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:深入、全面、系统的介绍redis知识 🌰 文章简介:介绍redis常用的命令,相当于mysql中的sql语句,带你快速上手redis操作哟

文章目录

redis的常用数据操作命令

redis的操作命令相当于mysql中的sql语句,可以用来对于数据进行增删改查等操作。

1 redis有关key的操作

1.1 查看数据库中的key

语法:keys pattern 作用:查找所有符合模式pattern的key. pattern可以使用通配符。 通配符: *:表示0或多个字符,例如:keys * 查询所有的key。 ?:表示单个字符,例如:wo?d , 匹配 word , wood [] :表示选择[]内的一个字符,例如wo[or]d, 匹配word, wood, 不匹配wold、woord

demo如下

代码语言:javascript
复制
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set o3 v3
OK
127.0.0.1:6379> keys k*
1) "k2"
2) "k1"
127.0.0.1:6379> set hello hello
OK
127.0.0.1:6379> keys h[ade]llo
1) "hello"

1.2 判断key是否存在

语法:exists key [key…] 作用:判断key是否存在 返回值:整数,存在key返回1,其他返回0。使用多个key,返回存在的key的数量。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> exists hello
(integer) 1
127.0.0.1:6379> exists hello k1 k2 k3
(integer) 3

1.3 移动key到指定的数据库

语法:move key db 作用:移动key到指定的数据库,移动的key在原库被删除。 返回值:移动成功返回1,失败返回0.

demo如下

代码语言:javascript
复制
127.0.0.1:6379> keys *
1) "k2"
2) "o3"
3) "k1"
4) "hello"
127.0.0.1:6379> move o3 1
(integer) 1
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
3) "hello"

1.4 设置key的生存时间

redis会将数据存放在内存中,如果不及时清除不被使用不被使用的数据,将会消耗内存的资源,除了手动删除外,也可以给数据设置生存时间。

语法:expire key seconds 作用:设置key的生存时间,超过时间,key自动删除。单位是秒。 返回值:设置成功返回数字 1,其他情况是 0 。

代码语言:javascript
复制
127.0.0.1:6379> expire k2 20
(integer) 1

1.5查看key的剩余生存时间

可以使用ttl key查看key的剩余生存时间。

语法:ttl key 作用:查看key的剩余生存时间(ttl: time to live),以秒为单位。 返回值: -1 :没有设置key的生存时间, key永不过期。 -2:key不存在

demo如下

代码语言:javascript
复制
127.0.0.1:6379> ttl k2
(integer) 7

1.6 查看key所存储值的数据类型

语法:type key 作用:查看key所存储值的数据类型 返回值:字符串表示的数据类型 none (key不存在) string (字符串) list (列表) set (集合) zset (有序集) hash (哈希表)

demo如下

代码语言:javascript
复制
127.0.0.1:6379> type k1
string

1.7 重命名key(不推荐)

语法:rename key newkey 作用:将key改为名newkey。当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。 当 newkey 已经存在时, RENAME 命令将覆盖旧值。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> keys *
1) "k1"
2) "hello"
127.0.0.1:6379> rename hello k2
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"

1.8 删除存在的key

语法:del key [key…] 作用:删除存在的key,不存在的key忽略。 返回值:数字,删除的key的数量。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> keys *
1) "k2"

2.操作字符串类型数据(string)

字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。

字符串类型的数据操作总的思想是通过key操作value,key是数据标识,value是我们感兴趣的业务数据。

2.1 添加string数据

语法:set key value 功能:将字符串值 value 设置到 key 中,如果key已存在,后放的值会把前放的值覆盖掉。 返回值:OK表示成功 demo如下

代码语言:javascript
复制
127.0.0.1:6379> set zhangsan zhangsan
OK

2.2 获取 key 中设置的字符串值

语法:get key 功能:获取 key 中设置的字符串值 返回值:key存在,返回key对应的value; key不存在,返回nil

demo如下

代码语言:javascript
复制
127.0.0.1:6379> set zhangsan zs
OK
127.0.0.1:6379> get zhangsan
"zs"

2.3 追加字符串

语法:append key value 功能:如果 key 存在,则将 value 追加到 key 原来旧值的末尾 如果 key 不存在,则将新增key,将value 设置值为 value 返回值:追加字符串之后的总长度(字符个数)

demo如下

代码语言:javascript
复制
127.0.0.1:6379> append zhangsan zs
(integer) 4
127.0.0.1:6379> get zhangsan
"zszs"

2.4获取字符串值的长度

语法:strlen key 功能:返回 key 所储存的字符串值的长度 返回值:如果key存在,返回字符串值的长度; key不存在,返回0

demo如下

代码语言:javascript
复制
127.0.0.1:6379> STRLEN zhangsan
(integer) 4

2.5 将字符串数字值自增

语法:incr key 功能:将 key 中储存的数字值加1,如果 key 不存在,则 key 的值先被初始化为 0 再执行incr操作。,非数字值类型报错 返回值:返回加1后的key值

demo如下

代码语言:javascript
复制
127.0.0.1:6379> set zsage 10
OK
127.0.0.1:6379> INCR zsage
(integer) 11
127.0.0.1:6379> INCR zhangsan
(error) ERR value is not an integer or out of range

2.6 将字符串数字值自减

语法:decr key 功能:将 key 中储存的数字值减1,如果 key 不存在,则么 key 的值先被初始化为 0 再执行 decr 操作。 返回值:返回减1后的key值

demo如下

代码语言:javascript
复制
127.0.0.1:6379> DECR zsage
(integer) 10

2.7 将字符串数字值改变偏移量

将字符串数字值增加偏移量

语法:incrby key offset 功能:将 key 所储存的值加上增量值,如果 key 不存在,则 key 的值先被初始化为 0 再执行 INCRBY 命令。 返回值:返回增量之后的key值。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> INCRBY zsage 3
(integer) 13

将字符串数字值减少偏移量

语法:decrby key offset 功能:将 key 所储存的值减去减量值,如果 key 不存在,则 key 的值先被初始化为 0 再执行 DECRBY 命令。 返回值:返回减量之后的key值。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> DECRBY zsage 2
(integer) 11

2.8 截取字符串

语法:getrange key startIndex endIndex 功能:获取 key 中字符串值从 startIndex 开始到 endIndex 结束的子字符串,包括startIndex和endIndex, 下标从0开始,负数表示从字符串的末尾开始,-1 表示最后一个字符。截取的子字符串是闭区间截取的。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> getrange wz 2 6
"ngzho"
127.0.0.1:6379> getrange wz 1 -1
"angzhoushishuaige"

2.9 修改(覆盖)字符串

语法:setrange key offsetIndex value 功能:用value覆盖key的存储的值从offset开始,能够覆盖几个就是几个。 返回值:修改后的字符串的长度。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> setrange wz 4 xiaopengyou
(integer) 18
127.0.0.1:6379> get wz
"wangxiaopengyouige"

2.10 设置数据的同时设置生存时间

语法:setex key seconds value 功能:设置key的值,并将 key 的生存时间设为 seconds (以秒为单位) ,如果key已经存在,将覆盖旧值。 返回值:设置成功,返回OK。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> setex k3 20 v3
OK

2.11 设置字符串数据(不重复)

语法:setnx key value 功能:setnx 是 set if not exists 的简写,如果key不存在,则 set 值,存在则不设置值。 返回值:设置成功,返回1 设置失败,返回0

demo如下

代码语言:javascript
复制
127.0.0.1:6379> setnx k4 v4
(integer) 1
127.0.0.1:6379> setnx k4 v4
(integer) 0

2.12 同时设置一个或多个字符串数据

语法:mset key value [key value…] 功能:同时设置一个或多个 key-value 对 返回值:设置成功,返回OK。

2.13 同时获取一个或多个字符串数据

语法:mget key [key …] 功能:获取所有(一个或多个)给定 key 的值 返回值:包含所有key的列表,如果key不存在,则返回nil。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> mset k4 v4 k5 v5
OK
127.0.0.1:6379> mget k1 k2 k3 k4 k5
1) (nil)
2) "hello"
3) (nil)
4) "v4"
5) "v5"

2.14 设置多个字符串数据(不重复)

语法:msetnx key value[key value…] 功能:同时设置一个或多个 key-value 对,如果有一个key是存在的,则设置不成功。 返回值:设置成功,返回1 设置失败,返回0

demo如下

代码语言:javascript
复制
127.0.0.1:6379> msetnx k5 vv k6 v6
(integer) 0

3.操作列表类型数据(list)

Redis列表是简单的字符串列表,按照插入顺序排序,左边(头部)、右边(尾部)或者中间都可以添加元素。链表的操作无论是头或者尾效率都极高,但是如果对中间元素进行操作,那效率会大大降低了。

列表类型的数据操作总的思想是通过key和下标操作value,key是数据标识,下标是数据在列表中的位置,value是我们感兴趣的业务数据。表头元素的下标是0,依次往后下标都是前一个下标加1.当然也可以按照表尾为-1,依次往前下标减1来表示。

其主要的操作可以参考下图,下面我们将一一讲解。

在这里插入图片描述
在这里插入图片描述

3.1 将一个或多个值依次插入列表表头

语法:lpush key value [value…] 功能:将一个或多个值 value 插入到列表 key 的最左边(表头),各个value值依次插入到表头位置。 返回值:插入之后的列表的长度。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> lpush list01 1 2 3
(integer) 3

3.2 将一个或多个值依次插入列表表尾

语法:rpush key value [value…] 功能:将一个或多个值 value 插入到列表 key 的最右边(表尾),各个 value 值按依次插入到表尾。 返回值:插入之后的列表的长度。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> rpush list02 3 2 1
(integer) 3

3.3 获取列表的元素

语法:lrange key startIndex endIndex 功能:获取列表 key 中指定下标区间内的元素,下标从0开始,到列表长度-1;下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推;startIndex和endIndex超出范围不会报错。 返回值:获取到的元素列表。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> lrange list01 0 2
1) "3"
2) "2"
3) "1"

3.4 移除并返回列表头部第一个元素

语法:lpop key 功能:移除并返回列表key头部第一个元素,即列表左侧的第一个元素。 返回值:列表左侧第一个元素的值;列表key不存在,返回nil。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> lpop list01
"3"
127.0.0.1:6379> lrange list01 0 2
1) "2"
2) "1"

3.5 移除并返回列表尾部第一个元素

语法:rpop key 功能:移除并返回列表key尾部第一个元素,即列表右侧的第一个元素。 返回值:列表右侧第一个元素的值;列表key不存在,返回nil。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> rpop list01
"1"
127.0.0.1:6379> lrange list01 0 2
1) "2"

3.6 获取列表指定下标元素

语法:lindex key index 功能:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。0 表示列表的第一个元素,1 表示列表的第二个元素;index也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 返回值:key存在时,返回指定元素的值; Key不存在时,返回nil。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> lindex list02 1
"2"

3.7 获取列表的长度

语法:llen key 功能:获取列表 key 的长度 返回值:数值,列表的长度;key不存在返回0

demo如下

代码语言:javascript
复制
127.0.0.1:6379> llen list02
(integer) 3

3.8 批量移除列表值为value的元素

语法:lrem key count value 功能:根据参数 count 的值,移除列表中与参数 value 相等的元素, count >0 ,从列表的左侧向右开始移除count个元素; count < 0 从列表的尾部开始移除count个元素; count = 0移除表中所有与 value 相等的值。 返回值:数值,移除的元素个数

demo如下

代码语言:javascript
复制
127.0.0.1:6379> lpush list03 a b c a d e a
(integer) 7
127.0.0.1:6379> lrem list03 1 a
(integer) 1
127.0.0.1:6379> lrange list03 0 -1
1) "e"
2) "d"
3) "a"
4) "c"
5) "b"
6) "a"

3.9 截取列表指定下标区间的元素

语法:ltrim key startIndex endIndex 功能:截取key的指定下标区间的元素,并且赋值给key。下标从0开始,一直到列表长度-1;下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推;startIndex和endIndex超出范围不会报错。 返回值:执行成功返回ok

demo如下

代码语言:javascript
复制
127.0.0.1:6379> ltrim list03 0 -2
OK
127.0.0.1:6379> lrange list03 0 -1
1) "e"
2) "d"
3) "a"
4) "c"
5) "b"

3.10 修改列表指定下标的元素

语法:lset key index value 功能:将列表 key 下标为 index 的元素的值设置为 value。 功能:设置成功返回ok ; key不存在或者index超出范围返回错误信息。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> lrange list01 0 -1
1) "3"
2) "2"
3) "1"
4) "0"
127.0.0.1:6379> lset list01 0 4
OK
127.0.0.1:6379> lrange list01 0 -1
1) "4"
2) "2"
3) "1"
4) "0"

3.11 在指定位置插入元素

语法:linsert key before/after pivot value 功能:将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。key不存在或者pivot不在列表中,不执行任何操作。 返回值:命令执行成功,返回新列表的长度。没有找到pivot返回 -1, key不存在返回0。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> linsert list01 before 2 x
(integer) 5
127.0.0.1:6379> lrange list01 0 -1
1) "4"
2) "x"
3) "2"
4) "1"
5) "0"

4.操作集合类型数据(set)

Redis的Set是string类型的无序不重复集合。集合类型的数据操作总的思想是通过key确定集合,key是集合标识,元素没有下标,只有直接操作业务数据和数据的个数。

4.1 集合中添加元素

语法:sadd key member [member…] 功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。 返回值:加入到集合的新元素的个数(不包括被忽略的元素)。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> sadd set01 a a b b c c
(integer) 3

4.2 获取集合中的所有元素

语法:smembers key 功能:获取集合 key 中的所有成员元素,不存在的key视为空集合。 返回值:返回指定集合的所有元素集合,不存在的key,返回空集合。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> smembers set01
1) "c"
2) "b"
3) "a"

4.3 判断元素是否存在于集合

语法:sismember key member 功能:判断 member 元素是否是集合 key 的元素 返回值:member是集合成员返回1,其他返回 0 。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> sismember set01 a
(integer) 1

4.4 获取集合里面的元素个数

语法:scard key 功能:获取集合里面的元素个数 返回值:数字,key的元素个数。其他情况返回 0 。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> scard set01
(integer) 3

4.5 移除集合中一个或多个元素

语法:srem key member [member…] 功能:移除集合中一个或多个元素,不存在的元素被忽略。 返回值:数字,成功移除的元素个数,不包括被忽略的元素。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> srem set01 a
(integer) 1
127.0.0.1:6379> smembers set01
1) "c"
2) "b"

4.6 随机返回集合中n个元素

语法:srandmember key[count] 功能:只提供key,随机返回集合中一个元素,元素不删除,依然在集合中; 提供了count时,count 正数, 返回包含count个数元素的集合,集合元素各不重复。count是负数,返回一个count绝对值的长度的集合,集合中元素可能会重复多次。 返回值:一个元素或者多个元素的集合

demo如下

代码语言:javascript
复制
127.0.0.1:6379> srandmember set01
"c"
127.0.0.1:6379> srandmember set01 2
1) "c"
2) "b"
127.0.0.1:6379> srandmember set01 3
1) "c"
2) "b"
127.0.0.1:6379> srandmember set01 -3
1) "b"
2) "c"
3) "b"

4.7 随机从集合中删除n个元素

语法:spop key[count] 功能:随机从集合中删除一个或count个元素。 返回值:被删除的元素,key不存在或空集合返回nil。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> spop set01
"c"

4.8 元素移动

语法:smove src dest member 功能:将 member 元素从src集合移动到dest集合,member不存在,smove不执行操作,返回0,如果dest存在member,则仅从src中删除member。 返回值:成功返回 1 ,其他返回 0 。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> smove set01 set02 b
(integer) 1
127.0.0.1:6379> smembers set02
1) "b"

4.9集合比较

语法:sdiff key key [key…] 功能:返回指定集合的差集,以第一个集合为准进行比较,即第一个集合中有但在其它任何集合中都没有的元素组成的集合。 返回值:返回第一个集合中有而后边集合中都没有的元素组成的集合,如果第一个集合中的元素在后边集合中都有则返回空集合。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> sadd set01 a b c d e f
(integer) 6
127.0.0.1:6379> sadd set02 b e f
(integer) 3
127.0.0.1:6379> sdiff set01 set02
1) "d"
2) "c"
3) "a"

4.10 返回指定集合的交集

语法:sinter key key [key…] 功能:返回指定集合的交集,即指定的所有集合中都有的元素组成的集合。 返回值:交集元素组成的集合,如果没有则返回空集合。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> sinter set01 set02
1) "f"
2) "e"
3) "b"

4.11 返回指定集合的并集

语法:sunion key key [key…] 功能:返回指定集合的并集,即指定的所有集合元素组成的大集合,如果元素有重复,则保留一个。 返回值:返回所有集合元素组成的大集合,如果所有key都不存在,返回空集合。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> sunion set01 set02
1) "f"
2) "c"
3) "d"
4) "a"
5) "e"
6) "b"

5.操作哈希类型数据(hash)

Redis的hash 是一个string类型的key和value的映射表,这里的value是一系列的键值对,hash特别适合用于存储对象。

哈希类型的数据操作总的思想是通过key和field操作value,key是数据标识,field是域,value是我们感兴趣的业务数据。

5.1 添加元素(覆盖)

语法:hset key field value [field value …] 功能:将键值对field-value设置到哈希列表key中,如果key不存在,则新建哈希列表,然后执行赋值,如果key下的field已经存在,则value值覆盖。 返回值:返回设置成功的键值对个数。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hset user id 1001
(integer) 1
127.0.0.1:6379> hset user name zhangsan age 20
(integer) 2

5.2 查找元素

语法:hget key field 功能:获取哈希表 key 中给定域 field 的值。 返回值:field域的值,如果key不存在或者field不存在返回nil。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hget user name
"zhangsan"

5.3 插入多个元素

语法:hmset key field value [field value…] 功能:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,再执行hmset. 返回值:设置成功返回ok,如果失败返回一个错误。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hmset user id 1001 name zhangsan age 11
OK
127.0.0.1:6379> hget user age
"11"

💡 Q:hmset于hset有什么区别 As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code. 根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。 ——redis 官网

5.4获取多个元素

语法:hmget key field [field…] 功能:获取哈希表 key 中一个或多个给定域的值 返回值:返回和field顺序对应的值,如果field不存在,返回nil。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hmget user id age name sex
1) "1001"
2) "11"
3) "zhangsan"
4) (nil)
127.0.0.1:6

5.5 获取所有元素

语法:hgetall key 功能:获取哈希表 key 中所有的域和值 返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash.

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hgetall user
1) "id"
2) "1001"
3) "name"
4) "zhangsan"
5) "age"
6) "11"

5.6 删除元素

语法:hdel key field [field…] 功能:删除哈希表 key 中的一个或多个指定域field,不存在field直接忽略。 返回值:成功删除的field的数量。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hdel user name
(integer) 1
127.0.0.1:6379> hgetall user
1) "id"
2) "1001"
3) "age"
4) "11"

5.7 返回长度

语法:hlen key 功能:获取哈希表 key 中域field的个数 返回值:数值,field的个数。key不存在返回0.

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hlen user
(integer) 2

5.8 查找元素

语法:hexists key field 功能:查看哈希表 key 中,给定域 field 是否存在 返回值:如果field存在,返回1,其他返回0。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hexists user id
(integer) 1

5.9获取所有键

语法:hkeys key 功能:查看哈希表 key 中的所有field域列表 返回值:包含所有field的列表,key不存在返回空列表

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hkeys user
1) "id"
2) "age"

5.10 获取所有值

语法:hvals key 功能:返回哈希表 中所有域的值列表 返回值:包含哈希表所有域值的列表,key不存在返回空列表。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hvals user
1) "1001"
2) "11"

5.11 值增加整数值

语法:hincrby key field int 功能:给哈希表key中的field域增加int 返回值:返回增加之后的field域的值

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hget user age
"11"
127.0.0.1:6379> hincrby user age 2
(integer) 13
127.0.0.1:6379> hget user age
"13"

5.12 值增加小数值

语法:hincrbyfloat key field float 功能:给哈希表key中的field域增加float 返回值:返回增加之后的field域的值

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hincrbyfloat user age 2.1
"15.1"

5.13 添加元素(不覆盖)

语法:hsetnx key field value 功能:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。 返回值:设值成功返回1,其他返回0.

demo如下

代码语言:javascript
复制
127.0.0.1:6379> hgetall user
1) "id"
2) "1001"
3) "age"
4) "15.1"
127.0.0.1:6379> hsetnx user name lili
(integer) 1
127.0.0.1:6379> hsetnx user age 11
(integer) 0
127.0.0.1:6379> hgetall user
1) "id"
2) "1001"
3) "age"
4) "15.1"
5) "name"
6) "lili"

6.操作有序集合类型(Zset)

Redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。

不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

6.1 添加元素

语法:zadd key score member [score member…] 功能:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果member存在集合中,则覆盖原来的值;score可以是整数或浮点数. 返回值:数字,新添加的元素个数.

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zadd zset01 20 z1 30 z2 50 z3 40 z4
(integer) 4

6.2 查找指定区间元素(按位序,递增排序)

语法:zrange key startIndex endIndex [WITHSCORES] 功能:查询有序集合,指定区间的内的元素。集合成员按score值从小到大来排序;startIndex和endIndex都是从0开始表示第一个元素,1表示第二个元素,以此类推; startIndex和endIndex都可以取负数,表示从后往前取,-1表示倒数第一个元素;WITHSCORES选项让score和value一同返回。 返回值:指定区间的成员组成的集合。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zrange zset01 0 -1
1) "z1"
2) "z2"
3) "z4"
4) "z3"
127.0.0.1:6379> zrange zset01 0 -1 WITHSCORES
1) "z1"
2) "20"
3) "z2"
4) "30"
5) "z4"
6) "40"
7) "z3"
8) "50"

6.3 查找指定区间元素(按分数,递增)

语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count] 功能:获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括min和max)的成员,有序成员是按递增(从小到大)排序; 使用符号”(“ 表示包括min但不包括max; withscores 显示score和 value; limit用来限制返回结果的数量和区间,在结果集中从第offset个开始,取count个。 返回值:指定区间的集合数据

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zrangebyscore zset01 0 40  WITHSCORES
1) "z1"
2) "20"
3) "z2"
4) "30"
5) "z4"
6) "40"

6.4 删除成员

语法:zrem key member [member…] 功能:删除有序集合 key 中的一个或多个成员,不存在的成员被忽略。 返回值:被成功删除的成员数量,不包括被忽略的成员。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zrem zset01 z4
(integer) 1

6.5 获取元素个数

语法:zcard key 作用:获取有序集 key 的元素成员的个数。 返回值:key存在,返回集合元素的个数; key不存在,返回0。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zcard zset01
(integer) 3

6.6 统计指定分数区间元素个数

语法:zcount key min max 功能:返回有序集 key 中, score 值在 min 和 max 之间(包括 score 值等于 min 或 max )的成员的数量。 返回值:指定有序集合中分数在指定区间内的元素数量。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zcount zset01 10 30
(integer) 2

6.7 获取元素排名(递增)

语法:zrank key member 功能:获取有序集 key 中成员 member 的排名,有序集成员按 score 值从小到大顺序排列,从0开始排名,score最小的是0 。 返回值:指定元素在有序集合中的排名;如果指定元素不存在,返回nil。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zrank zset01 z4
(nil)
127.0.0.1:6379> zrank zset01 z3
(integer) 2

6.8 获取元素的分数

语法:zscore key member 功能:获取有序集合key中元素member的分数。 返回值:返回指定有序集合元素的分数。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zscore zset01 z3
"50"

6.9 获取元素的排名(递减)

语法:zrevrank key member 功能:获取有序集 key 中成员 member 的排名,有序集成员按 score 值从大到小顺序排列,从0开始排名,score最大的是0 。 返回值:指定元素在有序集合中的排名;如果指定元素不存在,返回nil。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zrevrank zset01 z3
(integer) 0
127.0.0.1:6379> zrevrank zset01 z2
(integer) 1

6.10 查找指定区间元素(按位序,递减)

语法:zrevrange key startIndex endIndex [WITHSCORES] 功能:查询有序集合,指定区间的内的元素。集合成员按score值从大到小来排序;startIndex和endIndex都是从0开始表示第一个元素,1表示第二个元素,以此类推; startIndex和endIndex都可以取负数,表示从后往前取,-1表示倒数第一个元素;WITHSCORES选项让score和value一同返回。 返回值:指定区间的成员组成的集合。

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zrevrange zset01 0 -1 withscores
1) "z3"
2) "50"
3) "z2"
4) "30"
5) "z1"
6) "20"

6.11查找指定区间元素(按分数,递减)

语法:zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count] 功能:获取有序集 key 中,所有 score 值介于 max 和 min 之间(包括max和min)的成员,有序成员是按递减(从大到小)排序; 使用符号”(“ 表示不包括min和max; withscores 显示score和 value; limit用来限制返回结果的数量和区间,在结果集中从第offset个开始,取count个。 返回值:指定区间的集合数据

demo如下

代码语言:javascript
复制
127.0.0.1:6379> zrevrangebyscore  zset01 100 0 withscores limit 0 2
1) "z3"
2) "50"
3) "z2"
4) "30"
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • redis的常用数据操作命令
    • 1 redis有关key的操作
      • 1.1 查看数据库中的key
      • 1.2 判断key是否存在
      • 1.3 移动key到指定的数据库
      • 1.4 设置key的生存时间
      • 1.5查看key的剩余生存时间
      • 1.6 查看key所存储值的数据类型
      • 1.7 重命名key(不推荐)
      • 1.8 删除存在的key
    • 2.操作字符串类型数据(string)
      • 2.1 添加string数据
      • 2.2 获取 key 中设置的字符串值
      • 2.3 追加字符串
      • 2.4获取字符串值的长度
      • 2.5 将字符串数字值自增
      • 2.6 将字符串数字值自减
      • 2.7 将字符串数字值改变偏移量
      • 2.8 截取字符串
      • 2.9 修改(覆盖)字符串
      • 2.10 设置数据的同时设置生存时间
      • 2.11 设置字符串数据(不重复)
      • 2.12 同时设置一个或多个字符串数据
      • 2.13 同时获取一个或多个字符串数据
      • 2.14 设置多个字符串数据(不重复)
    • 3.操作列表类型数据(list)
      • 3.1 将一个或多个值依次插入列表表头
      • 3.2 将一个或多个值依次插入列表表尾
      • 3.3 获取列表的元素
      • 3.4 移除并返回列表头部第一个元素
      • 3.5 移除并返回列表尾部第一个元素
      • 3.6 获取列表指定下标元素
      • 3.7 获取列表的长度
      • 3.8 批量移除列表值为value的元素
      • 3.9 截取列表指定下标区间的元素
      • 3.10 修改列表指定下标的元素
      • 3.11 在指定位置插入元素
    • 4.操作集合类型数据(set)
      • 4.1 集合中添加元素
      • 4.2 获取集合中的所有元素
      • 4.3 判断元素是否存在于集合
      • 4.4 获取集合里面的元素个数
      • 4.5 移除集合中一个或多个元素
      • 4.6 随机返回集合中n个元素
      • 4.7 随机从集合中删除n个元素
      • 4.8 元素移动
      • 4.9集合比较
      • 4.10 返回指定集合的交集
      • 4.11 返回指定集合的并集
    • 5.操作哈希类型数据(hash)
      • 5.1 添加元素(覆盖)
      • 5.2 查找元素
      • 5.3 插入多个元素
      • 5.4获取多个元素
      • 5.5 获取所有元素
      • 5.6 删除元素
      • 5.7 返回长度
      • 5.8 查找元素
      • 5.9获取所有键
      • 5.10 获取所有值
      • 5.11 值增加整数值
      • 5.12 值增加小数值
      • 5.13 添加元素(不覆盖)
    • 6.操作有序集合类型(Zset)
      • 6.1 添加元素
      • 6.2 查找指定区间元素(按位序,递增排序)
      • 6.3 查找指定区间元素(按分数,递增)
      • 6.4 删除成员
      • 6.5 获取元素个数
      • 6.6 统计指定分数区间元素个数
      • 6.7 获取元素排名(递增)
      • 6.8 获取元素的分数
      • 6.9 获取元素的排名(递减)
      • 6.10 查找指定区间元素(按位序,递减)
      • 6.11查找指定区间元素(按分数,递减)
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档