zoukankan      html  css  js  c++  java
  • redis常用命令手册大全

    一、五种数据类型
    1.Redis字符串String
    String 是最简单的类型,你可以理解成与 Memcached 是一模一样的类型,一个 key 对应一个value,其上支持的操作与 Memcached 的操作类似。但它的功能更丰富。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据.
    ①.set设置指定的key的值

    127.0.0.1:6379set name mz
    OK
    127.0.0.1:6379

    ②.get获取指定的key的值

    127.0.0.1:6379get name
    "mz"
    127.0.0.1:6379

    如果key不存在,返回nil

    127.0.0.1:6379get col
    (nil)
    127.0.0.1:6379

    ③.incr给指定的key值加一,返回一个加一之后的结果。

    127.0.0.1:6379set num 10
    OK
    127.0.0.1:6379incr num
    (integer) 11
    127.0.0.1:6379

    ④.incrby将 key 所储存的值加上给定的增量值

    127.0.0.1:6379incrby num 10
    (integer) 21
    127.0.0.1:6379

    ⑤.decr将key 中储存的数字值减一。

    127.0.0.1:6379decr num
    (integer) 20
    127.0.0.1:6379

    ⑥.decrby将 key 所储存的值减去给定的增量值

    127.0.0.1:6379decrby num 5
    (integer) 15
    27.0.0.1:6379

    ⑦.SETBIT key offset value

    127.0.0.1:6379setbit tom 100 1
    (integer) 0
    127.0.0.1:6379

    ⑧.getset key value
    将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

    127.0.0.1:6379getset num 0
    "15"
    127.0.0.1:6379get num
    "0"
    127.0.0.1:6379

    思考:getset和incr结合有什么作用呢?
    如果要设计一个复位的计数器,该如何使用呢?
    如果某一个进程发生时,就会调用incr,当该进程结束时,完成get myCount 和set myCount 0.

    127.0.0.1:6379incr myCount 
    (integer) 1
    127.0.0.1:6379incr myCount
    (integer) 2
    127.0.0.1:6379getset myCount 0
    "2"
    127.0.0.1:6379get myCount
    "0"
    127.0.0.1:6379

    应用:计数器

    计数器是 Redis 的原子性自增操作可实现的最直观的模式了,它的想法相当简单:每当某个操作发生时,向Redis 发送一个INCR 命令。
    比如在一个 web 应用程序中,如果想知道用户在一年中每天的点击量,那么只要将用户 ID 以及相关的日期信息作为键,并在每次用户点击页面时,执行一次自增操作即可。
    比如用户名是 peter ,点击时间是 2012 年 3 月 22 日,那么执行命令 INCR peter::2012.3.22 。
    可以用以下几种方式扩展这个简单的模式:
    • 可以通过组合使用INCR 和EXPIRE ,来达到只在规定的生存时间内进行计数 (counting) 的目的。
    • 客户端可以通过使用GETSET 命令原子性地获取计数器的当前值并将计数器清零
    • 使用其他自增/自减操作,比如DECR 和INCRBY ,用户可以通过执行不同的操作增加或减少计数器的值,比如在游戏中的记分器就可能用到这些命令。

    2.redis哈希(hash)

    Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
    ①.hset key fields
    设置哈希表中的key对应的 filed和value

    127.0.0.1:6379hmset cat name "tomcolor "redage "12"
    OK
    127.0.0.1:6379>

    ②.hget key field
    获取哈希表中key的字段值

      127.0.0.1:6379hget cat name
      "tom"
      127.0.0.1:6379

    ③.hlen key
    获取哈希表中字段的数量
    127.0.0.1:6379> hlen cat
    (integer) 3
    127.0.0.1:6379>

    ④.hkeys key
    获取该哈希表中所有的filed

    127.0.0.1:6379hkeys cat
    1) "name"
    2) "color"
    3) "age"
    127.0.0.1:6379

    ⑤.hvals key 获取哈希表中所有值

    127.0.0.1:6379hvals cat
    1) "tom"
    2) "red"
    3) "12"
    127.0.0.1:6379

    3.redis列表(list)
    ①.lpush key value
    将一个或多个值插入到列表头部
    key后面的value可以是多个

    127.0.0.1:6379lpush username xm
    (integer) 1
    127.0.0.1:6379lpush username xg
    (integer) 2
    127.0.0.1:6379lpush username zg
    (integer) 3
    127.0.0.1:6379lpush username we we
    (integer) 5
    127.0.0.1:6379

    ②.lrange key start end
    取出给定索引范围的列表值

    127.0.0.1:6379> lrange username 0 7
    1"we"
    2"we"
    3"zg"
    4"xg"
    5"xm"

    注:后面那个索引超出也没有关系,redis会自动处理,会取出在哪个范围内的所有值
    看完有什么发现呢?是不是觉得跟栈的特点很相似,先进后出。
    ③.lpop key
    移除并获取列表中的第一个元素

    127.0.0.1:6379lpop username
    "we"
    127.0.0.1:6379lrange username 0 10
    1) "we"
    2) "zg"
    3) "xg"
    4) "xm"
    127.0.0.1:6379

    ④.通过索引获取
    获取指定索引处的值,如果该索引处没有值,则返回nil

    127.0.0.1:6379lindex username 5
    (nil)
    127.0.0.1:6379lindex username 4
    "xm"
    127.0.0.1:6379

    ⑤.rpop key
    移除列表的最后一个元素,返回值为移除的元素。

    127.0.0.1:6379rpop username
    "xm"
    127.0.0.1:6379lrange username 0 10
    1) "we"
    2) "zg"
    3) "xg"
    127.0.0.1:6379

    应用:

    双十一秒杀
    最新消息的排行

    4.redis集合set

    Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
    Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
    集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

    ①.lpush key value

    127.0.0.1:6379lpush username weh
    (integer) 5
    127.0.0.1:6379sadd animal dog
    (integer) 1
    127.0.0.1:6379sadd animal pig
    (integer) 1
    127.0.0.1:6379sadd animal cat
    (integer) 1
     127.0.0.1:6379sadd animal cat
    (integer) 0
    127.0.0.1:6379smembers animal
    1) "pig"
    2) "dog"
    3) "cat"
    127.0.0.1:6379

    发现什么了吗?和Java中的set类似,无序不能重复

    ②.scard key 获取集合的成员数

    127.0.0.1:6379scard animal
    (integer) 5
    127.0.0.1:6379

    ③.smembers key返回集合中的所有成员

    127.0.0.1:6379> smembers animal
    1"sheep"
    2"pig"
    3"dog"
    4"cat"
    5"tiger"

    ④.spop key
    移除并返回集合中的一个随机元素

    127.0.0.1:6379spop animal
    "dog"
    127.0.0.1:6379smembers animal
     1) "cat"
     2) "pig"
     3) "sheep"
     4) "tiger"
    127.0.0.1:6379

    ⑤.SISMEMBER key member
    判断 member 元素是否是集合 key 的成员

     127.0.0.1:6379sismember animal cat
     (integer) 1
     127.0.0.1:6379sismember animal jj
     (integer) 0
     127.0.0.1:6379

    是返回1,否则,返回0
    ⑥.sinter key1 key2
    求集合中的交集

    127.0.0.1:6379sadd dog a b c d f g h
    (integer) 7
    127.0.0.1:6379sadd pig a b c d m l o
    (integer) 7
    127.0.0.1:6379sinter dog pig
    1) "d"
    2) "b"
    3) "a"
    4) "c"
    127.0.0.1:6379

    ⑦.sinterstore newkey key1 key2
    返回集合中的交集,并存放到新的集合中

    127.0.0.1:6379sinterstore my dog pig
    (integer) 4
    127.0.0.1:6379smembers my
    1) "a"
    2) "c"
    3) "b"
    4) "d"
    127.0.0.1:6379

    应用:

    每一个人的QQ好友都存放到一个集合中,这样求两个人共同好友的,只需求出交集即可。

    5.redis有序集合sorted set
    sorted set 是 set 的一个升级版本,它在 set 的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset 会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表,一列存 value,一列存顺序。操作中 key 理解为 zset 的名字。和 set 一样 sorted set 也是 string 类型元素的集合,不同的是每个元素都会关联一个 double类型的 score。sorted set 的实现是 skip list 和 hash table 的混合体。
    当元素被添加到集合中时,一个元素到 score 的映射被添加到 hash table 中,所以给定一个元素获取 score 的开销是 O(1),另一个 score 到元素的映射被添加到 skip list,并按照 score 排序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是 O(log(N))和 skip list 的开销一致,redis 的 skip list 实现用的是双向链表,这样就可以逆序从尾部取元素。sorted set 最
    经常的使用方式应该是作为索引来使用.我们可以把要排序的字段作为 score 存储,对象的 id当元素存储。

    以某一个条件为权重,进行排序。

    ①.zadd key scores members
    向名称为 key 的 zset 中添加元素 member,score 用于排序。如果该元素已经存在,则根据score 更新该元素的顺序

    127.0.0.1:6379zadd myaset 1 one
    (integer) 1
    127.0.0.1:6379zadd myaset 2 two
    (integer) 1
    127.0.0.1:6379zadd myaset 5 three
    (integer) 1
    127.0.0.1:6379zadd myaset 6 three
    (integer) 0
    127.0.0.1:6379zrange myaset 0 6 withscores
    1) "one"
    2) "1"
    3) "two"
    4) "2"
    5) "three"
    6) "6"
    127.0.0.1:6379

    我们可以看到three被设置了两次,以最后一次为准

    ②.zrem
    删除名称为 key 的 zset 中的元素 member

    127.0.0.1:6379> zrange myaset 0 6 withscores
    1"one"
    2"1"
    3"two"
    4"2"
    5"three"
    6"6"
    127.0.0.1:6379> zrem myaset one
    (integer) 1
    127.0.0.1:6379> zrange myaset 0 6 withscores
     1"two"
     2"2"
     3"three"
     4"6"
    127.0.0.1:6379> 

    two被删除

    ③. zincrby

    如果在名称为 key 的 zset 中已经存在元素 member,则该元素的 score 增加 increment;否则向集合中添加该元素,其 score 的值为 increment

    127.0.0.1:6379zrange myaset 0 6 withscores
    1) "two"
    2) "2"
    3) "three"
    4) "6"
    127.0.0.1:6379zincrby myaset 3 three
    "9"
    127.0.0.1:6379

    three由3增加到了9
    ④.zrank
    返回名称为 key 的 zset 中 member 元素的排名(按 score 从小到大排序)即下标

    127.0.0.1:6379zrank myaset two
    (integer) 0
    127.0.0.1:6379zrank myaset three
    (integer) 1
    127.0.0.1:6379

    注意:返回的是索引,不是score

    ⑤. zrevrank
    返回名称为 key 的 zset 中 member 元素的排名(按 score 从大到小排序)即下标

    127.0.0.1:6379zrevrange myaset 0 10 withscores
    1) "three"
    2) "9"
    3) "two"
    4) "2"
    127.0.0.1:6379

    ⑥.zcount
    返回集合中 score 在给定区间的数量

    127.0.0.1:6379zcount myaset 1 10
    (integer) 2
    127.0.0.1:6379

    应用:

    搜索商品时按照价格排序

    二.键值命令

    1. keys *
      返回所有key

      127.0.0.1:6379> keys *
       1"color"
       2"a"
       3"mz"
       4"my"
       5"x"
       6"name"
       7"customer"
       8"dog"
       9"username"

      2.keys w*
      取出以w开头的key

       127.0.0.1:6379keys w*
       1) "wan"
       2) "weh"
       127.0.0.1:6379

      3.exists key
      是否存在该键
      4.del key
      删除指定的键

      127.0.0.1:6379exists wan
       (integer) 1
      127.0.0.1:6379del wan
      (integer) 1
      127.0.0.1:6379exists wan
      (integer) 0
      127.0.0.1:6379

      5.expire
      设置过期时间(单位:秒)

      127.0.0.1:6379expire debt 15
      (integer) 1
      127.0.0.1:6379ttl debt
      (integer) 9
      127.0.0.1:6379ttl debt
      (integer) 2
      127.0.0.1:6379ttl debt
      (integer-2
      127.0.0.1:6379

      设置debt这个key的过期时间是15秒,然后我们不断的用ttl 来获取这个
      key 的有效时长,直至为-2 说明此值已过期
      6.move
      将当前数据库中的 key 转移到其它数据库中

      127.0.0.1:6379select 0
      OK
      127.0.0.1:6379set bus 1
      OK
      127.0.0.1:6379move bus 2
      (integer) 1
      127.0.0.1:6379select 2
      OK
      127.0.0.1:6379[2]get bus
      "1"
      127.0.0.1:6379[2]

      7.移除给定 key 的过期时间

      127.0.0.1:6379[2]expire bus 100
      (integer) 1
      127.0.0.1:6379[2]ttl bus
       (integer) 83
      127.0.0.1:6379[2]persist bus
      (integer) 1
      127.0.0.1:6379[2]ttl bus
      (integer-1
      127.0.0.1:6379[2]

      8.randomkey
      随即返回一个key

      127.0.0.1:6379randomkey
      "s"
      127.0.0.1:6379randomkey
      "myCount"
      127.0.0.1:6379randomkey
      "dog"
      127.0.0.1:6379

    9.rename
    重命名key

     127.0.0.1:6379rename s dg
     OK
     127.0.0.1:6379

    三、服务相关
    1.ping
    测试连接是否成功

     127.0.0.1:6379ping
      PONG
     127.0.0.1:6379

    2.quit
    退出

    3.dbsize
    返回数据库中的key的数目

     127.0.0.1:6379dbsize
     integer) 26
     127.0.0.1:6379

    4.flushdb
    删除当前库的所有key
    5.flushall
    删除所有数据库的key
    6.select 库的索引
    redis有16个数据库,默认都存在0号库

  • 相关阅读:
    async/await的一些用法
    软件须把握两个点: 错误可控, 复杂度可控
    C++内存管理原则
    *复赛前提醒
    一些好用的网站
    NOIP真题汇总
    信息学中的一些些数论
    [Luogu 1052] noip 05 过河
    浅谈概率期望动态规划
    [Luogu 1312] noip11 Mayan游戏
  • 原文地址:https://www.cnblogs.com/wanerhu/p/11403381.html
Copyright © 2011-2022 走看看