述
上文中,介绍了list和set的一些常用的命令,下面再来看一下散列和有序集合的一些常用的命令
散列(hash)
和java中的hashmap其实是差不多的,redis其实就是存放的键值对,散列也是存放的键值对,,下面来具体看下一下一些常用的操作
hset
hset用来设置key指定的哈希集中指定字段的值, 如果key指定的哈希集不存在,就会创建一个新的哈希集并与key关联,如果字段在哈希集中存在,它将被重写,具体使用如下:
1 | 172.16.12.3:6379> hset myhash field1 hello |
这里的返回值:
- 1: 表示这个field是一个新的字段
- 0: 表示这个field是原来已经存在的
hget
hget用来返回key指定的哈希集中某一个field的值,如下:1
2172.16.12.3:6379> hget myhash field1
"hello"
hmset
hmset,批量添加的命令,使用如下:1
2172.16.12.3:6379> hmset myhash field2 world field3 java field4 php
OK
hmget
是一个批量查询的命令,如下:1
2
3
4
5172.16.12.3:6379> hmget myhash field1 field2 field3 field4
1) "hello"
2) "world"
3) "java"
4) "php"
hdel
用来删除key指定的哈希集中指定的field,如果这个field不存在,则会被忽略,如下:1
2
3
4
5
6
7172.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指定的哈希集中,不存在指定的字段时再设置字段的值,如果是已经存在的,则命令无效,如下:1
2
3
4172.16.12.3:6379> hsetnx myhash field4 c++
(integer) 0
172.16.12.3:6379> hsetnx myhash field5 c++
(integer) 1
hvals
用来返回key指定的哈希集中的所有字段的值,如下:1
2
3
4
5172.16.12.3:6379> hvals myhash
1) "world"
2) "java"
3) "php"
4) "c++"
hkeys
用来返回key指定的哈希集中的所有字段的名字,如下:1
2
3
4
5172.16.12.3:6379> hkeys myhash
1) "field2"
2) "field3"
3) "field4"
4) "field5"
hgetall
返回key指定的哈希集中的所有字段和值,在返回值中,每个字段名的下一个是他的值,返回值的长度是该哈希集大小的两倍,如下:1
2
3
4
5
6
7
8
9172.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是否存在,如下:1
2
3
4172.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位有符号整数
1 | 172.16.12.3:6379> hgetall myhash |
hincrbyfloat
和上面的hincrby用法一样,只不过是可以加float类型的数据1
2
3
4172.16.12.3:6379> hincrbyfloat myhash field7 1.55
"7.55"
172.16.12.3:6379> hget myhash field7
"7.55"
hlen
可以获取到key指定的哈希集包含的字段的数量,如下:1
2
3
4
5
6
7
8
9
10172.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,如下:
1 | 172.16.12.3:6379> hstrlen myhash field2 |
有序集合(zset)
有序集合类似set,但是每个字符串元素都关联到一个score的数值,里面的元素总是通过score进行着排序,因此它是可以检索的一系列元素
zadd
往键为key的集合里面添加元素
添加时,可以指定多个分数/成员(score/member)对,如果指定添加的成员已经存在,则会更新分数,然后将成员更新到正确的位置,如下:
1 | 172.16.12.3:6379> zadd myzset 60 v1 |
首先是key,然后分数,最后是值.
zscore
返回有序集合key中, 指定成员的score值,如下:1
2172.16.12.3:6379> zscore myzset v1
"60"
zrange
zrange 命令可以根据下标返回元素, 要指定开始和结束的下标, 还可以加一个withscores 参数,可以将元素的score
1 | 172.16.12.3:6379> zadd myzset 61 v2 |
zrevrange
zrevrange和zrange的功能基本一样,只不过zrevrange返回数据的顺序是反着的,如下:
1 | 172.16.12.3:6379> zrevrange myzset 0 3 withscores |
zcard
可以返回zset中元素的个数,如下:1
2172.16.12.3:6379> zcard myzset
(integer) 4
zcount
zcount可以返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员的数量
1 | 172.16.12.3:6379> zcount myzset 60 63 |
如果我们想统计的不需要包含 开始或者结束区间的值,可以加一个(,如下:1
2
3
4172.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一起返回,如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17172.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开始的,如下:
1 | 172.16.12.3:6379> zrank myzset v1 |
zrevrank
zrevrank和zrank是差不多的,只不过zrevrank是按照score是从大到小去排序的,如下:1
2
3
4172.16.12.3:6379> zrevrank myzset v3
(integer) 1
172.16.12.3:6379> zrevrank myzset v1
(integer) 3
zincrby
语法是:1
zincrby key increment member
为有序集合key的成员member的score值加上增量increment
如果key中不存在member,就在key中添加一个member,score是increment
如果key不存在,就创建一个只含有指定member成员的有序集合.
当key不是有序集类型时,返回一个错误
1 | 172.16.12.3:6379> zincrby myzset 10 v1 |
zinterstore
语法如下:1
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]
该命令是用来计算给定的numkeys个有序集合的交集,并且把结果放到destination中
在给定要计算的key和其它参数之前,必须先给定key个数(numberkeys)
默认情况下,结果集destination中一个元素的分数是有序集合中该元素分数之和,前提是该元素在这些有序集合中都存在,因为交集要求其成员必须是给定的每个有序集合中的成员
WEIGHTS,是在执行的过程中给原score乘以weights后再求和
如果destination存在,就把它覆盖
返回值是结果有序集合destination中元素个数
具体使用如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19172.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命令,可以从集合中移除一个元素,如下:1
2
3
4
5172.16.12.3:6379> zrem outzset one
(integer) 1
172.16.12.3:6379> zrange outzset 0 -1 withscores
1) "two"
2) "10"
zlexcount
命令用于计算有序集合中指定成员之间的成员数量,如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15172.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返回指定成员区间内的成员,按成员字典正序排序, 分数必须相同,如下:1
2
3
4
5
6
7172.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"
好了,就介绍这么多的命令,其他需要的话,请参考官方文档