Redis入门与命令汇总

前言

  这里主要列出 Redis 的常用命令以供方便查阅,以及各类型的特点、案例等。

Redis 的数据类型

  Redis 作为高性能的键值对数据库,为了适应较复杂的数据场景,提供了五种数据类型。

  • 字符串类型

    顾名思义,存储的是字符串。

    set key value,设置 key 的值为 value,如:set aa hello;

    get key,根据 key 取值,如:get aa;

    incr key,将 key 中存储的数字形式的字符串值增一,如果 key 不存在,那么会创建 key 并初始化为 0 ,然后再增一,如:incr num // num == 1;

    incrby key increment,跟 incr 命令一样,唯一不同是可以将 key 存储的值加上 increment,如:incrby num 10 // num == 10

    decr key,与 incr 命令用法一样,但其是让值减一,如:decr num // num == -1;

    decrby key increment,与 incrby 命令用法一样,但其是让值减上 increment,如:decrby num 10 // num == -10;

    incrbyfloat key increment,与 incrby 命令用法一样,但其增加的是浮点数,如:incrbyfloat num 0.1 // num == 0.1;

    append key value,将 value 追加到 key 的值的末尾,如:set aa hello,append aa redis,则 get aa // aa == helloredis;

    strlen key,返回 key 存储的值的长度,如:set aa hello,strlen aa // 5;

    mset key value [key value ....],与 set 一样,不过可以同时设置多个 key,如:mset aa 1 bb 2 cc 3;

    mget key [key...],与 get 一样,不过可以同时获取多个 key 的值,如:mget aa bb cc;

    getbit key offset,getbit 获取 key 存储的值的 offset 位置的值(0 或 1),如:set aa a,getbit aa 3 // 0,a 的 ascii 码为 97,而 97 的二进制为 01100001,而 01100001 的第三个为 0(从 0 开始);

    setbit key offset,setbit 与 getbit 相反,返回值为 key 的旧值;

    bitcount key [start] [end],获取 key 存储的值的二进制位为 1 的个数,start,end 可以限制范围,如:set aa hello,bitcount aa 0 1 则返回 7,0 1 计算的是 he 的二进制位为 1 的个数,所以 start,end单位是字节;

    bitop operation destkey key [key....],对多个 key 存储的值进行未运算,并将结果存储到 destkey 中。

  

  • 散列类型

    散列类型存储的也是字典结构,但字典的字段必须是字符串。

    hset key field value,与字符串类型的 set 命令类似,如:hset person age 10 // 存储的字典是 person.age;

    hget key field,与字符串类型的 get 命令类似,如:hget person age // 10;

    hmset key field value [ field value.... ],与 mset 类似;

    hmget key field [ field ... ],与 mget 类似;

    hgetall key,返回 key 存储的字典;

    hexists key field,判断 key 的字典的字段是否存在;

    hsetnx key field value,与 hset 类型,而 hsetnx 则是在 key 不存在时设置,如果 key 存在则不执行;

    hincrby key field increment,与 incrby 一样;

    hdel key field [ field... ],删除一个或多个字段;

    hkeys key,只获取 key 中所有的字段;

    hvals key,只获取 key 中所有的字段值;

    hlen key,获取 key 的字段数量。

 

  • 列表类型

    列表类型是存储一个有序的字符串列表,并且列表类型内部的实现方式是双向链表,所以向列表两端添加元素的复杂度是O(1)。

    lpush key value [ value... ],向 key 的左端添加一个或多个元素;

    rpush key value [ value... ],向 key 的右端添加一个或多个元素;

    lpop key,在 key 的左端弹出一个元素;

    rpop key,在 key 的右端弹出一个元素;

    llen key,获取 key 中列表的元素个数;

    lrange key start stop,获取指定区间的元素;

    lrem key count value,根据 count 的值,移除与 value 相等的元素,如果 count > 0 则从表头开始搜索,移除与 value 相等的元素,移除数量为 count;如果 count < 0 则从表尾开始搜索,移除与 value 相等的元素,移除数量为 count 的绝对值;如果 count = 0 则移除所有与 value 相等的值。

    lindex key index,根据下标(index)获取元素;

    lset key index value,根据下标(index)设置 key 的值;

    ltrim key start end,删除指定范围外的所有元素;

    linsert key BEFORE | AFTER pivot value,linsert 首先会在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数是 BEFORE 还是 AFTER 来决定将value插入到该元素的前面还是后面;

    rpoplpush source destination,此命令会先从 source 列表类型键的右边弹出一个元素,然后将其加入到 destination 列表类型键的左边,并返回这个元素的值;

    brpop key [key ...] timeout,此命令是阻塞版的 rpop,有命令才会弹出,无命令将会阻塞,直到有命令弹出;

    blpop key [key ...] timeout,与 brpop 一样,不过是 左弹出;

 

  • 集合类型

    集合类型与列表类型相似,但是集合类型是无序的,并且集合类型内部实现方式是一个值为空的散列表实现的,所以效率极高。

    sadd key member [ member... ],向 key 中添加一个或多个元素;

    srem key member [ member... ],在 key 中删除指定的一个或多个元素;

    smembers key,获取集合中所有的元素;

    sismember key member,判断元素是否在集合中;

    sdiff key [ key... ],对多个集合进行差集运算;

    sinter key [ key... ],对多个集合进行交集运算;

    sunion key [ key... ],对多个集合进行并集运算;

    scard key,获取 key 中的元素个数;

    sdiffstore destination key [ key... ],与 sdiff 一样,只不过其可将结果存储到 destination 中;

    sinterstore destination key [ key... ],同 sdiffstore;

    sunionstore destination key [ key... ],同 sdiffstore;

    srandmember key [ count ],随机从集合中获取一个元素,如果 count 为正数时,则会随机从集合里获得 count 个不重复的元素,如果coun的值大于集合中的元素个数,则会返回集合中的全部元素。 如果 count 为负数时,则会随机从集合里获得 count 的绝对值的个数的元素,这些元素有可能相同;

    spop key,随机从集合中弹出一个元素。

     

  • 有序集合类型

    有序集合类型与集合类型一样,只不过是有序的。

    zadd key score member [ [score member]... ],将一个或多个元素及其 score 添加到有序集合中;

    zscore key member,获得有序集合中某个元素的 score 值;

    zrange key start stop [ WITHSCORES ],获得指定区间内的元素,使用 WITHSCORES 则会将 score 值一并返回,获得的元素从小到大排序;

    zrevrange key start stop [ WITHSCORES ],与 zrange 一样,不过此命令是从大到小排序;

    zrangebyscore key min max [ WITHSCORES ] [ LIMIT offset count ],根据指定范围的 score 值来返回元素,并可以使用 "(" 或 ")",表示不包含值,而 LIMIT 则在获得的元素基础上向后偏移 offset 个元素,并获取 count 个元素;

    zincrby key increment member,增加一个元素的 score 值;

    zcard key,获取集合中元素的数量;

    zcount key min max,获得指定 score 区间的元素个数;

    zrem key member [ member.... ],删除一个或多个元素;

    zremrangebyrank key start stop,删除指定排名区间内的所有元素;

    zremrangebyscore key min max,删除指定 score 区间内的所有元素;

    zrank key member,获得元素从小到大的排名;

    zrevrank key member,与 zrank 相反;

 

事务

  Redis 的事务不支持回滚操作,当事务中有语法错误时,Redis 不会执行( Redis 可以检测出语法错误 ),但当事务中有运行时错误时,仍然会执行,这需要在开发时确保事务中的语句执行无错。

  Redis 执行事务时,即使此时有其他客户端连接并要执行命令,也不会干扰事务执行,等事务执行完成再执行新的命令。

  

  multi,开启事务,此后的命令不会立即执行,会先加入队列;

  exec,执行事务中的所有命令;

  watch key [ key.... ],监控一个或多个 key ,如果在事务执行之前监控的 key 被修改,则事务不会执行;

  unwatch,取消 watch 命令对所有被监控的 key,如果在执行 watch 后,exec 或 discard 命令先执行了的话,就不需要再执行 unwatch 了,因为 exec 会执行事务,因此 watch 命令的效果已经产生了,而 discard 在取消事务的同时也会取消所有对 key 的监控;

 

对 key 操作的命令

  keys pattern,查找所有符合给定模式 pattern 的 key ;

  del key [key ...]删除给定的一个或多个 key ;

  type key返回 key 所储存的值的类型;

  expire key seconds,给给定 key 设定有效时间,当 key 过期时,key 会被删除。而当 key 在有效期内被重新 set 或 getset 则会清除此 key 的有效时间(重新变为持久),对值操作的命令不受影响,如:lpush、incr、hset等;

  ttl key,返回 key 的剩余时间,单位秒;

  persist key,取消 key 的有效时间,重新变为持久化;

  expireat key timestamp,与 expire 相同,不过此命令是设置 Unix 时间(以秒单位);

  pexpireat key milliseconds-timestamp,与 expireat 一样,不过此命令以毫秒为单位的 Unix 时间戳;

  sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination],返回或保存给定列表、集合、有序集合 key 中经过排序的元素。排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较;

 

发布/订阅

  订阅者可以订阅多个频道,而发布者可以向订阅者发布消息,并所有订阅者都会接收到。

  

  subscribe channel [channel ...]订阅给定的一个或多个频道的信息;

  publish channel message,将信息 message 发送到指定的频道 channel; 

  psubscribe pattern [pattern ...]订阅一个或多个符合给定模式的频道;

  unpsubscribe [channel [channel ...]],指示客户端退订给定的频道,如果没有指定频道则退订所有频道;

 

提示

  更详细的命令解释请参考:http://doc.redisfans.com/

 

参考

  http://doc.redisfans.com/

 

posted @ 2021-06-22 21:21  blogCblog  阅读(51)  评论(0编辑  收藏  举报