`
xinklabi
  • 浏览: 1587995 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

Redis key相关命令(查看所有key、过期等等)

 
阅读更多

转自:http://www.cnblogs.com/stephen-liu74/archive/2012/03/26/2356951.html

一、概述:

      在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String、List、Set、Hashes和Sorted-Set。这些命令都具有一个共同点,即所有的操作都是针对与Key关联的Value的。而该篇博客将主要讲述与Key相关的Redis命令。学习这些命令对于学习Redis是非常重要的基础,也是能够充分挖掘Redis潜力的利器。
      在该篇博客中,我们将一如既往的给出所有相关命令的明细列表和典型示例,以便于我们现在的学习和今后的查阅。

二、相关命令列表:

命令原型 时间复杂度 命令描述 返回值
KEYS pattern O(N) 时间复杂度中的N表示数据库中Key的数量。获取所有匹配pattern参数的Keys。需要说明的是,在我们的正常操作中应该尽量避免对该命令的调用,因为对于大型数据库而言,该命令是非常耗时的,对Redis服务器的性能打击也是比较大的。pattern支持glob-style的通配符格式,如*表示任意一个或多个字符,?表示任意字符,[abc]表示方括号中任意一个字母。 匹配模式的键列表。
DEL key [key ...] O(N) 时间复杂度中的N表示删除的Key数量。从数据库删除中参数中指定的keys,如果指定键不存在,则直接忽略。还需要另行指出的是,如果指定的Key关联的数据类型不是String类型,而是List、Set、Hashes和Sorted 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已经存在,则直接覆盖。   
RENAMENX key newkey O(1) 如果新值不存在,则将参数中的原值修改为新值。其它条件和RENAME一致。 1表示修改成功,否则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格式的,即从1970年1月1日开始所流经的秒数。 1表示超时被设置,0则表示Key不存在,或不能被设置。 
TTL key  O(1) 获取该键所剩的超时描述。  返回所剩描述,如果该键不存在或没有超时设置,则返回-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 [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]  O(N+M*log(M))  这个命令相对来说是比较复杂的,因此我们这里只是给出最基本的用法,有兴趣的网友可以去参考redis的官方文档。 返回排序后的原始列表。


三、命令示例:

   1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX:
    #在Shell命令行下启动Redis客户端工具。
    /> redis-cli
    #清空当前选择的数据库,以便于对后面示例的理解。
    redis 127.0.0.1:6379> flushdb
    OK
    #添加String类型的模拟数据。
    redis 127.0.0.1:6379> set mykey 2
    OK
    redis 127.0.0.1:6379> set mykey2 "hello"
    OK
    #添加Set类型的模拟数据。
    redis 127.0.0.1:6379> sadd mysetkey 1 2 3
    (integer) 3
    #添加Hash类型的模拟数据。
    redis 127.0.0.1:6379> hset mmtest username "stephen"
    (integer) 1
    #根据参数中的模式,获取当前数据库中符合该模式的所有key,从输出可以看出,该命令在执行时并不区分与Key关联的Value类型。
    redis 127.0.0.1:6379> keys my*
    1) "mysetkey"
    2) "mykey"
    3) "mykey2"
    #删除了两个Keys。
    redis 127.0.0.1:6379> del mykey mykey2
    (integer) 2
    #查看一下刚刚删除的Key是否还存在,从返回结果看,mykey确实已经删除了。
    redis 127.0.0.1:6379> exists mykey
    (integer) 0
    #查看一下没有删除的Key,以和上面的命令结果进行比较。
    redis 127.0.0.1:6379> exists mysetkey
    (integer) 1
    #将当前数据库中的mysetkey键移入到ID为1的数据库中,从结果可以看出已经移动成功。
    redis 127.0.0.1:6379> move mysetkey 1
    (integer) 1
    #打开ID为1的数据库。
    redis 127.0.0.1:6379> select 1
    OK
    #查看一下刚刚移动过来的Key是否存在,从返回结果看已经存在了。
    redis 127.0.0.1:6379[1]> exists mysetkey
    (integer) 1
    #在重新打开ID为0的缺省数据库。
    redis 127.0.0.1:6379[1]> select 0
    OK
    #查看一下刚刚移走的Key是否已经不存在,从返回结果看已经移走。
    redis 127.0.0.1:6379> exists mysetkey
    (integer) 0
    #准备新的测试数据。    
    redis 127.0.0.1:6379> set mykey "hello"
    OK
    #将mykey改名为mykey1
    redis 127.0.0.1:6379> rename mykey mykey1
    OK
    #由于mykey已经被重新命名,再次获取将返回nil。
    redis 127.0.0.1:6379> get mykey
    (nil)
    #通过新的键名获取。
    redis 127.0.0.1:6379> get mykey1
    "hello"
    #由于mykey已经不存在了,所以返回错误信息。
    redis 127.0.0.1:6379> rename mykey mykey1
    (error) ERR no such key
    #为renamenx准备测试key
    redis 127.0.0.1:6379> set oldkey "hello"
    OK
    redis 127.0.0.1:6379> set newkey "world"
    OK
    #由于newkey已经存在,因此该命令未能成功执行。
    redis 127.0.0.1:6379> renamenx oldkey newkey
    (integer) 0
    #查看newkey的值,发现它也没有被renamenx覆盖。
    redis 127.0.0.1:6379> get newkey
    "world"
        
   2. PERSIST/EXPIRE/EXPIREAT/TTL:    
    #为后面的示例准备的测试数据。
    redis 127.0.0.1:6379> set mykey "hello"
    OK
    #将该键的超时设置为100秒。
    redis 127.0.0.1:6379> expire mykey 100
    (integer) 1
    #通过ttl命令查看一下还剩下多少秒。
    redis 127.0.0.1:6379> ttl mykey
    (integer) 97
    #立刻执行persist命令,该存在超时的键变成持久化的键,即将该Key的超时去掉。
    redis 127.0.0.1:6379> persist mykey
    (integer) 1
    #ttl的返回值告诉我们,该键已经没有超时了。
    redis 127.0.0.1:6379> ttl mykey
    (integer) -1
    #为后面的expire命令准备数据。
    redis 127.0.0.1:6379> del mykey
    (integer) 1
    redis 127.0.0.1:6379> set mykey "hello"
    OK
    #设置该键的超时被100秒。
    redis 127.0.0.1:6379> expire mykey 100
    (integer) 1
    #用ttl命令看一下当前还剩下多少秒,从结果中可以看出还剩下96秒。
    redis 127.0.0.1:6379> ttl mykey
    (integer) 96
    #重新更新该键的超时时间为20秒,从返回值可以看出该命令执行成功。
    redis 127.0.0.1:6379> expire mykey 20
    (integer) 1
    #再用ttl确认一下,从结果中可以看出果然被更新了。
    redis 127.0.0.1:6379> ttl mykey
    (integer) 17
    #立刻更新该键的值,以使其超时无效。
    redis 127.0.0.1:6379> set mykey "world"
    OK
    #从ttl的结果可以看出,在上一条修改该键的命令执行后,该键的超时也无效了。
    redis 127.0.0.1:6379> ttl mykey
    (integer) -1

   3. TYPE/RANDOMKEY/SORT:
    #由于mm键在数据库中不存在,因此该命令返回none。
    redis 127.0.0.1:6379> type mm
    none
    #mykey的值是字符串类型,因此返回string。
    redis 127.0.0.1:6379> type mykey
    string
    #准备一个值是set类型的键。
    redis 127.0.0.1:6379> sadd mysetkey 1 2
    (integer) 2
    #mysetkey的键是set,因此返回字符串set。
    redis 127.0.0.1:6379> type mysetkey
    set
    #返回数据库中的任意键。
    redis 127.0.0.1:6379> randomkey
    "oldkey"
    #清空当前打开的数据库。
    redis 127.0.0.1:6379> flushdb
    OK
    #由于没有数据了,因此返回nil。
    redis 127.0.0.1:6379> randomkey
    (nil)

分享到:
评论

相关推荐

    Redis集群下过期key监听的实现代码

    于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。以上做法可能不尽人意,目前也没找到好的解决方案,如果有好的想法,请留言告知哦!不多说,直接贴我自己的代码! 2. ...

    Redis_Key操作命令

    【Redis_Key操作命令】是Redis中的重要组成部分,主要用于管理和操作Redis数据库中的键(Key)。Redis是一种内存数据存储系统,常用于实现数据队列、缓存、计数器等多种功能,而Key的操作是实现这些功能的基础。 一...

    监听redis过期key,做对应业务处理

    需要注意的是,Spring Data Redis默认并不直接支持Key过期事件的监听,而是通过Redis的`EXPIRE`命令设置Key的过期时间。当Key过期时,Redis会自动删除,而Spring Data Redis的缓存事件监听器会在缓存被清除时触发`...

    redis-cli 命令总结

    Redis 命令总结 Redis 提供了丰富的命令对数据库和各种数据类型进行操作,这些命令可以在 Linux 终端使用。在编程时,比如使用 Redis 的 Java 语言包,这些命令都有对应的方法。下面将 Redis 提供的命令做一总结。 ...

    redis命令集合,redis命令详解

    redis命令集合,redis命令详解 适合全体类型的命令 EXISTS key 判断一个键是否存在;存在返回 1;否则返回0; DEL key 删除某个key,或是一系列key;DEL key1 key2 key3 key4 TYPE key 返回某个key元素的数据类型 ( none:...

    Redis获取某个前缀的key脚本实例

    传统的`keys`命令虽然能快速找到所有匹配前缀的key,但在大型数据库中,由于其全量扫描的特性,可能导致服务器阻塞。因此,Redis提供了更为安全和高效的`SCAN`命令来解决这个问题。 `SCAN`命令是一个增量的遍历工具...

    redis命令大全

    ### Redis命令大全详解 #### 一、Keys命令 Redis提供了丰富的键管理命令,这些命令能够帮助用户有效地管理和操作键。 **1. DEL key** ...后续章节将继续介绍Redis的其他数据类型及其相关的命令。

    Redis清理过期key的方法.doc

    定时清理是通过 Redis 配置项 hz 定义的 serverCron 任务的执行周期,默认每次清理时间为 25ms,每次清理会依次遍历所有 DB,从 db 随机取出 20 个key,如果过期就删除,如果其中有 5 个 key 过期,那么就继续对这个...

    监听redis的key的变化

    4) MQTT订阅者订阅相关主题,接收到消息后处理Redis键的变化。 总结来说,"监听Redis的key变化"涉及到Redis的Pub/Sub和Keyspace Notifications功能,以及如何通过`mqttRedisListener`将这些变化通过MQTT协议传递给...

    redis 命令.pdf

    16. SETEX key seconds value:此命令用于将键值对存储在Redis中,并指定键的过期时间(以秒为单位)。 17. SETNX key value:此命令用于在键不存在的情况下设置键的值,如果键已存在则不会进行任何操作。 18. ...

    Redis常用命令、Redis高级命令、Redis命令、redis命令实践

    通过上述介绍,我们不仅了解了 Redis 的基本命令集,还深入学习了各种数据结构相关的命令,以及如何使用高级命令来进行更复杂的事务操作。这些命令构成了 Redis 的核心功能,掌握了它们就能在实际应用中灵活运用 ...

    redis 常用命令

    #### 键(Key)相关命令 - **EXISTS key**:检查指定的键是否存在。 - **DEL key**:删除指定的键。 - **TYPE key**:返回指定键的类型。 - **KEYS pattern**:查找所有匹配给定模式的键。 - **RANDOMKEY**:随机返回...

    Redis命令参考手册完整版

    然而,需要注意的是,使用KEYS命令在大数据集上可能会导致性能问题,因为它需要遍历所有key来匹配模式,所以它的时间复杂度为O(N),N是数据库中key的数量。在实际应用中,建议使用SCAN命令来代替KEYS命令,SCAN命令...

    Redis热点key及大key解决方案.docx

    这类键的存在可能导致所有请求集中在少数几个Key上,从而给Redis带来较大的负载压力。为了避免这种情况,可以通过以下方案解决。 **核心思想**: 采用“空间换时间”的策略,通过保留同一热点Key的两个版本来分散...

    Redis语法,Key值设计及常用案例介绍

    4. 查看所有键:`KEYS *`,不过在大型系统中慎用,可能会阻塞服务器。 5. 设置过期时间:`EXPIRE key seconds`,例如 `EXPIRE user:123 86400` 设定键24小时内过期。 二、Redis Key设计原则 1. 简洁性:Key应尽...

    redis常用命令集合.pdf

    - 缓存击穿:单个热点key过期时,大量请求会直接打到数据库。使用mutex互斥锁或其他方法控制对数据库的访问。 - 缓存雪崩:多个key在某个时间点同时过期,导致数据库承受巨大压力。可以通过分散缓存失效时间或采用...

    redis命令实践redis命令实践redis命令实践.txt

    ### Redis命令实践详解 #### 一、Redis简介 Redis(Remote Dictionary Server)是一个开源的、高性能的键值存储系统,支持多种数据结构如字符串、哈希表、列表、集合及有序集合等。它最大的特点是将数据存储在内存...

    windows下使用redis,Redis入门使用,Redis基础命令

    `DEL key`用于删除键,`EXPIRE key seconds`设置键的过期时间,`TTL key`检查键的剩余生存时间。`KEYS pattern`查找匹配模式的键,`DUMP key`序列化键的值,`RESTORE key ttl serialized-value`恢复。`PUBSUB`命令...

    Redis参数配置和命令使用手册

    本手册将详细阐述Redis的主要参数配置以及常用命令的使用方法。 首先,我们来看Redis的参数配置。Redis的配置文件通常命名为`redis.conf`,在该文件中,你可以调整各种参数以满足特定的性能和安全性需求。例如: 1...

    redis命令全集

    ### Redis命令全集详解 Redis 是一款开源的、支持多种数据结构的内存数据库服务器,它可以用作数据库、缓存和消息中间件。本篇将基于提供的部分Redis命令进行详细的解析与说明,帮助读者更好地理解与掌握Redis的...

Global site tag (gtag.js) - Google Analytics