redis 命令详解

String字符串操作

string 是 redis 最基本的类型,一个key对应一个value

keys pattern 查询相应的key
有3个通配符 *,?,[]
*: 匹配任意多个字符
? : 匹配单个字符
[] : 匹配中括号内的某1个字符

127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> keys *e
1) "name"
2) "age"

randomkey 返回随机key

127.0.0.1:6379> randomkey
"name"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"age"

exists key 判断key是否存在,存在返回1,否则0

127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists aa
(integer) 0

type key 返回key存储的值得类型,有string,list,hash,set,order set

127.0.0.1:6379> type age
string

expire key 整形值 设置key的生命周期,以秒为单位
ttl key 查询key的生命周期,返回秒,对于不存在的key|永久的key 都返回-1 Redis 2.8 中,对于不存在的key返回-2

127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 8
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> ttl age
(integer) -1

同理:
pexpire key 整形值 设置key的生命周期,以毫秒为单位
pttl key 查询key的生命周期,返回毫秒

persist key 把指定的key设置为永久有效

127.0.0.1:6379> set name cc
OK
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 8
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> persist name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -1

set key value [ex 秒数] | [px 毫秒] [nx]|[xx]
说明:
set name xiaoming ex 10 ,10s有效
set name xiaohong px 10000 ,10s有效
nx :表示key不存在时执行操作
xx :表示key存在时执行操作
set name xiaoming ex 10 nx 失败就是因为name已经存在了不能设置有效期

127.0.0.1:6379> set name xiaoming ex 10
OK
127.0.0.1:6379> ttl name
(integer) 7
127.0.0.1:6379> set name xiaohong px 10000
OK
127.0.0.1:6379> pttl name
(integer) 7259
127.0.0.1:6379> pttl name
(integer) -2
127.0.0.1:6379> set name xiaoming nx
OK
127.0.0.1:6379> set name xiaoming xx
OK
127.0.0.1:6379> set name xiaoming ex 10 nx
(nil)

mset key value key value… 一次设置多个值
说明:只能设置值,不能设置生命周期

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> mset a 1 b 2
OK
127.0.0.1:6379> keys *
1) "b"
2) "a"
127.0.0.1:6379> mset a 1 ex 10
OK
127.0.0.1:6379> keys *
1) "b"
2) "ex"
3) "a"
127.0.0.1:6379> mset a 2 nx
(error) ERR wrong number of arguments for MSET
127.0.0.1:6379> mset a 2 xx
(error) ERR wrong number of arguments for MSET

get key 获取key值

127.0.0.1:6379> get a
"1"

mget key1 key2 … keyn 获取多个key值

127.0.0.1:6379> mget b ex a
1) "2"
2) "10"
3) "1"

del key1 key2 … keyn 删除1个或多个值

127.0.0.1:6379> del b ex a
(integer) 3
127.0.0.1:6379> keys *
(empty list or set)

rename key newkey 给key赋一个新的key名,如果newkey已存在,则newkey的原值被覆盖

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> rename name age
OK
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> get age
"xiaoming"

renamenx key newkey 给key赋一个新的key名,如果newkey已存在,不做改名动作

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> renamenx name age
(integer) 0
127.0.0.1:6379> keys *
1) "name"
2) "age"

move key db 移动key到数据库
说明:
一个redis进程,默认打开了16个数据库,从0-15,默认是在0里

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "name"

setrange key offset value 把字符串的offset偏移字节改成value
说明:
如果偏移量 > 字符长度。该字符自动补0x00

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> setrange name 4 hong
(integer) 8
127.0.0.1:6379> get name
"xiaohong"
127.0.0.1:6379> setrange name 10 hello
(integer) 15
127.0.0.1:6379> get name
"xiaohong\x00\x00hello"

append key value 把value 追加到key的原值上

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> append name xiaohong
(integer) 16
127.0.0.1:6379> get name
"xiaomingxiaohong"

getrange key start stop 获取字符串中[start,stop]范围的值,左数从0开始,右数从-1开始
说明:
如果start >= length , 则返回空字符串
如果stop >= length , 则截取至字符结尾
如果start 位置在stop右边,则返回空字符串

127.0.0.1:6379> get name
"xiaomingxiaohong"
127.0.0.1:6379> getrange name 4 7
"ming"
127.0.0.1:6379> getrange name 8 -1
"xiaohong"
127.0.0.1:6379> getrange name 4 3
""
127.0.0.1:6379> getrange name -2 -1
"ng"
127.0.0.1:6379> getrange name -1 -2
""
127.0.0.1:6379> getrange name 50 1
""
127.0.0.1:6379> getrange name 0 50
"xiaomingxiaohong"

getset key newvalue 设置新值并返回旧值

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set cnt 0
OK
127.0.0.1:6379> getset cnt 1
"0"
127.0.0.1:6379> get cnt
"1"

incr key 给指定的key的值+ 1,并返回+1 后的值,如果key不存在,当成0 再+1
decr key 给指定的key的值- 1,并返回-1 后的值,如果key不存在,当成0 再-1

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> incr cnt
(integer) 1
127.0.0.1:6379> get cnt
"1"
127.0.0.1:6379> incr cnt
(integer) 2
127.0.0.1:6379> decr cnt
(integer) 1
127.0.0.1:6379> decr cnt
(integer) 0

incrby key number 给指定的key的值+ number,并返回添加后的值 ,如果key不存在,当成0 再+number
decrby key number 给指定的key的值- number,并返回添加后的值,如果key不存在,当成0 再-number

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> incr cnt
(integer) 1
127.0.0.1:6379> get cnt
"1"
127.0.0.1:6379> incrby cnt 10
(integer) 11
127.0.0.1:6379> incrby cnt -5
(integer) 6
127.0.0.1:6379> decrby cnt 5
(integer) 1
127.0.0.1:6379> decrby cnt -1
(integer) 2

incrbyfloat key floatnumber 给指定的key的值+ floatnumber,floatnumber为浮点数,并返回添加后的值
说明:没有decrbyfloat

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> incrbyfloat cnt 2.5
"2.5"
127.0.0.1:6379> incrbyfloat cnt -3.5
"-1"

getbit key offset 获取值的二进制的对应位上的值(从左边0编号开始)
说明:ascii码A的十进制值是65,对应的二进制值是0100 0001

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set char A
OK
127.0.0.1:6379> getbit char 0
(integer) 0
127.0.0.1:6379> getbit char 1
(integer) 1
127.0.0.1:6379> getbit char 7
(integer) 1
127.0.0.1:6379> getbit char 100
(integer) 0

setbit key offset value 设置值的二进制上对应位置的值
注释:如果offset过大,则会在中间填充0

说明:ascii码A的十进制值是65,对应的二进制值是0100 0001
ascii 码a的十进制是97,对应的二进制值是0110 0001,将0100 0001 的0设置为1,即可将A变为a

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set char A
OK
127.0.0.1:6379> setbit char 2 1
(integer) 0
127.0.0.1:6379> get char
"a"

List 列表操作

List 列表是简单的字符串列表,按照插入顺序排序。

lpush key value 把值插入到链表的头部
rpush key value 把值插入到链表的尾部

注:可一次插入多个值

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush name lilei
(integer) 1
127.0.0.1:6379> lpush name hanmeimei
(integer) 2
127.0.0.1:6379> rpush name xuedizi
(integer) 3
127.0.0.1:6379> rpush name coco
(integer) 4
127.0.0.1:6379> rpush name a b c
(integer) 7

lrange key start stop 返回链表中[start,stop]中的元素

127.0.0.1:6379> lrange name 0 -1
1) "hanmeimei"
2) "lilei"
3) "xuedizi"
4) "coco"
5) "a"
6) "b"
7) "c"
127.0.0.1:6379> lrange name 0 2
1) "hanmeimei"
2) "lilei"
3) "xuedizi"

lpop key 返回并删除链表头部元素
rpop key 返回并删除链表尾部元素

127.0.0.1:6379> lrange name 0 -1
1) "hanmeimei"
2) "lilei"
3) "xuedizi"
4) "coco"
5) "a"
6) "b"
7) "c"
127.0.0.1:6379> lpop name
"hanmeimei"
127.0.0.1:6379> rpop name
"c"
127.0.0.1:6379> lrange name 0 -1
1) "lilei"
2) "xuedizi"
3) "coco"
4) "a"
5) "b"

从链表key中删除value值,count> 0,从头开始删除,count < 0,尾部开始删除,count=0,删除所有个数的value值

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush name a b c d a b c d e a b c
(integer) 12
127.0.0.1:6379> lrange name 0 -1
 1) "a"
 2) "b"
 3) "c"
 4) "d"
 5) "a"
 6) "b"
 7) "c"
 8) "d"
 9) "e"
10) "a"
11) "b"
12) "c"
127.0.0.1:6379> lrem name 1 a
(integer) 1
127.0.0.1:6379> lrange name 0  -1
 1) "b"
 2) "c"
 3) "d"
 4) "a"
 5) "b"
 6) "c"
 7) "d"
 8) "e"
 9) "a"
10) "b"
11) "c"
127.0.0.1:6379> lrem name 2 b
(integer) 2
127.0.0.1:6379> lrange name 0 -1
1) "c"
2) "d"
3) "a"
4) "c"
5) "d"
6) "e"
7) "a"
8) "b"
9) "c"
127.0.0.1:6379> lrem name -2 c
(integer) 2
127.0.0.1:6379> lrange name 0 -1
1) "c"
2) "d"
3) "a"
4) "d"
5) "e"
6) "a"
7) "b"
127.0.0.1:6379> lrem name 0 d
(integer) 2
127.0.0.1:6379> lrange name 0 -1
1) "c"
2) "a"
3) "e"
4) "a"
5) "b"

ltrim key start stop 剪切一段链表值赋值给key

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush name a b c d e
(integer) 5
127.0.0.1:6379> ltrim name 0 2
OK
127.0.0.1:6379> lrange name 0 -1
1) "a"
2) "b"
3) "c"

lindex key index 返回index索引上的值

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush name a b c
(integer) 3
127.0.0.1:6379> lindex name 0
"a"
127.0.0.1:6379> lindex name 2
"c"
127.0.0.1:6379> lindex name -1
"c"

llen key 返回链表的元素个数

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush name a b c
(integer) 3
127.0.0.1:6379> llen name
(integer) 3

linsert key after|before value newvalue
说明:在链表中查找指定value的值,在value值之后或者之前插入新的值,一旦找到一个value后,命令就结束,因此不会插入多个value值。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush name a b a c
(integer) 4
127.0.0.1:6379> linsert name after a 0
(integer) 5
127.0.0.1:6379> lrange name 0 -1
1) "a"
2) "0"
3) "b"
4) "a"
5) "c"
127.0.0.1:6379> linsert name after b 3
(integer) 6
127.0.0.1:6379> lrange name 0 -1
1) "a"
2) "0"
3) "b"
4) "3"
5) "a"
6) "c"

rpoplpush source dict 删除source链表尾部元素放在dict头部,并返回该单元值
场景:task + bak 双链表完成安全队列
task 列表

bak 列表

业务逻辑:

  1. rpoplpush task bak 删除task尾部元素,添加到bak头部
  2. tak接收返回值,并做业务处理
  3. 业务处理成功,rpop bak 清除任务,如果不成功,下次仍然从bak表中取任务。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush source a b c d e
(integer) 5
127.0.0.1:6379> rpoplpush source dict
"e"
127.0.0.1:6379> rpoplpush source dict
"d"
127.0.0.1:6379> lrange dict 0 -1
1) "d"
2) "e"

brpop/blpop key timeout 等待弹出key的尾/头 元素
说明:timeout尾等待超时时间,单位为s,如果timeout为0,则一直等待

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> brpop result 20
(nil)
(20.08s)

等待20s,没有数据弹出,这时候我们重新运行brpop result 20,然后再开一个redis客户端设置result的值,就会弹出值了

127.0.0.1:6379> lpush result a
(integer) 1
127.0.0.1:6379> brpop result 20
1) "result"
2) "a"

Set 的操作命令

Set是字符串类型的无序集合。特点:无序性、唯一性、确定性。

注:在string和link的命令中,可以通过range来访问string中的某几个字符或某几个元素,但是因为集合的无序性,无法通过下表或者范围来访问部分元素,因此想看元素,要么随机选一个,要么全选。

sadd key value1 value2 往集合key中添加元素

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd people lilei hanmeimei a a a
(integer) 3

smembers key 返回集合中所有的元素

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd people lilei hanmeimei a a a
(integer) 3
127.0.0.1:6379> smembers people
1) "a"
2) "hanmeimei"
3) "lilei"

srandmember key 返回集合key中随机的一个元素

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd people lilei hanmeimei
(integer) 2
127.0.0.1:6379> smembers people
1) "hanmeimei"
2) "lilei"
127.0.0.1:6379> srandmember people
"lilei"
127.0.0.1:6379> srandmember people
"lilei"
127.0.0.1:6379> srandmember people
"hanmeimei"

sismember key value 判断value是否在key集合中

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd people lilei hanmeimei
(integer) 2
127.0.0.1:6379> smembers people
1) "hanmeimei"
2) "lilei"
127.0.0.1:6379> srandmember people
"lilei"
127.0.0.1:6379> sismember people lilei
(integer) 1
127.0.0.1:6379> sismember people aa
(integer) 0

scard key 返回集合中元素的个数

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd people lilei hanmeimei
(integer) 2
127.0.0.1:6379> smembers people
1) "hanmeimei"
2) "lilei"
127.0.0.1:6379> srandmember people
"lilei"
127.0.0.1:6379> sismember people lilei
(integer) 1
127.0.0.1:6379> sismember people aa
(integer) 0
127.0.0.1:6379> scard people
(integer) 2
127.0.0.1:6379> sadd people cainiao
(integer) 1
127.0.0.1:6379> smembers people
1) "cainiao"
2) "hanmeimei"
3) "lilei"
127.0.0.1:6379> scard people
(integer) 3

srem key value1 value2 value3… 删除集合中元素

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd people a b c d e f
(integer) 6
127.0.0.1:6379> smembers people
1) "c"
2) "b"
3) "a"
4) "d"
5) "f"
6) "e"
127.0.0.1:6379> srem people a d
(integer) 2
127.0.0.1:6379> smembers people
1) "b"
2) "f"
3) "e"
4) "c"
127.0.0.1:6379> srem people h
(integer) 0

spop key 返回并删除集合中1个随机元素

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd people a b c d
(integer) 4
127.0.0.1:6379> spop people
"c"
127.0.0.1:6379> spop people
"a"
127.0.0.1:6379> smembers people
1) "d"
2) "b"

smove source dict value 删除source中的value元素添加到集合dict中

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd source a b c
(integer) 3
127.0.0.1:6379> smove source dict b
(integer) 1
127.0.0.1:6379> smove source dict a
(integer) 1
127.0.0.1:6379> smembers source
1) "c"
127.0.0.1:6379> smembers dict
1) "b"
2) "a"

sinter key1 key2 key3 求出三个集合的交集并返回
sunion key1 key2 key3 求出三个集合的并集并返回
sdiff key1 key2 key3 求出key1 与key2,key3的差集并返回

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd class_1 a b c
(integer) 3
127.0.0.1:6379> sadd class_2 a c f
(integer) 3
127.0.0.1:6379> sadd class_3 c e
(integer) 2
127.0.0.1:6379> sinter class_1 class_2
1) "c"
2) "a"
127.0.0.1:6379> sinter class_1 class_2 class_3
1) "c"
127.0.0.1:6379> sunion class_1 class_2
1) "c"
2) "f"
3) "b"
4) "a"
127.0.0.1:6379> sdiff class_1 class_2 class_3
1) "b"

sinterstore dict key1 key2 key3 求出三个集合的交集并赋值给集合dict
sunionstore dict key1 key2 key3 求出三个集合的并集并赋值给集合dict
sdiffstore dict key1 key2 key3 求出三个集合的差集并赋值给集合dict

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd class_1 a b c
(integer) 3
127.0.0.1:6379> sadd class_2 a c f
(integer) 3
127.0.0.1:6379> sadd class_3 c e
(integer) 2
127.0.0.1:6379> sinterstore inter class_1 class_2 class_3
(integer) 1
127.0.0.1:6379> smembers inter
1) "c"
127.0.0.1:6379> sunionstore union class_1 class_2 class_3
(integer) 5
127.0.0.1:6379> smembers union
1) "a"
2) "b"
3) "f"
4) "e"
5) "c"
127.0.0.1:6379> sdiffstore diff class_1 class_2 class_3
(integer) 1
127.0.0.1:6379> smembers diff
1) "b"

order set 有序集合

order set 是字符串类型的有序集合,成员是唯一的,但是分数可以重复。

zadd key score1 value1 score2 value2 … 添加有序集合

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd student 5 lily 10 lilei 7 hanmeimei 8 coco
(integer) 4

zrange key start end [withscores] 将集合key升序排序,withscores是显示score
zrevrange key start end [withscores] 将集合key降序排序,withscores是显示score

127.0.0.1:6379> zrange student 0 -1
1) "lily"
2) "hanmeimei"
3) "coco"
4) "lilei"
127.0.0.1:6379> zrange student 0 -1 withscores
1) "lily"
2) "5"
3) "hanmeimei"
4) "7"
5) "coco"
6) "8"
7) "lilei"
8) "10"
127.0.0.1:6379> zrevrange student 0 -1 withscores
1) "lilei"
2) "10"
3) "coco"
4) "8"
5) "hanmeimei"
6) "7"
7) "lily"
8) "5"      

zrangebyscore key min max withscores limit offet N 将集合key按照score升序排序,min和max是score的取值范围,offet是偏移量,N是个数

127.0.0.1:6379> zrange student 0 -1 withscores
1) "lily"
2) "5"
3) "hanmeimei"
4) "7"
5) "coco"
6) "8"
7) "lilei"
8) "10"
127.0.0.1:6379> zrangebyscore student 5 9 withscores
1) "lily"
2) "5"
3) "hanmeimei"
4) "7"
5) "coco"
6) "8"
127.0.0.1:6379> zrangebyscore student 5 9 withscores limit 1 2
1) "hanmeimei"
2) "7"
3) "coco"
4) "8"

zcard key 统计元素个数

127.0.0.1:6379> zcard student
(integer) 4

zcount key min max 统计区间score元素个数

127.0.0.1:6379> zcount student 7 10
(integer) 3

zrank key member 计算member的位置,升序从0开始
zrevrank key member 计算member的位置,降序序从0开始

127.0.0.1:6379> zrange student 0 -1
1) "lily"
2) "hanmeimei"
3) "coco"
4) "lilei"
127.0.0.1:6379> zrank student hanmeimei
(integer) 1
127.0.0.1:6379> zrank student lilei
(integer) 3
127.0.0.1:6379> zrevrank student lilei
(integer) 0

zrem key value1 value2 … 删除key中的元素

127.0.0.1:6379> zadd student 10 poly 12 nike 4 apple
(integer) 3
127.0.0.1:6379> zrange student 0 -1
1) "apple"
2) "lily"
3) "hanmeimei"
4) "coco"
5) "lilei"
6) "poly"
7) "nike"
127.0.0.1:6379> zrem student nike apple
(integer) 2
127.0.0.1:6379> zrange student 0 -1
1) "lily"
2) "hanmeimei"
3) "coco"
4) "lilei"
5) "poly"

zremrangebyscore key min max 根据score来删除[min,max]范围内的值

127.0.0.1:6379> zrange student 0 -1 withscores
 1) "lily"
 2) "5"
 3) "hanmeimei"
 4) "7"
 5) "coco"
 6) "8"
 7) "lilei"
 8) "10"
 9) "poly"
10) "10"
127.0.0.1:6379> zremrangebyscore student 7 9
(integer) 2
127.0.0.1:6379> zrange student 0 -1 withscores
1) "lily"
2) "5"
3) "lilei"
4) "10"
5) "poly"
6) "10"

zremrangebyrank key start end 根据位置删除[start,end]范围内的值

127.0.0.1:6379> zadd student 8 hanmeimei 11 lilei
(integer) 1
127.0.0.1:6379> zrange student 0 -1 withscores
1) "lily"
2) "5"
3) "hanmeimei"
4) "8"
5) "poly"
6) "10"
7) "lilei"
8) "11"
127.0.0.1:6379> zremrangebyrank student 2 3
(integer) 2
127.0.0.1:6379> zrange student 0 -1 withscores
1) "lily"
2) "5"
3) "hanmeimei"
4) "8"

zinterstore destination numkeys key1 [key2 …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]

注:求key1,key2的交集,key1,key2的权重分别是 weight1,weight2
聚合方法用: sum |min|max
聚合的结果,保存在dest集合内

注意: weights ,aggregate如何理解?
答: 如果有交集, 交集元素又有socre,score怎么处理?
Aggregate sum->score相加 , min 求最小score, max 最大score

另: 可以通过weigth设置不同key的权重, 交集时,socre * weights

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd z1 2 a 3 b 4 c
(integer) 3
127.0.0.1:6379> zadd z2 2.5 a 1 b 8 d
(integer) 3
127.0.0.1:6379> zinterstore tmp 2 z1 z2 aggregate sum  求z1,z2 交集的和并放到集合tmp中,2是因为z1,z2,aggregate sum可以省略,默认是sum聚合
(integer) 2
127.0.0.1:6379> zrange tmp 0 -1 withscores
1) "b"
2) "4"
3) "a"
4) "4.5"
127.0.0.1:6379> zinterstore tmp 2 z1 z2 aggregate min  以最小值聚合
(integer) 2
127.0.0.1:6379> zrange tmp 0 -1 withscores
1) "b"
2) "1"
3) "a"
4) "2"
127.0.0.1:6379> zinterstore tmp 2 z1 z2 aggregate max  以最大值聚合
(integer) 2
127.0.0.1:6379> zrange tmp 0 -1 withscores
1) "a"
2) "2.5"
3) "b"
4) "3"
127.0.0.1:6379> zinterstore tmp 2 z1 z2 weights 1 2  计算方法:a:2*1+2.5*2=7  b: 3*1+1*2 = 5
(integer) 2
127.0.0.1:6379> zrange tmp 0 -1 withscores  
1) "b"
2) "5"
3) "a"
4) "7"
127.0.0.1:6379> zinterstore tmp 2 z1 z2 weights 1 2 aggregate max  计算方法:z1:a=2,b=3 z2:a=2.5*2=5,b=1*2=2,所以最后a=5,b=3
(integer) 2
127.0.0.1:6379> zrange tmp 0 -1 withscores
1) "b"
2) "3"
3) "a"
4) "5"

Hash命令

Hash是一个键值(key=>value)对集合。

hset key field value 把key中 filed域的值设为value
hset key field1 value1 fileld2 value2 …设置key中多个域值

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset user name lilei
(integer) 1
127.0.0.1:6379> hset user age 20
(integer) 1
127.0.0.1:6379> hmset user height 170 wight 65
OK
127.0.0.1:6379> hmset user eyes big
OK

hget key field 返回key中field域的值
hmget key field1 field2 返回key中多个field域的值

127.0.0.1:6379> hget user name
"lilei"
127.0.0.1:6379> hget user age
"20"
127.0.0.1:6379> hmget user height wight
1) "170"
2) "65"

hgetall key 返回key中,所有域与其值

127.0.0.1:6379> hgetall user
 1) "name"
 2) "lilei"
 3) "age"
 4) "20"
 5) "height"
 6) "170"
 7) "wight"
 8) "65"
 9) "eyes"
10) "big"

hdel key field 删除key中 field域

127.0.0.1:6379> hdel user eyes
(integer) 1
127.0.0.1:6379> hdel user wight height
(integer) 2
127.0.0.1:6379> hgetall user
1) "name"
2) "lilei"
3) "age"
4) "20"

hlen key 返回key中元素的数量

127.0.0.1:6379> hlen user
(integer) 2

hexists key field 判断key中有没有field域

127.0.0.1:6379> hexists user age
(integer) 1
127.0.0.1:6379> hexists user height
(integer) 0

hinrby key field value 是把key中的field域的值增长整型值value
hinrbyfloat key field value 是把key中的field域的值增长浮点值value

127.0.0.1:6379> hincrby user age 2
(integer) 22
127.0.0.1:6379> hincrby user name 1
(error) ERR hash value is not an integer
127.0.0.1:6379> hincrbyfloat user age 0.5
"22.5"

hkeys key 返回key中所有的field
hvals key 返回key中所有的value

127.0.0.1:6379> hkeys user
1) "name"
2) "age"
127.0.0.1:6379> hvals user
1) "lilei"
2) "22.5"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值