redis常用命令及使用场景

一:redis的常用命令
1.全局命令:
1.1. keys * 查看所有键
1.2. dbsize 键总数 dbsize 命令在计算键总数时不会遍历所有键,而是直接获取redis内置的键总数变量。所以dbsize命令的时间复杂度是O(1)。而keys命令会遍历所有键。,所以它的时间复杂度是O(n)
1.3. exists key 检查键是否存在。如果键存在则返回1,不存在则返回0.
1.4. del key [key ...] 删除键
1.5. 键过期
  • expire key seconds 键在second秒后过期
  • expireat key timestamp 键在秒级时间戳timestamp后过期
  • pexpire key milliseconds 键在 milliseconds毫秒后过期
  • pexpireat key millseconds-timestamp 键在毫秒级时间戳后过期 

 但无论使用过期时间还是时间戳,秒级还是毫秒级,在redis内部最终使用的都是pexpireat

1.6. type key 获取键的数据类型

1.7.rename key newkey 键重命名

如果在rename之前,键已经存在,那么它的值也将会被覆盖。为了防止被强行rename,redis提供了renamenx 命令,确保 只有newkey不存在时才被覆盖。

在使用重命名命令时,有两点需要注意:

  • 由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞redis的可能性,这点不要忽视。
  • 如果rename和renamenx 中的key 和newkey如果是相同的,在redis3.2和之前版本结果略有不同。
    redis3.2 会返回OK,之前的版本会提示错误。(ERR source and destination object are the same)

1.8.randomkey 随机返回一个键

1.9.查询键的剩余过期时间

ttl命令和pttl 都可以查询键的剩余过期时间,但是pttl的精度更高可以达到毫秒级别。有三种返回值

  • 大于等于0的整数:键剩余的过期时间
  • -1:键没有设置过期时间
  • -2:键不存在

 1.10.persist 命令可以将键的过期时间清除

 

2.字符串类型常用命令
2.1.set key value [ex seconds] [px milliseconds] [nx|xx] 设置值
ex seconds 为键设置秒级过期时间‘
px milliseconds 为键设置毫秒级过期时间‘
nx 键必须不存在才可以设置成功,用于添加
xx 与nx相反,键必须存在才可以设置成功,用于更新
除了set 选项,redis还提供了setnxsetex 两个命令。他们的作用和ex和nx选项是一样的。
2.2. get key 获取值
如果要获取的键不存在,则返回nil
2.3. mset key value [ key value ] 批量设置值
2.4. mget key[key ...] 批量获取值
2.5. incr key 计数
incr 命令用于对值做自增操作,返回结果分为三种情况
  • 值不是整数,返回错误
  • 值是整数,返回自增后的结果
  • 键不存在,按照值为0自增,返回结果为1
除了incr 命令redis提供了desc(自减) incrby(自增指定数字) 、descrby(自减指定数字)、incrbyfloat(自增浮点数)
2.6.append key value 追加值,可以向字符串尾部追加值
2.7. strlen key 字符串长度
2.8.getset key value 设置并返回原值.getset和set一样会设置值,但是不同的是,它同时会返回键原来的值。
2.9. setrange key offeset value 设置指定位置的字符
2.10. getrange key start end 获取部分字符串
3.哈希
3.1. hset key field value 设置值
3.2.hget key field 获取值。如果键或field 不存在,则返回nil
3.3.hdel key field [field...] 删除一个或多个field,返回结果为成功删除field的个数
3.4.hlen key 计算field的个数
3.5.hmget key field [field...] 批量设置或获取field-value
3.6.hmset key field value [ field value .....] 批量设置值
3.7. hexists key field 判断field 是否存在
3.8.hkeys key 获取所有field
3.9.hvals key 获取所有value
3.10.hgetall key 获取所有发的field-value
在使用hgetall 时,如果哈希元素个数比较多,会存在阻塞redis的可能。如果一定要获取field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型
3.11.hincrby key field /hincrbyfloat key field
3,12.hstrlen key filed 计算value的字符串长度
4.列表
4.1.rpush key value [value ...] 从右边插入元素
4.2.lpush key value [value ...] 从左边插入元素
4.3.linsert key before|after pivot value linsert 命令会从列表中找到等于pivot的元素,在其前或者后插入一个新的元素value
4.4.lrange key start end 获得指定范围内的元素列表
lrange 操作会获得列表指定索引范围所有的元素。索引下标有两个特点:第一,索引下标从左到右分别是0到N-1,但是从右到左分别是-1到-N。第二,lrange中的end选项包含了自身。例如想获得列表的第2到第4个元素,可以执行如下操作:lrange listkey 1 3
4.5. lindex key value 获取列表指定索引下标的元素
4.6.lpop key 从列表左侧弹出元素
4.7.rpop key 从列表右侧弹出
4.8.lrem key count value 删除指定元素
lrem 命令会从列表中找到等于value的元素进行删除,根据count的不同分为三种情况
  • count>0,从左到右,删除最多count个元素
  • count<0 从右到左,删除最多count绝对值个元素
  • count=0,删除所有
4.9. ltrim key start end 按照索引范围修剪列表。例如,下面的操作会只保留列表listkey第2到第4个元素 ltrim listkey 1 3
4.9.lset key index newvalue 修改指定索引下标的元素
4.10 阻塞操作
blpop key [key ...] timeout
brpop key [key ...] timeout
blpop 和brpop是lpop 和rpop 的阻塞版本,它们除了弹出方向不同,使用方法基本相同,所以下面以brpop命令进行说明。brpop 命令包含两个参数
key [key ...] 多个列表的键
timeout 阻塞时间(单位:秒)
在使用brpop时,有两点需要注意。
第一点:如果是多个键,那么brpop会从左至右遍历键,,一旦有一个键可以弹出元素,客户端立即返回
第二点:如果多个客户端对同一个键执行brpop,那么最先执行brpop命令的客户端可以获取到弹出值

5.集合

5.1.sadd key element [ element ...]添加集合元素。返回结果为添加成功的个数
5.2.srem key element [ element ...] 删除元素。 返回结果为删除成功的个数
5.3.scard key 计算元素个数。 scard 的时间复杂度为o(1),它不会遍历集合所有元素,而是直接用redis 内部的变量
5.4. sismember key element 判断元素是否在集合中
5.5. srandmember key [count] 随机从集合返回指定个数元素
[count] 是可选参数,如果不写默认为1
5.6.spop key 从集合随机弹出元素
标注:从redis3.2 版本开始,spop 也支持[count] 参数。srandmember 和spop 都是随机从集合选出元素,两者不同的是spop命令执行后,元素会从集合中删除,而srandmember不会。
5.7. smember key 获取所有元素
5.8. sinter key [key ...] 求多个集合的交集
5.9. suinon key [key ...] 求多个集合的并集
5.10.sdiff key [key ...] 求多个集合的差集
5.11.将交集、并集、差集的结果保存
sinterstore destination key [key ...]
suionstore destination key [key ...]
sdiffstore destination key [key ...]
集合间的运算在元素较多的情况下会比较耗时,所以redis提供了上面三个命令将集合间交集、并集、差集的结果保存在 destination key 中。
6.有序集合
6.1. zadd key score member [score member ...]
有关zadd命令有两点需要注意
redis3.2 为zadd命令添加了nx 、xx、ch、incr四个选项
  • nx:member 必须不存在,才可以设置成功,用于添加
  • xx:member 必须存在,才可以设置成功,用于更新
  • ch:返回此次操作后,有序集合元素和分数发生变化的个数
  • incr:对score 做添加,相当于后面介绍的zincrby
有序集合相比集合提供了排序字段,但是产生了代价,zadd的时间复杂度为O(log(n)),sadd的时间复杂度是O(1)
6.2.zcard key 计算成员个数
6.3.zscore key member 计算某个成员的分数
6.4.zrank key member
zrevrank key member
zrank 是从分数从低到高返回排名,zrevrank反之(排名从0开始计算)
6.5. zrem key member [member ...]删除成员
6.6.zincrby key increment member 增加成员的分数
6.7. zrange key start end [withscore ]
zrevrange key start end [witchscore ]
返回指定范围的成员。加上withscore 会返回成员的分数。
6.8.zrangebyscore key min max [wicthscore][limit offet count]
zrevrangebyscore key max min [witchscore][limit offet count]
返回指定分数范围的成员,zrangebyscore 按照分数从低到高返回,zrevrangebyscore反之。[limit offet count ] 选项可以限制输出的起始位置和个数。同时min和max还支持(小括号)和闭区间(中括号),-inf和+inf分别代表无限小和无限大
6.9.zcount key min max 返回指定分数范围成员个数
6.10.zremrangebyrank key start end 删除指定排名内的升序元素
6.11.zremrangebyscore key min max 删除指定分数范围的成员
6.12.集合间的操作
6.12.1 交集
zinterstore destination numkeys key [key ...] [weights weight [weight...]] [aggregate sum|min|max]
这个命令的参数分别表示为:
destination: 交集计算结果保存到这个键
numkeys:需要做交集计算键的个数
key [key ...]: 需要做交集计算的键
weights weight [weight ...] 每个键的权重,在做交集计算时,每个键中的每个member 会将自己分数乘以这个权重,每个键的权重默认是1
aggregate sum |min|max :计算成员交集后,分值可以按照sum、min、max做汇总,默认是sum
6.12.2.并集
zunionstore destination numkeys key [key ..] [weights weight [ weight ..]] [aggregate sum |min|max]
使用场景
1.字符串
缓存功能、计数、共享session、限速
2.哈希
hash特别适合用于存储对象。 
存储部分变更的数据,如用户信息等。
3.列表
lpush+lpop=stock(栈)
lpush+rpop=queue(队列)
lpush+ltrim=Capped Collection (有限集合)
lpush+brpop=Message Queue(消息队列)
4.集合
sadd=Tagging(标签)
spop/srandmember=Random item (生成随机数,比如抽奖)
sadd+sinter=Social Graph(社交需求)
5.有序集合
排行榜
posted @ 2019-04-22 13:30  学无止境-小于  阅读(903)  评论(0编辑  收藏  举报