Redis 命令大全

String

设置值

  • SET
    //设置key 和  value
    set [key] [value]
    
    //设置key seconds 秒后过期
    set [key] [value] ex [seconds]
    
    //设置key millisecondes 毫秒后过期
    set [key] [value] ps [milliseconds]
    
    //只有当key 不存在的时候,才进行插入
    set [key] [value] nx 
    
    //只有当key 存在的时候,才进行插入
    set [key] [value] xx
    
  • SETNX(Set if Not eXit)
    //只有当key不存在才插入
    setex [key] [value]
    
  • SETEX
    //设置key value 以及 seconds 后过期
    setex [key] [seconds] [value] 
    
  • PSETEX
    //设置key millisecondes 毫秒后过期
    psetex [key] [milliseconds] [value]
    
  • MSET
    //同时设置多个值
    mset [key1] [value1] [key2] [value2] [key3] [value3]
    
  • APPEND
    //向key 对应的 value 追加字符串
    append [key] [value]
    
  • SETRANGE
    //从偏移量key开始,用value覆盖值
    setrange [key] [offset] [value]
    
  • INCR
    //为key 对应的value 增加1 
    incr [key]
    
  • INCRBY
    //为key 对应的value 增加 value 
    incrby [key] [value]
    
  • INCRBYFLOAT
    //为key 对应的value 增加 value (value 为浮点数)
    incrbyfloat [key] [value]
    
  • DECR
    //为key 对应的value减少1
    decr [key]
    
  • DECRBY
    //为key 对应的value 减少value
    decr [key] [value]
    
  • MSETNX
    //当且仅当所有key都不存在的时候,才加入
    msetnx [key] [value] [key1] [value1]
    

获取值

  • GET
    //获取key 对应的value
    get [key]
    
  • MGET
    //同时获取多个值
    mget [key1] [key2]
    
  • GETSET
    //设置key对应的值为value,并且返回key之前的值
    getset [key] [value]
    
  • STRLEN
    //获取key 对应的value 的长度
    strlen key
    
  • GETRANGE
    //获取key 对应的从start 到 end的值
    getrange [key] [start] [end]
    

LIST(链表)

设置值

  • LPUSH
    //将元素插入key 列表头,key 不存在则创建
    lpush [key] [value]|[value ...]
    
  • LPUSHX
    //将元素插入key 列表头,如果key不存在,则什么都不做
    lpushx [key] [value]
    
  • RPUSH
    //将元素插入到列表尾,key 不存在则创建
    rpush [key] [value]|[value...]
    
  • RPUSHX
    //将元素插入到列表尾,key 不存在则什么都不做
    rpushx [key] [value]
    
  • LPOP
    //移除并返回key的头元素
    lpop [key]
    
  • RPOP
    //移除并返回key的尾元素
    rpop [key]
    
  • RPOPLPUSH
    //移除key1的尾元素并将此元素作为key2的头元素
    rpoplpush [key1] [key2]
    
  • LREM
    //移除key列表中 count个与value相同的元素
    lrem [key] [count] [value]
    //count 可以有如下几种
    // count>0 由表头到表尾开始搜索
    // count<0 由表尾到表头开始搜索
    // count=0 移除所有相同的元素
    
  • LINSERT
    //在tag之前或者之后插入元素value
    linsert [key] [BEFORE]|[AFTER] [tag] [value]
    
  • LSET
    //将key 中第index 的值设置为value
    lset [key] [index] [value]
    
  • BLPOP
    //阻塞式的弹出列表中的头元素,如果列表没有头元素,则一直等待直到有元素可弹或则超时
    //timeout 为0表示无限期延长 默认单位为秒
    //当key 为多个元素的时候,blpop会弹出第一个有元素的列表的头元素
    blpop [key]|[key...] timeout 
    
  • BRPOP
    //阻塞式的弹出列表中的尾元素,如果列表没有尾元素,则一直等待直到有元素可弹或则超时
    //timeout 为0表示无限期延长 默认单位为秒
    //当key 为多个元素的时候,blpop会弹出第一个有元素的列表的尾元素
    brpop [key]|[key ...] timeout
    
  • BRPOPLPUSH
    //阻塞弹出source 的尾元素,放入destination的头部
    //当source 为空的时,会一直等到source被放入元素或则超时
    brpoplpush [source] [destination] [timeout]
    
  • LTRIME
    //对一个列表进行修剪 只保留start-stop的元素
    //其中-1表示最后一个元素,-2 表示倒数第二个元素
    //如果start>stop 则会清空整个列表
    ltrim [key] [start] [stop]
    

获取值

  • LRANGE
    //
    lrange [key] [start] [stop]
    
  • LLEN
    //获取集合的元素的数量
    llen [key]
    
  • LINDEX
    //获取列表key 第index 个元素的值
    //时间复杂度O(n) 说明list内部实现为链表
    lindex [key] [index]
    

SET

设置值

  • SADD
    //将元素添加到集合中
    sadd key [member]|[member ...]
    
  • SPOP
    //移除并返回集合中任意一元素
    spop [key]
    
  • SREM
    //移除集合key中的一个或多个member元素。不存在的元素将被忽略
    srem key [member]|[member...] 
    
  • SMOVE
    //将member元素从source集合移动到destination集合中
    smove [source] [destination] [member]
    
  • SINTERSTORE
    //将多个集合的交集保存到destination中
    sinterstore [destination] [key]|[key ...]
    
  • SUNIONSTORE
    //将多个集合的交集保存到destination中
    sunionstore [destination] [key]|[key ...]
    
  • SDIFFSTORE
    //将多个集合的差集保存到destination中
    sdiffstore [destination] [key]|[key ...]
    

获取值

  • SISMEMER
    //判断member是否是key的成员
    //时间复杂度为O(1),说明内部是通过hash实现
    sismember [key] [member]
    
  • SRANDMEMBER
    //随机返回key中count个元素
    //如果count为正,且大于集合中的数量,则返回整个集合
    //如果count为负,且绝对值大于集合的总数量,则依然会返回count的数量元素,不过值会重复
    srandmember [key] [count]
    
  • SCARD
    //返回集合中元素的数量
    scard [key]
    
  • SMEMBERS
    //获取集合中所有成员
    //当集合非常大的时候,可能会有性能问题
    smembers [key]
    
  • SINTER
    //获取集合|多个集合的交集
    sinter key|[key ...]
    
  • SUNION
    //获取多个
    sunion [key]|[key ...]
    
  • SDIFF
    //获取集合之间的差集
    sdiff [key]|[key ...]
    

ZList(有序集合)

设置值

  • ZADD
    //将一个或多个元素加入到有序集合中
    //返回被成功添加的新成员的数量,不包括那些被更新,已存在的成员
    zadd [key] [socre] [member]|[socre] [member] ...
    
  • ZINCRBY
    //为有序集key 的成员 member 的 score 值加上增量
    zincrby [key] [increment] [member]
    
  • ZREMRANGEBYRANK
    //通过排名区间指定需要移除的成员(包括start和stop)
    zremrangebyrank [key] [start] [stop]
    
  • ZREMRANGEBYSCORE
    //通过分数移除指定区间成员(包括min和max)
    zremrangebyscore [key] [min] [max]
    
  • ZREMRANGEBYLEX
    //当成员具有相同的分数的时候,可以通过此命令先使用字段序排序,然后移除介于max和min之间的元素
    zremrangebylex [key] [min] [max]
    

获取值

  • ZSCORE
    //获取有序集key 中,成员member的score值
    zscore [key] [member]
    
  • ZCARD
    //获取有序集key的基数
    zcard key
    
  • ZCOUNT
    //获取key中 score在 min 和 max 之间的数(包括min 和 max)
    zcount [key] [main] [max]
    
  • ZRANGE
    //获取key中 第start 到 stop(包括start 和 stop)个成员 | 同时返回分数  
    //成员严格由小到大排列
    //可以使用负数表示倒数
    zrange [key] [start] [stop] | [withscores]
    
  • ZREVRANGE
    //获取key中 第start 到 stop(包括start 和 stop)个成员 | 同时返回分数
    //成员严格由大到小排列
    zrevrange [key] [start] [stop] | withscores
    
  • ZRANGEBYSCORE
    //获取有序集中所有score 在 min 和 max (包括 max 和 min)之间的成员 | 同时返回分数 | 
    //注意offset 很大的时候可能会有性能问题
    //min 和 max 可以分别指定为 -inf 和 +inf 指定为当前集合中最小元素和最大元素
    //min 和 max 前面可以通过添加(表示开区间
    zrangebyscore [key] [min] [max] | [withscores] | limit [offset] [count]
    
  • ZRANK
    //获取member 在 key 中的排名
    zrank [key] [member]
    
  • ZREVRANK
    //获取member 在key 中的反向排名
    zrevrank [key] [member]
    
  • ZRANGEBYLEX
    //当成员具有相同的分数值的时候,可以通过此命令通过字典序排序,并返回min 到max 的值
    //注意offset在数据量过大的时候可能有性能问题
    zrangebylex [key] [min] [max] | limit [offset] [count]
    
  • ZLEXCOUNT
    //当成员具有相同的值的时候,可以通过此命令通过字典序排序,然后返回介于min和min元素的数量
    zlexcount [key] [min] [max]
    
  • ZUNIONSTORE
    //计算给定一个或多个有序集的并集,可以通过aggregate 指定取并集的方式
    zunionstore [destination] [numberkeys] [key]|[key ...] | [aggregate] [sum] [max] [min]
    
  • ZINTERSTORE
    //计算给定一个或多个有序集的交集,可以通过aggregate 指定取交集的方式
    zinteerstore [destination] [numberkeys] [key]|[key ...] | [aggregate] [sum] [max]
    

HASH

设置值

  • HSET
    //将hash 表中field 的值设定为value
    //这里一个hash相当于一个对象, field相当于属性, value便是他的值
    hset [hash] [field] [value]
    
  • HSETNX
    //当且仅当field 不存在于hash中的时候,才将它的值设置为value
    hsetnx [hash] [field] [value]
    
  • HDEL
    //删除hash 表中一个或者多个域
    hdel [hash] [field] | [field ...]
    
  • HINCRBY
    //为hash表中field字段加上增量increment
    hincrby [key] [field] [increment]
    
  • HINCRBYFLOAT
    //为hash表中field字段加上浮点增量increment
    hincrbyfloat [key] [field] [increment]
    
  • HMSET
    //同时将多个值存入hash中
    hmset [hash] [field] [value]| [field] [value] ...
    

获取值

  • HLEN
    //获取hash表中属性的数量
    hlen [hash]
    
  • HSTRLEN
    //获取hash表中field字段对应的属性的长度
    hstrlen [hash] [field]
    
    
  • HGET
    //获取hash 某个 field中的值
    hget [hash] [field]
    
  • HEXISTS
    //判断某个值是否存在hash 表中
    hexists [hash] [field]
    
  • HMGET
    //获取hash表中多个值
    hmget [hash] [field]|[field ...]
    
  • HKEYS
    //获取hash表中所有的属性
    hkeys [hash]
    
  • HVALS
    //获取hash表中所有属性的值
    hvals [hash]
    
  • HGETALL
    //获取hash表中所有属性和值
    hgetall [hash]
    

数据库

  • EXISTS
    //检查指定的key是否存在
    exists [key]
    
  • TYPE
    //获取key所存储的类型, 主要有:none string list set zset hash stream 
    type [key]
    
  • RENAME
    //将key 修改为 newkey
    //若newkey已经存在,则此key将会覆盖旧值
    rename [key] [newkey]
    
  • RENAMENX
    //仅当newkey不存在的时候将key修改为newkey
    renamenx [key] [newkey]
    
  • MOVE
    //将当前数据库的key移动到给定的数据库[db]中
    //如果当前数据库和目标数据库有相同的名字key,那么move没有任何效果
    move [key] [db]
    
  • DEL
    //删除给定的一个或者多个key
    del key [key ...]
    
  • RANDOMKEY
    //从数据库中随机返回一个key
    randomkey
    
  • DBSIZE
    //获取当前数据库key的数量
    dbsize 
    
  • KEYS
    //查找所有符合给定模式的key
    //KEYS * 匹配数据库中所有 key 。
    //KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
    //KEYS h*llo 匹配 hllo 和 heeeeello 等。
    //KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
    keys [pattern]
    

    注意:keys 速度非常快,但是在一个大的数据库中使用依然有可能造成性能问题

  • SCAN(可以用于解决大数据keys | smembers 性能问题)
    //增量迭代元素
    // cursor 表示开始迭代的顺序
    // scan 每次会返回此次迭代进行的游标,可以直接将这个值作为下次迭代的游标
    // count [提示]scan每次迭代应该返回的元素数量,一般此选项有效,默认为10
    // pattern 同 keys
    scan [cursor] | match [pattern] | count [count]
    

    scan 可能存在的问题:有可能在迭代过程中其他用户修改了数据,此时scan可能是获取不到这个数据的

    scan 保证如果在完整遍历的过程中,如果一个元素一直存在于数据库中,则scan一定会返回这个元素

    但是scan可能会返回重复的元素,因此过滤应该交给客户端自己完成

    scan 只是用于数据库[db],对于每种数据类型分别对应有:SSCAN,HSCAN,ZSCAN

  • SORT
    //将集合通过排序后返回,具体参数比较多,可以参考官方文档
    sort key [...]
    sort key DESC
    sort key limit 3 offset 1
    

    sort 比较复杂,这里简单讲解下:

    • 一般sort默认只能对数字排序,如果是其他的 则会报错,可以通过 alpha 指定为通过string排序
      sort list alpha
      
    • 可以通过DESC选项指定为反向排序

    • 可以通过limit offset 指定分页

    • 可以通过BY选项进行联合排序

      //先获取uid的值,然后组装到user_level_*上,然后以user_level_* 为key排序
      sort uid BY user_level_*
      
    • 可以使用GET选项,根据排序的结果取出相应的值
      //将uid排序后将结果组装再获取user_name_*的值
      //get可以多次使用,用来获取多个值
      SORT uid GET user_name_*
      
    • 可以通过stored选择将排序结果保存到数据库中
      sort number  stored sorted-numbers
      
  • FLUSHDB
    //清空当前数据库中所有key
    flushdb
    
  • FLUSHALL
    //清空当前Redis中所有数据库
    flushall
    
  • SELECT
    //切换当前数据库
    select [db]
    
  • SWAPDB
    //交换两个数据库的所有数据
    swapdb [db1] [db2]