代码改变世界

二、redis命令简单使用(不区分大小写)

2019-02-21 19:23 QQ~sunshine 阅读(...) 评论(...) 编辑 收藏

key  *   查看redis中的所有键(当键的数量较多会影响性能,不建议生产环境中使用)

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

del  key  [key...]    删除一个或多个键,返回删除的键的个数

(del命令的参数不支持通配符,但我们可以结合linux的管道和xargs命令自己实现删除所有符合规则的键。比如要删除所有以"user:"开头的键,就可以执行 redis-cli keys "user:*" | xargs redis-cli del。另外由于del命令支持多个键作为参数,所以还可以执行 redis-cli del 'redis-cli keys "user:*"'来达到同样的效果,而且性能更好)

基本命令

type  key    获得键值的数据类型

set  key  value  给键赋值

mset  key1  v1  key2  v2  key3  v3  同时给多个键赋值

get  key  取值

mget  key1  key2  key3  同时获取多个键值

incr  num  得到num递增后的数字,如果没有则创建并从0加1,即得到1,如果num不是数字类型则报错

incrby  num  2  和incr类似,只不过可以指定递增多少

incrbyfloat  num  6.7  可以指定增加双精度浮点数

decr  num  得到num递减后的数字

decrby  num  2  和decr类似,只不过可以指定递减多少

append  key  value  在字符串后面追加值,如果该键不存在即为为这个键赋值(该命令第二个参数需要加引号,因为有可能追加空格,所以要引起来)

strlen  key  返回键值的长度,如果不存在返回0

散列类型

hset  key  field  value  赋值

hget  key  field  取值

hmset  key  field1  v1  field2  v2  field3  v3  同时赋值多个

hmget  key  field1  field2  field3  同时获取多个值

hgetall  key  获取全部

hset 方便之处在于不用区分是插入还是更新,统统用hset,如果不存在即插入,返回1,如果存在即更新,返回0。

在redis中每个键都属于一个明确的数据类型,如通过hset命令建立的键是散列类型,通过set命令建立的键是字符串类型等。使用一种数据类型的命令操作另一种数据类型的键会提示错误。

hexists  key  field   该命令用来判断一个字段是否存在,如果存在返回1,否则返回0,如果键不存在也会返回0。

hsetnx  key  field  value  当字段不存在时赋值,和命令hset类似,只不过执行该命令如果键存在不做任何操作(后面的nx表示 if not exists)

hincrby  key  field  increment  和incrby类似,可以使字段值增加指定整数。散列类型没有hincr命令,但是可以通过hincrby key field 1来实现

hdel  key  field  [field...]   hdel命令可以删除一个或多个字段,返回值是被删除的字段个数

hkeys  key  只获取键的字段名(对象的属性名)

hvals  key   只获得键的字段值(对象的属性值)

hlen  key   获取字段数量

列表类型

lpush  key  value  [value...]  从左边往列表放数据,返回当前列表长度

rpush  key  value  [value...]  从右边往列表放数据,返回当前列表长度

lpop  key    从最左边移除一个元素,并且把移除的元素返回

rpop  key    从最右边移除一个元素,并且把移除的元素返回

lrange  key  start  stop  获取列表中的片段,索引从0开始,左右都包含,不会像lpop一样删除片段,支持负索引,负索引就是从右边开始数,如果start>stop返回空列表,如果stop大于最大则返回到最后一个元素

lrem  key  count  value  lrem命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值的不同,lrem命令的执行方式会略有差异:

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

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

  当count=0时lrem命令删除所有的值为value的元素。

lindex  key  index   返回指定索引的元素,从0开始,正数从左边数,负数从右边数

lset   key   index  value    设置指定索引的值,将索引为index的元素赋值为value

ltrim  key  start  end   ltrim命令可以删除指定索引范围之外的所有元素,左右都包含

linsert   key  before|after   pivot   value   linsert命令首先会在列表中从左到右找值为pivot的元素,然后根据第二个参数是before还是after来决定将value插入到该元素的前面还是后面
rpoplpush   source   destination  该命令从命名就能看出先执行rpop命令再执行lpush命令。该命令会先从source列表的右边弹出一个元素,然后将其加入到destination列表的左边,并返回这个元素的值,整个过程是原子的。两个列表可以一样,这样的话就是循环的将最右边一个元素放到最左边。

集合类型

sadd  key  member  [member...]   向集合中加入一个或多个元素,如果已经存在则忽略,返回成功加入的元素个数,重复的不在计算之内

srem  key  member  [member...]    删除一个或多个元素,返回删除成功的个数

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

sismember  key  member   判断一个元素在集合中是否存在,存在返回1,不存在或键不存在返回0,无论集合中有多少元素,该命令始终可以极快的返回结果

sdiff  key  [key...]   计算集合的差集,集合A与集合B的差集表示为A-B,代表所有属于A且不属于B的元素构成的集合,支持同时传多个,比如A B C应先计算A和B的差集,再计算结果与C的差集

sinter  key  [key...]    计算集合的交集,代表同时属于集合A和集合B的元素构成的集合,支持同时传多个,即属于所有集合的元素构成的集合

sunion  key  [key...]    计算集合的并集,代表属于集合A或属于集合B的元素构成的集合,支持同时传多个,即属于任何一个集合的元素构成的集合

scard  key   该命令用来获得集合中的元素个数
sdiffstore  destination  key  [key...]   和sdiff命令功能一样,区别在于前者不会直接返回运算结果,而是将结果存储在destination中,常用于需要进行多步集合运算的场景中,如需要先计算差集再将结果和其他键计算交集

sinterstore  destination  key  [key...]  性质同上

sunionstore  destination  key  [key...]   性质同上

srandmember  key  [count]   该命令用来从集合中获取一个元素,还可以传递count参数来一次随机获得多个元素,根据count的正负不同,具体表现也不同:

  当count为正数时,会随机从集合里获得count个不重复的元素;

  当count为负数时,会随机从集中里获得|count|个元素,有可能相同;

spop  key    从集合中随机弹出一个元素,并删除,返回弹出的元素

有序集合类型

这里的有序并不是按加入集合的顺序排序,而是有序集合会有一个分数,根据这个分数排序

zadd  key  score  member  [score member...]   该命令用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回新加入到集合中的元素个数,不包含之前已经存在的元素。(+inf和-inf分别表示正无穷和负无穷)

zscore  key  member   获得元素的分数

zrange  key  start  stop  [withscores]   该命令会按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素,同样的从0开始,包括两端,支持负数,如果在尾部加上参数withscores,会同时获得元素的分数。如果分数相同会按照ASCLL码排序

zrevrange  key  start  stop  [withscores]    从大到小排序

zrangebyscore  key  min  max  [withscores]  [limit offset count]   该命令按照元素分数从小到大的顺序返回分数在min和max之间(包含两端)的元素,如果希望分数范围不包含端点值,可以在分数前加上"("符号,同样支持负无穷(-inf)和正无穷(+inf),加上withscores参数会同时返回元素分数,后面可以加上参数limit,使用方法和mysql相同。

zrevrangebyscore  key  min  max  [withscores]  [limit offset count]    按照元素分数从大到小的顺序排序,需要注意的是该命令的min和max的参数顺序是相反的。

zincrby  key  increment  member   该命令可以增加一个元素的分数,返回值是更改后的分数,可以是负数即减分,如果元素不存在会先添加元素分数为0,再加上该分数。

zcard  key   获得集合中元素的数量

zcount  key  min  max    获得指定分数范围内的元素个数(min和max参数的特性和前面的一样)

zrem  key  member  [member...]    删除一个或多个元素,返回成功删除的元素数量

zremrangebyrank  key  start  stop    按照元素分数从小到大的顺序删除处在指定排名范围内的元素,并返回删除的元素数量。

zremrangebyscore  key  min  max   删除指定分数范围内的所有元素(min和max参数的特性和前面的一样)并返回删除的元素数量。

zrank  key  member   按照元素分数从小到大的顺序获得指定的元素的排名

zrevrank  key  member    按照元素分数从大到小的顺序获得指定的元素的排名

zinterstore  destination  numkeys  key  [key...]  [weights weight [weight...]]  [aggregate sum|min|max]  该命令用来计算多个有序集合的交集并将结果存储在destination键中(同样以有序集合类型存储),返回值为destination键中的元素个数。

destination键中的元素分数是由aggregate参数决定的:

  当aggregate是sum时(也就是默认值),destination键中元素的分数是每个参与计算的集合中该元素分数的和;比如集合A:1 a 2 b 3 c,集合B:10 a 20 b,则结果为集合:11 a 22 b

  当aggregate是min时,destination键中的元素的分数是每个参与计算的集合中元素分数的最小值;比如集合A:1 a 2 b 3 c,集合B:10 a 20 b,则结果为集合:1 a 2 b

  当aggregate是max时,destination键中的元素的分数是每个参与计算的集合中元素分数的最大值;比如集合A:1 a 2 b 3 c,集合B:10 a 20 b,则结果为集合:10 a 20 b

  该命令还能够通过weights参数设置每个集合的权重,每个集合在参与计算时元素得分数会被乘上该集合的权重。例如执行以下命令:

  zinterstore  destination  2  A  B  weights  1  0.1

  过程是A中元素乘以1,B中元素乘以0.1,然后再求交集,则结果为集合:(1*1+10*0.1)= 2 a (2*1+20*0.1)= 4 b

zunionstore   该命令为计算集合中的并集,性质同上