zoukankan      html  css  js  c++  java
  • 1. Redis--KEY(键)

    命令原型

    时间复杂度

    命令描述

    返回值

    KEYS pattern

    O(N)

    时间复杂度中的N表示数据库中Key的数量。

    获取所有匹配pattern参数的Keys需要说明的是,在我们的正常操作中应该尽量避免对该命令的调用,因为对于大型数据库而言,该命令是非常耗时的,对Redis服务器的性能打击也是比较大的

    pattern支持glob-style的通配符格式,如*表示任意一个或多个字符,?表示任意字符,[abc]表示方括号中任意一个字母

    匹配模式的键列表。

    DEL key [key ...]

    O(N)

    时间复杂度中的N表示删除的Key数量。

    从数据库删除中参数中指定的keys,如果指定键不存在,则直接忽略。

    另行指出的是,如果指定的Key关联的数据类型不是String类型,而是ListSetHashesSorted Set等容器类型,该命令删除每个键的时间复杂度为O(M),其中M表示容器中元素的数量。而对于String类型的Key,其时间复杂度为O(1)

    实际被删除的Key数量。

    EXISTS key 

    O(1)

    判断指定键是否存在

    1表示存在

    0表示不存在

    MOVE key db 

    O(1)

    将当前数据库中指定的键Key移动到参数中指定的数据库中

    如果该Key在目标数据库中已经存在,或者在当前数据库中并不存在,该命令将不做任何操作并返回0 

    移动成功返回1

    否则0

    RENAME key newkey 

    O(1)

    为指定指定的键重新命名,如果参数中的两个Keys的命令相同,或者是源Key不存在,该命令都会返回相关的错误信息。

    如果newKey已经存在,则直接覆盖。 

    成功返回OK

    RENAMENX key newkey

    O(1)

    当且仅当newkey不存在时,将key改名为newkey

    当key不存在时,返回一个错误

    修改成功1,其他报错

    newkey存在返回0

    PERSIST key

    O(1)

    如果Key存在过期时间,该命令会将其过期时间消除,使该Key不再有超时,而是可以持久化存储。

    1表示Key的过期时间被移出,

    0表示该Key不存在或没有过期时间

    EXPIRE key seconds 

    O(1) 

    该命令为参数中指定的Key设定超时的秒数,在超过该时间后,Key被自动的删除。如果该Key在超时之前被修改,与该键关联的超时将被移除。 

    1表示超时被设置,

    0则表示Key不存在,或不能被设置

    EXPIREAT key timestamp 

    O(1) 

    该命令的逻辑功能和EXPIRE完全相同,唯一的差别是该命令指定的超时时间是绝对时间,而不是相对时间。该时间参数是Unix timestamp格式的,即从197011日开始所流经的秒数。

    1表示超时被设置,

    0则表示Key不存在,或不能被设置

    TTL key 

    O(1)

    获取该键所剩的超时描述。 

    返回剩余时间

    如果键不存在返回-2

    没有设过期键返回-1

    RANDOMKEY

    O(1)  

    从当前打开的数据库中随机的返回一个Key

    返回的随机键,如果该数据库是空的则返回nil

    TYPE key 

    O(1) 

    获取与参数中指定键关联值的类型,该命令将以字符串的格式返回。

    返回的字符串为string、list、set、hash和zset,如果key不存在返回none

    SORT 

    key [BY pattern]

    [LIMIT offset count]

    [GET pattern [GETpattern ...]] [ASC|DESC] [ALPHA] [STORE destination] 

    O(N+M*log(M)) 

    这个命令相对来说是比较复杂的,因此我们这里只是给出最基本的用法,有兴趣的网友可以去参考redis的官方文档。

    返回排序后的原始列表

    SCAN cursor [MATCH pattern] [COUNT count]

     

    SCAN命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为SCAN命令的游标参数,以此来延续之前的迭代过程

    返回一个长度为2的数组,游标和key

    实例:
    1. KEYS/ RENAME/ DEL/ EXISTS/ MOVE/ RENAMENX:
    KEYS
    KEYS *匹配数据库中所有key。
    KEYS h?llo匹配hello,hallo和hxllo等。
    KEYS h*llo匹配hllo和heeeeello等。
    KEYS h[ae]llo匹配hello和hallo,但不匹配hillo
    特殊符号用 转义
    redis> MSET one 1 two 2 three 3 four 4      # 一次设置4 个key
    OK
    redis> KEYS *o*
    1) "four"
    2) "two"
    3) "one"
    redis> KEYS t??
    1) "two"
    redis> KEYS t[w]*
    1) "two"
    redis> KEYS *           # 匹配数据库内所有key
    1) "four"
    2) "three"
    3) "two"
    4) "one"
    -----------------------------------------------------
    RENAME / RENAMENX
    # key 存在且newkey 不存在
    redis> SET message "hello world"
    OK
    redis> RENAME message greeting
    OK
    redis> EXISTS message   # message 不复存在
    (integer) 0
    redis> EXISTS greeting   # greeting 取而代之
    (integer) 1
    # 当key 不存在时,返回错误
    redis> RENAME fake_key never_exists
    (error) ERR no such key
     
    # newkey 已存在时,RENAME 会覆盖旧newkey
    redis> SET pc "lenovo"
    OK
    redis> SET personal_computer "dell"
    OK
    redis> RENAME pc personal_computer
    OK
    redis> GET pc
    (nil)
    redis:1> GET personal_computer   # 原来的值dell 被覆盖了
    "lenovo"
     
    # RENAMENX  newkey 存在时,失败
    redis> SET animal "bear"
    OK
    redis> SET favorite_animal "butte
    OK
    redis> RENAMENX animal favorite_a
    (integer) 0
    redis> get animal
    "bear"
    redis> get favorite_animal
    "butterfly"
     
    2. PERSIST /EXPIRE/EXPIREAT/TTL/ PEXPIRE/PEXPRITEAT/PTTL
    127.0.0.1:6379> set key "hello"
    OK
    127.0.0.1:6379> EXPIRE key 15
    (integer) 1
    127.0.0.1:6379> TTL key
    (integer) 13
    127.0.0.1:6379> EXISTS key
    (integer) 1
    127.0.0.1:6379> TTL key        # 过期
    (integer) -2
    127.0.0.1:6379> EXISTS key
    (integer) 0
     
    127.0.0.1:6379> set key "hello"
    OK
    127.0.0.1:6379> EXPIRE key 15
    (integer) 1
    127.0.0.1:6379> TTL key
    (integer) 12
    127.0.0.1:6379> PERSIST key   # 永久
    (integer) 1
    127.0.0.1:6379> TTL key
    (integer) -1
    127.0.0.1:6379> get key
    "hello"
     
    127.0.0.1:6379> set key2 'unix time'
    OK
    127.0.0.1:6379> EXPIREAT key2 1655292000
    (integer) 1
    127.0.0.1:6379> TTL key2
    (integer) 239778314
     
    127.0.0.1:6379> set key1 'world'
    OK
    127.0.0.1:6379> PEXPIRE key1 36000    #毫秒
    (integer) 1
    127.0.0.1:6379> PTTL key1                     #毫秒
    (integer) 34127
    127.0.0.1:6379> ttl key1                          #秒
    (integer) 31
    127.0.0.1:6379> PTTL key1
    (integer) 12313
    127.0.0.1:6379> ttl key1
    (integer) 10
    127.0.0.1:6379> ttl key1
    (integer) -2
    127.0.0.1:6379> EXISTS key1
    (integer) 0
     
    3. TYPE / DUMP / RESTORE
    TYPE
    返回值:
    none(key不存在)  string(字符串)  list(列表)  set(集合)  zset(有序集)   hash(哈希表
    redis> SET weather "sunny"   # 字符串
    OK
    redis> TYPE weather
    string
     
    redis> LPUSH book_list "programming in scala"   # 列表
    (integer) 1
    redis> TYPE book_list
    list
     
    redis> SADD pat "dog"        # 集合
    (integer) 1
    redis> TYPE pat
    set
    ---------------------------------------------------------------------------------
    DUMP / RESTORE
    序列化给定key,并返回被序列化的值,使用RESTORE命令可以将这个值反序列化为Redis键。
    序列化生成的值有以下几个特点:
    • 它带有64位的校验和,用于检测错误,RESTORE在进行反序列化之前会先检查校验和。
    • 值的编码格式和RDB文件保持一致。
    • RDB版本会被编码在序列化值当中,如果因为Redis的版本不同造成RDB格式不兼容,那么Redis会拒绝对这个值进行反序列化操作。
     





  • 相关阅读:
    Door Frames CodeForces
    POJ 3090 Visible Lattice Points (ZOJ 2777)
    从斐波那契到矩阵快速幂
    Recursive sequence (矩阵快速幂)2016ACM/ICPC亚洲区沈阳站
    c++ 类实现 AVL树容器(包含迭代器)
    c++ 链表类的实现(包含迭代器)
    HDU
    【几何+模拟】二次元变换 计蒜客
    【bfs+链式向前星】防御僵尸(defend)计蒜客
    deque in Python
  • 原文地址:https://www.cnblogs.com/51runsky/p/11644ab014117bc08189ab6d9857f1d7.html
Copyright © 2011-2022 走看看