• Redis数据类型之Redis keys


    Redis keys

    Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值。

    关于key的几条规则:

    • 不要太长(不仅消耗内存,而且数据查找成本大)
    • 不要太短(语意不明 比如”u:1000:pwd”来代替”user:1000:password” 可读性变得不好了)
    • 固定模式比较好 如:”object-type:id:field”(”object-type:id:field”)多单词的字段名中加上一个点,就像这样:”comment:1234:reply.to”。

    常用操作

     案例:

    KEYS pattern

    查找所有符合给定模式pattern(正则表达式)的 key 。

    时间复杂度为O(N),N为数据库里面key的数量。

    例如,Redis在一个有1百万个key的数据库里面执行一次查询需要的时间是40毫秒 。

    警告KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 KEYS, 你最好还是用 Redis 的集合结构 SETS 来代替

    支持的正则表达模式:

    • h?llo 匹配 hellohallo 和 hxllo
    • h*llo 匹配 hllo 和 heeeello
    • h[ae]llo 匹配 hello 和 hallo, 但是不匹配 hillo
    • h[^e]llo 匹配 hallohbllo, … 但是不匹配 hello
    • h[a-b]llo 匹配 hallo 和 hbllo

    如果你想取消字符的特殊匹配(正则表达式,可以在它的前面加

    例子:

    redis> MSET one 1 two 2 three 3 four 4
    OK
    redis> KEYS *o*
    1) "four"
    2) "one"
    3) "two"
    redis> KEYS t??
    1) "two"
    redis> KEYS *
    1) "four"
    2) "three"
    3) "one"
    4) "two"
    redis>

    EXISTS key [key ...]

    时间复杂度:O(1)

    返回key是否存在。

    返回值:

    • 1 如果key存在
    • 0 如果key不存在

    例子

    redis> SET key1 "Hello"
    OK
    redis> EXISTS key1
    (integer) 1
    redis> EXISTS key2
    (integer) 0
    redis> 

    MOVE key db

    时间复杂度:O(1)

    将当前数据库的 key 移动到给定的数据库 db 当中。

    将当前数据库的 key 移动到给定的数据库 db 当中。

    如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。

    因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)。

    返回值

    • 移动成功返回 1
    • 失败则返回 0

    EXPIRE key seconds

    时间复杂度:O(1)

    设置key的过期时间,超过时间后,将会自动删除该key。在Redis的术语中一个key的相关超时是不确定的。

    刷新过期时间

    对已经有过期时间的key执行EXPIRE操作,将会更新它的过期时间。有很多应用有这种业务场景,例如记录会话的session。

    返回值

    • 1 如果成功设置过期时间。
    • 0 如果key不存在或者不能设置过期时间。

    例子

    redis> SET mykey "Hello"
    OK
    redis> EXPIRE mykey 10
    (integer) 1
    redis> TTL mykey
    (integer) 10
    redis> SET mykey "Hello World"
    OK
    redis> TTL mykey
    (integer) -1
    redis> 

    TTL key

    时间复杂度:O(1)

    返回key剩余的过期时间。 这种反射能力允许Redis客户端检查指定key在数据集里面剩余的有效期。

    从Redis2.8开始,错误返回值的结果有如下改变:

    • 如果key不存在或者已过期,返回 -2
    • 如果key存在并且没有设置过期时间(永久有效),返回 -1

    返回值

    key有效的秒数(TTL in seconds),或者一个负值的错误 (参考上文)。

    例子

    redis> SET mykey "Hello"
    OK
    redis> EXPIRE mykey 10 # 设置mykey 10秒后过期
    (integer) 1
    redis> TTL mykey # 查看mykey剩余的过期时间
    (integer) 10
    redis> 

    TYPE key

    时间复杂度:O(1)

    返回key所存储的value的数据结构类型,它可以返回stringlistsetzset 和 hash等不同的类型。

    返回值

    返回当前key的数据类型,如果key不存在时返回none

    例子

    redis> SET key1 "value"
    OK
    redis> LPUSH key2 "value"
    (integer) 1
    redis> SADD key3 "value"
    (integer) 1
    redis> TYPE key1
    string
    redis> TYPE key2
    list
    redis> TYPE key3
    set
    redis> 
  • 相关阅读:
    MySQL优化---主从复制
    MySQL性能优化---优化方案
    MySQL性能优化---索引
    MySQL性能优化---定位慢查询
    Linux开机启动过程详解
    naginx
    Git搭建
    脚本中特殊字符
    Shell脚本
    简单Shell脚本(实例)
  • 原文地址:https://www.cnblogs.com/chengmr/p/13293307.html
Copyright © 2020-2023  润新知