美文网首页
Redis-6-针对散列和有序集合的常用命令

Redis-6-针对散列和有序集合的常用命令

作者: 冷风_f818 | 来源:发表于2019-04-28 18:14 被阅读0次

上文中,介绍了list和set的一些常用的命令,下面再来看一下散列和有序集合的一些常用的命令

散列(hash)

和java中的hashmap其实是差不多的,redis其实就是存放的键值对,散列也是存放的键值对,,下面来具体看下一下一些常用的操作

hset

hset用来设置key指定的哈希集中指定字段的值, 如果key指定的哈希集不存在,就会创建一个新的哈希集并与key关联,如果字段在哈希集中存在,它将被重写,具体使用如下:

172.16.12.3:6379> hset myhash field1 hello
(integer) 1

这里的返回值:

  • 1: 表示这个field是一个新的字段
  • 0: 表示这个field是原来已经存在的

hget

hget用来返回key指定的哈希集中某一个field的值,如下:

172.16.12.3:6379> hget myhash field1
"hello"

hmset

hmset,批量添加的命令,使用如下:

172.16.12.3:6379> hmset myhash field2 world field3 java field4 php
OK

hmget

是一个批量查询的命令,如下:

172.16.12.3:6379> hmget myhash field1 field2 field3 field4
1) "hello"
2) "world"
3) "java"
4) "php"

hdel

用来删除key指定的哈希集中指定的field,如果这个field不存在,则会被忽略,如下:

172.16.12.3:6379> hdel myhash field1
(integer) 1
172.16.12.3:6379> hmget myhash field1 field2 field3 field4
1) (nil)
2) "world"
3) "java"
4) "php"

hsetnx

hsetnx命令,只在key指定的哈希集中,不存在指定的字段时再设置字段的值,如果是已经存在的,则命令无效,如下:

172.16.12.3:6379> hsetnx myhash field4 c++
(integer) 0
172.16.12.3:6379>  hsetnx myhash field5 c++
(integer) 1

hvals

用来返回key指定的哈希集中的所有字段的值,如下:

172.16.12.3:6379> hvals myhash
1) "world"
2) "java"
3) "php"
4) "c++"

hkeys

用来返回key指定的哈希集中的所有字段的名字,如下:

172.16.12.3:6379> hkeys myhash
1) "field2"
2) "field3"
3) "field4"
4) "field5"

hgetall

返回key指定的哈希集中的所有字段和值,在返回值中,每个字段名的下一个是他的值,返回值的长度是该哈希集大小的两倍,如下:

172.16.12.3:6379> hgetall myhash
1) "field2"
2) "world"
3) "field3"
4) "java"
5) "field4"
6) "php"
7) "field5"
8) "c++"

hexists

用来判断key对应的哈希集中,指定的field是否存在,如下:

172.16.12.3:6379> hexists myhash field1
(integer) 0
172.16.12.3:6379> hexists myhash field2
(integer) 1

hincrby

用来增加key指定的哈希集中指定字段的数值

如果指定的哈希集不存在,那就会创建一个新的hash并与key关联

如果字段不存在,则字段的值在该操作执行前被设置为0

hincrby命令支持的值的范围限定在64位有符号整数

172.16.12.3:6379> hgetall myhash
1) "field2"
2) "world"
3) "field3"
4) "java"
5) "field4"
6) "php"
7) "field5"
8) "c++"


172.16.12.3:6379> hset myhash field6 1
(integer) 1
172.16.12.3:6379> hincrby myhash field6 9
(integer) 10
172.16.12.3:6379> hincrby myhash field7 6
(integer) 6
172.16.12.3:6379> hget myhash field6
"10"
172.16.12.3:6379> hget myhash field7
"6"

hincrbyfloat

和上面的hincrby用法一样,只不过是可以加float类型的数据

172.16.12.3:6379> hincrbyfloat myhash field7 1.55
"7.55"
172.16.12.3:6379> hget myhash field7
"7.55"

hlen

可以获取到key指定的哈希集包含的字段的数量,如下:

172.16.12.3:6379> hkeys myhash
1) "field2"
2) "field3"
3) "field4"
4) "field5"
5) "field6"
6) "field7"

172.16.12.3:6379> hlen myhash
(integer) 6

hstrlen

获取key指定的哈希集中的,指定的field对应的value的长度 ,如果field不存在的话,就返回0,如下:

172.16.12.3:6379> hstrlen myhash field2
(integer) 5
172.16.12.3:6379> hstrlen myhash field7
(integer) 4
172.16.12.3:6379> hstrlen myhash field8
(integer) 0

有序集合(zset)

有序集合类似set,但是每个字符串元素都关联到一个score的数值,里面的元素总是通过score进行着排序,因此它是可以检索的一系列元素

zadd

往键为key的集合里面添加元素

添加时,可以指定多个分数/成员(score/member)对,如果指定添加的成员已经存在,则会更新分数,然后将成员更新到正确的位置,如下:

172.16.12.3:6379> zadd myzset 60 v1
(integer) 1

首先是key,然后分数,最后是值.

zscore

返回有序集合key中, 指定成员的score值,如下:

172.16.12.3:6379> zscore myzset v1
"60"

zrange

zrange 命令可以根据下标返回元素, 要指定开始和结束的下标, 还可以加一个withscores 参数,可以将元素的score

172.16.12.3:6379> zadd myzset 61 v2
(integer) 1
172.16.12.3:6379>  zadd myzset 62 v3
(integer) 1
172.16.12.3:6379>  zadd myzset 63 v4
(integer) 1

172.16.12.3:6379> zrange myzset 0 3
1) "v1"
2) "v2"
3) "v3"
4) "v4"

172.16.12.3:6379> zrange myzset 0 3 withscores
1) "v1"
2) "60"
3) "v2"
4) "61"
5) "v3"
6) "62"
7) "v4"
8) "63"

zrevrange

zrevrange和zrange的功能基本一样,只不过zrevrange返回数据的顺序是反着的,如下:

172.16.12.3:6379> zrevrange myzset 0 3 withscores
1) "v4"
2) "63"
3) "v3"
4) "62"
5) "v2"
6) "61"
7) "v1"
8) "60"
172.16.12.3:6379> zrevrange myzset 0 3
1) "v4"
2) "v3"
3) "v2"
4) "v1"

zcard

可以返回zset中元素的个数,如下:

172.16.12.3:6379> zcard myzset
(integer) 4

zcount

zcount可以返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员的数量

172.16.12.3:6379> zcount myzset 60 63
(integer) 4

如果我们想统计的不需要包含 开始或者结束区间的值,可以加一个(,如下:

172.16.12.3:6379> zcount myzset 60 (63
(integer) 3
172.16.12.3:6379> zcount myzset (60 (63
(integer) 2

zrangebyscore

zrangebyscore,可以按照分数的范围,获取对应的元素,加上withscores可以连score一起返回,如下:

172.16.12.3:6379> zrangebyscore myzset 60 63
1) "v1"
2) "v2"
3) "v3"
4) "v4"
172.16.12.3:6379> zrangebyscore myzset 60 63 withscores
1) "v1"
2) "60"
3) "v2"
4) "61"
5) "v3"
6) "62"
7) "v4"
8) "63"
172.16.12.3:6379> zrangebyscore myzset (60 (63
1) "v2"
2) "v3"

zrank

zrank,可以返回有序集合中指定成员的排名, 在zset中,成员的排名是按照score分数从小到大去排序的,排名是从0开始的,如下:

172.16.12.3:6379> zrank myzset v1
(integer) 0
172.16.12.3:6379> zrank myzset v3
(integer) 2

zrevrank

zrevrank和zrank是差不多的,只不过zrevrank是按照score是从大到小去排序的,如下:

172.16.12.3:6379> zrevrank myzset v3
(integer) 1
172.16.12.3:6379> zrevrank myzset v1
(integer) 3

zincrby

语法是:

zincrby key increment member

为有序集合key的成员member的score值加上增量increment

如果key中不存在member,就在key中添加一个member,score是increment

如果key不存在,就创建一个只含有指定member成员的有序集合.

当key不是有序集类型时,返回一个错误

172.16.12.3:6379> zincrby myzset 10 v1
"70"

zinterstore

语法如下:

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]

该命令是用来计算给定的numkeys个有序集合的交集,并且把结果放到destination中

在给定要计算的key和其它参数之前,必须先给定key个数(numberkeys)

默认情况下,结果集destination中一个元素的分数是有序集合中该元素分数之和,前提是该元素在这些有序集合中都存在,因为交集要求其成员必须是给定的每个有序集合中的成员

WEIGHTS,是在执行的过程中给原score乘以weights后再求和

如果destination存在,就把它覆盖

返回值是结果有序集合destination中元素个数

具体使用如下:

172.16.12.3:6379> zadd zset1 1 one
(integer) 1
172.16.12.3:6379> zadd zset1 2 two
(integer) 1

172.16.12.3:6379> zadd zset2 1 one
(integer) 1
172.16.12.3:6379> zadd zset2 2 two
(integer) 1
172.16.12.3:6379> zadd zset2 3 three
(integer) 1

172.16.12.3:6379> zinterstore outzset 2 zset1 zset2 weights 2 3
(integer) 2
172.16.12.3:6379> zrange outzset 0 -1 withscores
1) "one"
2) "5"
3) "two"
4) "10"

zrem

zrem命令,可以从集合中移除一个元素,如下:

172.16.12.3:6379> zrem outzset one
(integer) 1
172.16.12.3:6379> zrange outzset 0 -1 withscores
1) "two"
2) "10"

zlexcount

命令用于计算有序集合中指定成员之间的成员数量,如下:

172.16.12.3:6379> zrange myzset 0 -1 withscores
1) "v2"
2) "61"
3) "v3"
4) "62"
5) "v4"
6) "63"
7) "v1"
8) "70"

172.16.12.3:6379> zlexcount myzset - +
(integer) 4

172.16.12.3:6379>  zlexcount myzset [v1 [v2
(integer) 1

可以用-和+表示得分最小值和最大值,如果使用成员名的话,一定要在成员名之前加上[.

zrangebylex

zrangebylex返回指定成员区间内的成员,按成员字典正序排序, 分数必须相同,如下:

172.16.12.3:6379> zrangebylex myzset [v1 [v2
1) "v2"
172.16.12.3:6379>  zrangebylex myzset - +
1) "v2"
2) "v3"
3) "v4"
4) "v1"

好了,就介绍这么多的命令,其他需要的话,请参考官方文档

相关文章

  • Redis-6-针对散列和有序集合的常用命令

    述 上文中,介绍了list和set的一些常用的命令,下面再来看一下散列和有序集合的一些常用的命令 散列(hash)...

  • redis-6-有序集合

    有序集合是通过score作为排序的依据 添加元素 成员的个数 某成员的分数 计算成员的排名 删除成员 增加成员分数...

  • Redis高级数据结构及核心命令

    Sorted Set(有序集合); String(字符串); List(列表); Set(集合); Hash(散列...

  • Redis 有序集合

    1 . 有序集合和散列一样都是使用键值对进行存储.a. 有序集合的键称之为成员.b.有序集合的值被称之为分值(分值...

  • redis 基本使用

    什么是redis 键值类型 String字符类型 map散列类型 list列表类型 set 集合类型 有序集合类型...

  • 常用命令

    字符串命令 string类型 列表命令 list类型 集合命令 set类型 有序集合命令 zset类型 散列命令...

  • 2019-04-17 Redis简介 (2)

    数据结构 String: 字符串 Hash: 散列 List: 列表 Set: 集合 Sorted Set: 有序...

  • redis 数据类型

    数据类型 string: 字符串 hash: 散列 list: 列表 set: 集合 sorted set: 有序...

  • redis缓存

    常用命令:常用数据类型redis: String: 字符串 Hash: 散列 List: 列表 Set: 集合 S...

  • 【Redis学习笔记】08 Redis 有序集合基本操作

    1. 有序集合常用命令 命令含义用法ZADD创建有序集合ZADD keyZCARD查看有序集合成员格式ZCARD ...

网友评论

      本文标题:Redis-6-针对散列和有序集合的常用命令

      本文链接:https://www.haomeiwen.com/subject/pmmjnqtx.html