您的位置:首页 > 数据库 > Redis

Redis大总结之一:Redis 五大数据类型及操作

2017-03-31 14:44 633 查看

Redis :6379

数据类型:strings,Lists(列表),Sets(集合),Sorted sets(有序集合),Hashes(哈希表)

一:Redis 数据类型及操作

strings 类型及操作

Ø  set/get操作:

127.0.0.1:6379> set name zhangsan

OK

127.0.0.1:6379> get name

"zhangsan"

Ø  getset操作:设置key的值,并返回key的旧值

127.0.0.1:6379> get name

"zhangsan"

127.0.0.1:6379> getset name lisi

"zhangsan"

127.0.0.1:6379> get name

"lisi"

若key不存在,则创建key并赋值后返回nil

127.0.0.1:6379> getset name_s wang

(nil)

127.0.0.1:6379> get name_s

"wang"

Ø  setnx操作:设置key对应的值为string类型的value。如果key已经存在,不赋值,返回0,nx是not exist的意思。

127.0.0.1:6379> get name

"lisi"

127.0.0.1:6379> SETNX name lisi_new

(integer) 0

127.0.0.1:6379> get name

"lisi"

如果key不存在则直接赋值,返回1

127.0.0.1:6379> setnx name1 wangwu

(integer) 1

127.0.0.1:6379> get name1

"wangwu"

 

Ø  setex操作:设置key对应的值为string类型的value,并指定此键对应的有效期。如下:添加一个color=red的键值对,并指定它的有效期是10秒,有效期内get可以取    值,否则返回nil。

127.0.0.1:6379> setex color 10red

OK

127.0.0.1:6379> get color

"red"

127.0.0.1:6379> get color

(nil)

Ø  setrange操作:设置指定key的vaule值的子字符串。如下: 修改已有key的邮箱地址,name 后面的8是指从下标为8(包括8)开始替换

127.0.0.1:6379> get name

"yakesun@163.com"

127.0.0.1:6379> setrange name  126.com

(integer) 15

127.0.0.1:6379> get name

"yakesun@126.com"

 

Ø  incr操作:递增整数

127.0.0.1:6379> get age

"10"

127.0.0.1:6379> incr age

(integer) 11

127.0.0.1:6379> get age

"11"

Ø  incrby操作:增加指定的整数

127.0.0.1:6379> get age

"11"

127.0.0.1:6379> incrby age 10

(integer) 21

Ø  decr操作:递减整数

127.0.0.1:6379> get age

"21"

127.0.0.1:6379> decr age

(integer) 20返回值为运算结果

Ø  decrby操作:递减指定的整数

127.0.0.1:6379> get age

"20"

127.0.0.1:6379> DECRBY age 10

(integer) 10

Ø  incrbyfloat操作:增加指定浮点数

127.0.0.1:6379> get flow

"1.1"

127.0.0.1:6379> INCRBYFLOAT flow 1.1

"2.2"

Ø  append操作:向尾部追加值

127.0.0.1:6379> set name hello

OK

127.0.0.1:6379> append name " redis"

(integer) 11

127.0.0.1:6379> get name

"hello redis"

 

Ø  strlen操作:获取字符串长度

127.0.0.1:6379> get name

"hello redis"

127.0.0.1:6379> strlen name

(integer) 11

 

Ø  mset/mget操作:同事设置/获取多个键值

127.0.0.1:6379> mset a aa b bb c cc

OK

127.0.0.1:6379> mget a b c

1) "aa"

2) "bb"

3) "cc"

 

Ø  getbit/setbit/bitcount/bitop操作:位操作

 

 

散列类型

Ø  hset/hget操作:赋值与取值

127.0.0.1:6379[3]> hset car name bmw

(integer) 1

127.0.0.1:6379[3]> hget car name

"bmw"

 

Ø  hmset/hmget操作:同事设置多个值/取多个值

127.0.0.1:6379[3]> hmset car xinghao x5  pailiang  2T

OK

127.0.0.1:6379[3]> hmget car xinghao pailiang

1) "x5"

2) "2T"

 

Ø  hgetall操作:获取散列集合键中左右元素名称和值

127.0.0.1:6379[3]> hgetall car

1) "name"

2) "bmw"

3) "xinghao"

4) "x5"

5) "pailiang"

6) "2T"

 

Ø  hexists操作:判断字段是否存在

127.0.0.1:6379[3]> hexists car name

(integer) 1–存在即返回1

127.0.0.1:6379[3]> hexists car ss

(integer) 0--不存在即返回0

 

Ø  hsetnx操作:当字段不存在时赋值

127.0.0.1:6379[3]> hsetnx car guoji deguo

(integer) 1

127.0.0.1:6379[3]> hgetall car

1) "name"

2) "bmw"

3) "xinghao"

4) "x5"

5) "pailiang"

6) "2T"

7) "guoji"

8) "deguo"

 

Ø  hincrby操作:增加数字

127.0.0.1:6379[3]> hsetnx car _id 1

(integer) 1

127.0.0.1:6379[3]> hget car _id

"1"

127.0.0.1:6379[3]> hincrby car _id 10

(integer) 11

127.0.0.1:6379[3]> hget car _id

"11"

 

Ø  hdel操作:删除字段

127.0.0.1:6379[3]> hdel car guoji pailiang

(integer) 2

127.0.0.1:6379[3]> hgetall car

1) "name"

2) "bmw"

3) "xinghao"

4) "x5"

5) "_id"

6) "11"

 

Ø  hkeys/hvals操作:只获取字段名/字段值

127.0.0.1:6379[3]> hkeys car

1) "name"

2) "xinghao"

3) "_id"

127.0.0.1:6379[3]> hvals car

1) "bmw"

2) "x5"

3) "11"

 

Ø  hlen操作:获得字段数量

127.0.0.1:6379[3]> hlen car

(integer) 3

127.0.0.1:6379[3]> hkeys car

1) "name"

2) "xinghao"

3) "_id"

 

列表类型

Ø  Lpush/Rpush操作:向列表左/右增加元素(可同时增加多个元素)

127.0.0.1:6379[3]> lpush list a b c d

(integer) 4

127.0.0.1:6379[3]> lrange list 0 -1

1) "d"

2) "c"

3) "b"

4) "a"

127.0.0.1:6379[3]> rpush list 1 2 3 4

(integer) 8

127.0.0.1:6379[3]> lrange list 0 -1

1) "d"

2) "c"

3) "b"

4) "a"

5) "1"

6) "2"

7) "3"

8) "4"

 

Ø  Lpop/Rpop操作:从列表左/右端弹出元素

127.0.0.1:6379[4]> lrange list 0 -1

1) "d"

2) "c"

3) "b"

4) "a"

127.0.0.1:6379[4]>lpop list

"d"

127.0.0.1:6379[4]>rpop list

"a"

127.0.0.1:6379[4]> lrange list 0 -1

1) "c"

2) "b"

 

Ø  Llen操作:获取列表长度

127.0.0.1:6379[4]> llen list

(integer) 2

 

Ø  Lrange操作:获取列表片段(redis列表起始索引为0)

127.0.0.1:6379[4]> lrange list 0 -1

1) "c"

2) "b"

 

Ø  Lrem操作:删除列表中指定的值

n 语法:lrem  key  count value ;lrem命令会删除列表中前count个值为value的元素,返回值为实际删除的元素的个数。

u 当count>0时,lrem命令会从列表左边开始删除前count个值为value的元素。

127.0.0.1:6379[4]> lrange list 0 -1

1) "a"

2) "f"

3) "a"

4) "d"

5) "c"

6) "b"

7) "a"

8) "b"

9) "a"

------即列表从左到右格式为:afadcbaba

127.0.0.1:6379[4]>lrem list 2 a

(integer) 2

127.0.0.1:6379[4]> lrange list 0 -1

1) "f"

2) "d"

3) "c"

4) "b"

5) "a"

6) "b"

7) "a"

------即列表从左到右格式为:fdcbaba

 

u 当count<0时,lrem命令会从列表右边开始删除前count个值为value的元素。

操作前列表:fdcbaba

127.0.0.1:6379[4]> lrem list -2 a

(integer) 2

127.0.0.1:6379[4]> lrange list 0 -1

1) "f"

2) "d"

3) "c"

4) "b"

5) "b"

-----即列表从左到右格式为:fdcbb

 

u 当count=0时,lrem命令会从列表删除所有值为value的元素。

操作前列表:fdcbb

127.0.0.1:6379[4]> lrem list 0 b

(integer) 2

127.0.0.1:6379[4]> lrange list 0 -1

1) "f"

2) "d"

3) "c"

-----即列表从左到右格式为:fdc

 

Ø  Lindex操作:获取指定索引的元素值

n 语法:lindex  key    index

u 如果要将列表类型当做数组来用,Lindex命令是必不可少的。Lindex命令用来返回指定索引的元素,索引从0开始。

u 如果index是负数则表示从右边开始计算的索引,最右边元素的索引为-1.

127.0.0.1:6379[4]> lrange list 0 -1

1) "f"---索引是0

2) "d"---索引是1

3) "c" ---索引是2

127.0.0.1:6379[4]> lindex list 2

"c"

127.0.0.1:6379[4]> lindex list -1

"c"

 

Ø  Lset操作:设置指定索引的元素值

n 语法:Lset   key  index   value

127.0.0.1:6379[4]> lrange list 0 -1

1) "f"

2) "d"

3) "c"

127.0.0.1:6379[4]>lset list 2 ccc

OK

127.0.0.1:6379[4]> lrange list 0 -1

1) "f"

2) "d"

3) "ccc"

 

Ø  Ltrim操作:只保留列表指定片段

n 语法:Ltrim         key     start     end

n Ltrim命令可以删除指定索引范围之外的所有元素,其指定列表范围的方法和Lrange命令相同。

n Ltrim命令常和Lpush命令一起使用来限制列表中元素的数量,比如记录日志时我们希望只保留最新的100条日志,则每次加入新元素时调用一次Ltrim命令即可。

127.0.0.1:6379[4]> lrange list 0 -1

1) "j"

2) "i"

3) "h"

4) "g"

5) "f"

6) "d"

127.0.0.1:6379[4]>ltrim list 2 4

OK

127.0.0.1:6379[4]> lrange list 0 -1

1) "h"

2) "g"

3) "f"

 

Ø  Linsert操作:向列表中插入元素

n 语法:Linsert     key  before|after        pivot      value

n Linsert命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是before还是after来决定将value插入到该元素的前(左)边还是后(右)边。

n Linsert命令的返回值是植入元素后的列表的元素个数。

127.0.0.1:6379[4]> linsert list before
b c

(integer) 2

127.0.0.1:6379[4]> linsert list after b a

(integer) 3

127.0.0.1:6379[4]> lrange list 0 -1

1) "c"

2) "b"

3) "a"

元素列表格式为:cba

 

Ø  RpopLpush操作:将元素从一个列表转到另一个列表

n 语法:RpopLpush      source   destination

n RpopLpush命令是先执行Rpop命令再执行Lpush命令。会先从source列表的右端弹出一个元素,然后将其加入到destination列表类型键的左边,整个过程是原子的。

127.0.0.1:6379[4]>rpoplpush list list2

"a"

127.0.0.1:6379[4]> lrange list 0 -1

1) "c"

2) "b"

127.0.0.1:6379[4]> lrange list2 0 -1

1) "a"

127.0.0.1:6379[4]> rpoplpush list list2

"b"

127.0.0.1:6379[4]> lrange list 0 -1

1) "c"

127.0.0.1:6379[4]> lrange list2 0 -1

1) "b"

2) "a"

 

集合类型

Ø  Sadd操作:增加元素

n 语法:sadd         key         member              [member…]

127.0.0.1:6379[4]> sadd set 1 2 3 4

(integer) 4

127.0.0.1:6379[4]> smembers set

1) "1"

2) "2"

3) "3"

4) "4"

 

 

Ø  Srem操作:删除元素

n 语法:srem        key         member              [member…]

127.0.0.1:6379[4]> srem set 3 2

(integer) 2

127.0.0.1:6379[4]> smembers set

1) "1"

2) "4"

 

 

Ø  Smembers操作:获得集合中的所有元素

n 语法:smembers      key

 

Ø  Sismember操作:判断元素是否再集合中

n 当值存在时Sismember命令返回1,当值不存在或者键不存在时返回0

127.0.0.1:6379[4]> smembers set

1) "1"

2) "4"

127.0.0.1:6379[4]> sismember set 4   //集合中存在4,则返回1

(integer) 1

127.0.0.1:6379[4]> sismember set 2   //集合中不存在2,则返回0

(integer) 0

 

 

Ø  Sdiff | Sinter | Sunion 操作:集合间运算:差集 | 交集 | 并集

n 差集语法:sdiff           key [key…]

n 交集语法:sinter             key  [key…]

n 并集语法:sunion            key  [key…]

Sdiff差集:

127.0.0.1:6379[4]> sadd k1 a b c

(integer) 3

127.0.0.1:6379[4]> sadd k2 b c

(integer) 2

127.0.0.1:6379[4]> sdiff k1 k2

1) "a"

Sinter交集:

127.0.0.1:6379[4]> sinter k1 k2

1) "c"

2) "b"

Sunion并集:

127.0.0.1:6379[4]> sunion k1 k2

1) "a"

2) "c"

3) "b"

 

 

Ø  Scard操作:获得集合中元素个数

n 语法:scard              key

127.0.0.1:6379[4]> smembers k1

1) "c"

2) "a"

3) "b"

127.0.0.1:6379[4]>scard k1

(integer) 3

 

 

Ø  Sdiffstore | Sinterstore | Sunionstore 操作:进行集合运算并将结果存储

n 语法:sdiffstore        destination   key [key…]

n 语法:sinterstore             destination   key [key…]

n 语法:sunionstore           destination   key [key…]

u Sdiffstore命令和Sdiff命令功能一样,唯一区别是Sdiffstore将运算结果存储到destination键中

u Sinterstore与Sunionstore功能同上

K1:abc ; k2:bc;

127.0.0.1:6379[4]> SDIFFSTORE k3 k1 k2

(integer) 1

127.0.0.1:6379[4]> SINTERSTORE k4 k1 k2

(integer) 2

127.0.0.1:6379[4]> SUNIONSTORE k5 k1 k2

(integer) 3

127.0.0.1:6379[4]> smembers k3  //差集

1) "a"

127.0.0.1:6379[4]> smembers k4  //交集

1) "c"

2) "b"

127.0.0.1:6379[4]> smembers k5  //并集

1) "a"

2) "c"

3) "b"

 

 

Ø  Srandmember操作:随机获取集合中的元素

n 语法:Srandmember       key        [count]

n 根据传递的count参数,可以一次获取count个元素,根据count的正负不同,具体表现也不同。

n Count参数为正数时:随机获取count个不重复的元素

n Count参数大于集合中元素总数时:则返回集合的全部元素

n Count参数为负数时:随机从集合中获得|count|个元素,这些元素可能相同。

127.0.0.1:6379[4]> smembers k5

1) "a"

2) "c"

3) "b"

127.0.0.1:6379[4]> srandmember k5  2

//连续执行9次,得到如下9个随机值

ca/ca/ab/ca/ca/ca/cb/ab/ca

127.0.0.1:6379[4]> srandmember k5  3 //得到全部元素

1) "c"

2) "a"

3) "b"

127.0.0.1:6379[4]> srandmember k5  4 //得到全部元素

1) "c"

2) "a"

3) "b"

127.0.0.1:6379[4]> srandmember k5 -2

当count参数为-2时,集合元素为:abc,获取|-2|个元素,元素会有重复

bb/bc/ab/cb/ab

127.0.0.1:6379[4]> srandmember k5  -4

当count参数为-4时,集合元素为:abc,获取|-4|个元素,元素会有重复

abbb/abbb/ccbb/baac/bbca/abab/cbbc

 

 

Ø  Spop操作:从集合中弹出一个元素

n 语法:spop         key

127.0.0.1:6379[4]> smembers k5

1) "a"

2) "c"

3) "b"

127.0.0.1:6379[4]> spop k5

"a"

127.0.0.1:6379[4]> spop k5 2

1) "c"

2) "b"

127.0.0.1:6379[4]> smembers k5

(empty list or set)

 

 

有序集合类型

Ø  Zadd操作:增加元素

n 语法:Zadd        key         score     member  [score         member …]

u score参数为加入元素的“分数,member参数为加入的“元素”

u Zadd命令返回值为新加入集合中的元素个数(不包含原有元素)。

u 如果新加入的元素已经存在,则会用新的“分数”替换原有“分数”

127.0.0.1:6379[4]> zadd zk 5 a 10 b 12 c

(integer) 3

127.0.0.1:6379[4]>zrange zk 0 -1
withscores

1) "a"

2) "5"//zrange命令加上withcores参数后,分数会被查询出来

3) "b"

4) "10"

5) "c"

6) "12"

127.0.0.1:6379[4]> zadd zk 20 a

(integer) 0  //有序集合zk中已经有元素a,则更新原“分数”

127.0.0.1:6379[4]> zrange zk 0 -1 withscores

1) "b"

2) "10"

3) "c"

4) "12"

5) "a"

6) "20"

 

 

Ø  Zscore操作:获得元素的分数

n 语法:Zscore     key         member

127.0.0.1:6379[4]> zscore zk a

"20"

127.0.0.1:6379[4]> zscore zk b

"10"

 

Ø  Zrange操作:获得排名在某个范围的元素列表

n 语法:Zrange     key         start  stop        [withscores]

n Zrange命令会按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(保护两端的元素)。

n Zrange命令与Lrange命令是否相似,如索引都是从0开始,负数代表从后向前找(-1代表最好一个元素)。

n Withscores参数表示把元素的分数一并获取

 

Ø  Zrangebyscore操作:获得指定分数范围的元素(从小到大顺序)

n 语法:Zrangebyscore   key  min     max         [withscores]    [limit offset   count]

n 该命令表示按照元素从小到大的顺序返回分数在min和max之间(包含min和max)的元素

n 参数min和max 前面加上“(”表示不包含端点值。

n -inf和+inf表示负无穷和正无穷

n Withscores  参数表示把元素的分数一并获取

n offert   count参数表示向后偏移offert个元素获得count个元素

127.0.0.1:6379[4]> zrange zk 0 -1 withscores

 1) "c"

 2) "5"

 3) "b"

 4) "10"

 5) "a"

 6) "20"

 7) "d"

 8) "21"

 9) "e"

10) "25"

11) "f"

12) "30"

127.0.0.1:6379[4]> zrangebyscore zk 10 25 withscores

1) "b"

2) "10"

3) "a"

4) "20"

5) "d"

6) "21"

7) "e"

8) "25"

127.0.0.1:6379[4]> zrangebyscore zk 10 25 withscores limit 1 2

1) "a"

2) "20"

3) "d"

4) "21"

 

Ø  Zrevrangebyscore操作:获得指定分数范围的元素(从大到小顺序)

n 语法:Zrevrangebyscore   key   max    min    [withscores]   [limit  offset  count]

n 其它参数参考Zrangebyscore命令。

127.0.0.1:6379[4]> zrevrangebyscore zk 25 10 withscores

1) "e"

2) "25"

3) "d"

4) "21"

5) "a"

6) "20"

7) "b"

8) "10"

127.0.0.1:6379[4]> zrevrangebyscore zk 25 10 withscores limit 1 2

1) "d"

2) "21"

3) "a"

4) "20"

 

 

Ø  Zincrby操作:增加某个元素的分数

n 语法:Zincrby   key   increment  member

n Increment参数:指定添加的分数,可以为负数表示减分

n Member参数:执行的元素

n 返回值为更改后的分数

n 如果指定的元素不存在,则redis会先创建该元素,赋值为0后,再执行操作。

127.0.0.1:6379[4]> zrange zk 0 -1 withscores

 1) "c"

 2) "5"

 3) "b"

 4) "10"

 5) "a"

 6) "20"

127.0.0.1:6379[4]> zincrby zk  10  a

"30"

127.0.0.1:6379[4]> zrange zk 0 -1 withscores

 1) "c"

 2) "5"

 3) "b"

 4) "10"

 5) "a"

 6) "30"

 

Ø  Zcard操作:获得集合中元素的数量

n 语法:Zcard              key

127.0.0.1:6379[4]> zrange zk 0 -1

1) "c"

2) "b"

3) "d"

4) "e"

5) "a"

6) "f"

127.0.0.1:6379[4]> zcard zk

(integer) 6

 

Ø  Zcount操作:获得指定分数范围内的元素个数

n 语法:Zcount     key  min max

n min  max参数特性和Zrangebyscore命令中的一样

127.0.0.1:6379[4]> zrange zk 0  -1 withscores

 1) "c"

 2) "5"

 3) "b"

 4) "10"

 5) "d"

 6) "21"

 7) "e"

 8) "25"

 9) "a"

10) "30"

11) "f"

12) "30"

127.0.0.1:6379[4]> zcount zk 10 25

(integer) 3

 

Ø  Zrem操作:删除一个或多个元素

n 语法:Zrem  key  member  [member …]

n 返回值是成功删除的元素数量(不包含本来就不存在的元素)

127.0.0.1:6379[4]> zrem zk c f

(integer) 2

127.0.0.1:6379[4]> zrange zk 0  -1 withscores

1) "b"

2) "10"

3) "d"

4) "21"

5) "e"

6) "25"

7) "a"

8) "30"

 

Ø  Zremrangebyrank操作:按照排名范围删除元素

n 语法:Zremrangebyrank   key   start  stop

n Zremrangebyrank命令按照元素分数从小到大的顺序删除处在指定排名范围内的所有元素,索引从0开始

n 返回值为删除元素的数量

127.0.0.1:6379[4]> zrange zk 0  -1 withscores

1) "b"

2) "10"

3) "d"

4) "21"

5) "e"

6) "25"

7) "a"

8) "30"

127.0.0.1:6379[4]> zremrangebyrank zk 0 1

(integer) 2

127.0.0.1:6379[4]> zrange zk 0 -1 withscores

1) "e"

2) "25"

3) "a"

4) "30"

 

Ø  Zremrangebyscore操作:按照分数范围删除元素

n 语法:Zremrangebyscore   key   min  max

n min  max参数特性和Zrangebyscore命令中的一样

n 返回值为删除元素的数量

127.0.0.1:6379[4]> zrange zk 0 -1 withscores

 1) "e"

 2) "25"

 3) "c"

 4) "26"

 5) "d"

 6) "26"

 7) "b"

 8) "28"

 9) "a"

10) "30"

127.0.0.1:6379[4]> zremrangebyscore zk 0 1

(integer) 0

127.0.0.1:6379[4]> zremrangebyscore zk 25 26

(integer) 3

127.0.0.1:6379[4]> zrange zk 0 -1 withscores

1) "b"

2) "28"

3) "a"

4) "30"

 

Ø  Zrank操作:获得元素的排名,分数最小的元素排名为0

n 语法:zrank  key  member

n Zrank命令会按照元素分数从小到大的顺序获得指定元素的排名(从0开始,即分数最小的元素排名为0)

127.0.0.1:6379[4]> zrange zk 0 -1 withscores

1) "b"

2) "28"

3) "a"

4) "30"

127.0.0.1:6379[4]> zrank zk a

(integer) 1

127.0.0.1:6379[4]> zrank zk b

(integer) 0

 

Ø  Zrevrank操作:获得元素的排名,分数最大的元素排名为0

n Zrevrank   key  member

n Zrevrank命令会按照元素分数从大到小的顺序获得指定元素的排名(从0开始,即分数最大的元素排名为0)

127.0.0.1:6379[4]> zrange zk 0 -1 withscores

1) "b"

2) "28"

3) "a"

4) "30"

127.0.0.1:6379[4]> zrevrank zk a

(integer) 0

127.0.0.1:6379[4]> zrevrank zk b

(integer) 1

 

Ø  Zinterstore操作:计算有序集合的交集

n 语法:Zinterstore  destination  numkeys  key [key …]   [WEIGHTS  weights [weights …]]   [aggregate sum|min|max]

n 参数destination  存放计算后的有序集合

n 参数numkeys   参与计算的集合的个数

n 参数key 参与计算的有序集合

n 参数WEIGHTS参与计算的有序集合的权重,集合乘以权重后才参与计算

n 参数aggregate  运算模式,默认为sum即参与计算集合的元素值为分数和;min表示取值分数最小的元素;max表示取值分数最大的元素。

127.0.0.1:6379> zadd sortedSets1  1 a 2 b 3 c

(integer) 3

127.0.0.1:6379> zrange sortedSets1 0 -1 withscores

1) "a"

2) "1"

3) "b"

4) "2"

5) "c"

6) "3"

127.0.0.1:6379> zadd sortedSets2 10 a 20 b 30 c

(integer) 3

127.0.0.1:6379> zrange sortedSets2 0 -1 withscores

1) "a"

2) "10"

3) "b"

4) "20"

5) "c"

6) "30"

-- 以下集合运算的默认aggregate参数默认为sum

127.0.0.1:6379>Zinterstore destination 2  sortedSets1 sortedSets2 

(integer) 3

127.0.0.1:6379> zrange destination 0 -1 withscores

1) "a"

2) "11"

3) "b"

4) "22"

5) "c"

6) "33"

--以下集合运算的默认aggregate参数为sum,同上运算

127.0.0.1:6379> Zinterstore destination 2  sortedSets1 sortedSets2 aggregate sum

(integer) 3

127.0.0.1:6379> zrange destination 0 -1 withscores

1) "a"

2) "11"

3) "b"

4) "22"

5) "c"

6) "33"

--以下集合运算的默认aggregate参数为min,得到最小分数元素的集合

127.0.0.1:6379> Zinterstore destination 2  sortedSets1 sortedSets2 aggregate min

(integer) 3

127.0.0.1:6379> zrange destination 0 -1 withscores

1) "a"

2) "1"

3) "b"

4) "2"

5) "c"

6) "3"

--以下集合运算的默认aggregate参数为max,得到最大分数元素的集合

 

127.0.0.1:6379> Zinterstore destination 2  sortedSets1 sortedSets2 aggregate max

(integer) 3

127.0.0.1:6379> zrange destination 0 -1 withscores

1) "a"

2) "10"

3) "b"

4) "20"

5) "c"

6) "30"

--设置权重weights后,集合元素分数先乘以权重,再参与计算

127.0.0.1:6379> Zinterstore destination 2  sortedSets1 sortedSets2 weights 1 0.1

(integer) 3

127.0.0.1:6379> zrange destination 0 -1 withscores

1) "a"

2) "2"

3) "b"

4) "4"

5) "c"

6) "6"

Ø  Zunionstore操作:计算有序集合的并集

n 语法:zunionstore  destination  numkeys  key [key …]   [WEIGHTS  weights [weights …]]   [aggregate sum|min|max]

n 参数destination  存放计算后的有序集合

n 参数numkeys   参与计算的集合的个数

n 参数key 参与计算的有序集合

n 参数WEIGHTS参与计算的有序集合的权重,集合乘以权重后才参与计算

n 参数aggregate  运算模式,默认为sum即参与计算集合的元素值为分数和;min表示取值分数最小的元素;max表示取值分数最大的元素。

127.0.0.1:6379> zadd k1 1 a 2 b

(integer) 2

127.0.0.1:6379> zadd k2 1 a 2 b 3 c

(integer) 3

--求并集,zunionstore k3(结果集) 2(参与计算集合数) k1(集合1)
k2(集合2) weights 1 2(为两个集合设置权重1,2)
aggregate sum(计算模式,求和)


127.0.0.1:6379> zunionstore k3 2 k1 k2 weights 1 2 aggregate sum

(integer) 3

127.0.0.1:6379> zrange k3 0 -1 withscores

1) "a"

2) "3"

3) "b"

4) "6"

5) "c"

6) "6"

 

更多:

Redis大总结之二:Redis 事务,WATCH命令,生存时间

Redis大总结之三:SORT命令(对 列表|集合|有序集合 进行排序)

Redis大总结之四:任务队列 | 发布/订阅模式

 -------------------完---------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息