• Redis键管理


    单个键管理

    键重命名
    rename key newkey  newkey存在时会被强制覆盖
    renamenx key newkey 只有newkey不存在时候才能执行成功
    注意:
    ·由于重命名键期间会执行del命令删除旧的键, 如果键对应的值比较大, 会存在阻塞Redis的可能性, 这点不要忽视。
    ·如果rename和renamenx中的key和newkey如果是相同的, 3.2之前的版本会报错,3.2之后的版本(包含3.2)返回ok
    
    随机返回一个键
    randomkey
    
    
    键过期
    ·expire key seconds: 键在seconds秒后过期。
    ·expireat key timestamp: 键在秒级时间戳timestamp后过期。
    ·pexpire key milliseconds: 键在milliseconds毫秒后过期。
    ·pexpireat key milliseconds-timestamp键在毫秒级时间戳timestamp后过期。
    注:无论是使用过期时间还是时间戳, 秒级还是毫秒级, 在Redis内部最终使用的都是pexpireat。
    如果expire key的键不存在, 返回结果为0;如果过期时间为负值, 键会立即被删除, 犹如使用del命令一样
    
    查询键的剩余过期时间
    ttl key 精度为秒级
    pttl key 精度更高可以达到毫秒级别
    有3种返回值:
    ·大于等于0的整数: 键剩余的过期时间(ttl是秒, pttl是毫秒) 。
    ·-1: 键没有设置过期时间。
    ·-2: 键不存在。
    
    清除键的过期时间
    persist key
    
    对于字符串类型键, 执行set命令会去掉过期时间, 这个问题很容易在开发中被忽视。
    
    Redis不支持二级数据结构(例如哈希、 列表) 内部元素的过期功能, 例如不能对列表类型的一个元素做过期时间设置。
    
    setex命令作为set+expire的组合, 不但是原子执行, 同时减少了一次网络通讯的时间。
    
    
    键迁移
    move key db 把指定的键从源数据库移动到目标数据库(redis内部多库间迁移)
    
    dump+restore  实现在不同的Redis实例之间进行数据迁移的功能, 整个迁移的过程分为两步:
    1) dump key   在源Redis上, dump命令会将键值序列化, 格式采用的是RDB格式。
    2) restore key ttl value  在目标Redis上, restore命令将上面序列化的值进行复原, 其中ttl参数代表过期时间, 如果ttl=0代表没有过期时间。
    
    migrate
    migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key ...]]
    ·host: 目标Redis的IP地址。
    ·port: 目标Redis的端口。
    ·key|"": 在Redis3.0.6版本之前, migrate只支持迁移一个键, 所以此处是要迁移的键, 但Redis3.0.6版本之后支持迁移多个键, 如果当前需要迁移多个键, 此处为空字符串""。
    ·destination-db: 目标Redis的数据库索引, 例如要迁移到0号数据库, 这里就写0。
    ·timeout: 迁移的超时时间(单位为毫秒) 。
    ·[copy]: 如果添加此选项, 迁移后并不删除源键。
    ·[replace]: 如果添加此选项, migrate不管目标Redis是否存在该键都会正常迁移进行数据覆盖。
    ·[keys key[key...]]: 迁移多个键, 例如要迁移key1、 key2、 key3, 此处填写“keys key1 key2 key3”。
    实现过程和dump+restore基本类似, 但是有3点不太相同: 
    第一, 整个过程是原子执行的, 不需要在多个Redis实例上开启客户端的, 只需要在源Redis上执行migrate命令即可。 
    第二, migrate命令的数据传输直接在源Redis和目标Redis上完成的。 
    第三, 目标Redis完成restore后会发送OK给源Redis, 源Redis接收后会根据migrate对应的选项来决定是否在源Redis上删除对应的键。
    
    migrate迁移的几种情况:
    1、源Redis有键, 目标Redis没有,返回ok
    2、源Redis和目标Redis都有键,会覆盖掉目标redis的key的value
    3、源Redis没有键hello,返回nokey

    movedump+restoremigrate三个命令比较

    键遍历

    全量遍历键
    keys pattern  pattern使用的是glob风格的通配符
    其他数据结构的全量遍历:hgetall、 smembers、 zrange
    注:如果Redis包含了大量的键, 执行keys命令很可能会造成Redis阻塞, 所以一般建议不要在生产环境下使用keys命令。
    
    
    渐进式遍历
    scan cursor [match pattern] [count number]
    ·cursor是必需参数, 实际上cursor是一个游标, 第一次遍历从0开始, 每次scan遍历完都会返回当前游标的值, 直到游标值为0, 表示遍历结束。
    ·match pattern是可选参数, 它的作用的是做模式的匹配, 这点和keys的模式匹配很像。
    ·count number是可选参数, 它的作用是表明每次要遍历的键个数, 默认值是10, 此参数可以适当增大。
    其他数据结构的渐进式遍历:hscan、 sscan、 zscan
    注:scan并不能保证完整的遍历出来所有的键(如果在scan的过程中如果有键的变化,会出现新增的键可能没有遍历到, 遍历出了重
    复的键等情况)

    数据库管理

    切换数据库
    select dbIndex
    数据库个数在配置文件中配置,参数:databases 16  ---配置16个库,dbindex为0-15
    注:cluster模式只允许使用0号库
    
    生产环境不建议使用多库功能:
    ·Redis是单线程的。 如果使用多个数据库, 那么这些数据库仍然是使用一个CPU, 彼此之间还是会受到影响的。
    ·多数据库的使用方式, 会让调试和运维不同业务的数据库变的困难,假如有一个慢查询存在, 依然会影响其他数据库, 这样会使得别的业务方定位问题非常的困难。
    ·部分Redis的客户端根本就不支持这种方式。 即使支持, 在开发的时候来回切换数字形式的数据库, 很容易弄乱。
    
    清空数据库
    flushdb   只清空当前数据库
    flushall   清空所有数据库
  • 相关阅读:
    作业01(2020年10月10号)
    C语言I博客作业04
    C语言I博客作业03
    C语言I博客作业02
    第一次学c语言作业
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
  • 原文地址:https://www.cnblogs.com/MacoLee/p/13970756.html
Copyright © 2020-2023  润新知