一、概述:
本文将主要讲述与Key相关的Redis命令。学习这些命令对于学习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知识请关注redis入门教程栏目。
以上是redis中key相关命令详解的详细内容。更多信息请关注PHP中文网其他相关文章!

Redis脱颖而出是因为其高速、多功能性和丰富的数据结构。1)Redis支持字符串、列表、集合、散列和有序集合等数据结构。2)它通过内存存储数据,支持RDB和AOF持久化。3)从Redis6.0开始引入多线程处理I/O操作,提升了高并发场景下的性能。

RedisisclassifiedasaNoSQLdatabasebecauseitusesakey-valuedatamodelinsteadofthetraditionalrelationaldatabasemodel.Itoffersspeedandflexibility,makingitidealforreal-timeapplicationsandcaching,butitmaynotbesuitableforscenariosrequiringstrictdataintegrityo

Redis通过缓存数据、实现分布式锁和数据持久化来提升应用性能和可扩展性。1)缓存数据:使用Redis缓存频繁访问的数据,提高数据访问速度。2)分布式锁:利用Redis实现分布式锁,确保在分布式环境中操作的安全性。3)数据持久化:通过RDB和AOF机制保证数据安全性,防止数据丢失。

Redis的数据模型和结构包括五种主要类型:1.字符串(String):用于存储文本或二进制数据,支持原子操作。2.列表(List):有序元素集合,适合队列和堆栈。3.集合(Set):无序唯一元素集合,支持集合运算。4.有序集合(SortedSet):带分数的唯一元素集合,适用于排行榜。5.哈希表(Hash):键值对集合,适合存储对象。

Redis的数据库方法包括内存数据库和键值存储。1)Redis将数据存储在内存中,读写速度快。2)它使用键值对存储数据,支持复杂数据结构,如列表、集合、哈希表和有序集合,适用于缓存和NoSQL数据库。

Redis是一个强大的数据库解决方案,因为它提供了极速性能、丰富的数据结构、高可用性和扩展性、持久化能力以及广泛的生态系统支持。1)极速性能:Redis的数据存储在内存中,读写速度极快,适合高并发和低延迟应用。2)丰富的数据结构:支持多种数据类型,如列表、集合等,适用于多种场景。3)高可用性和扩展性:支持主从复制和集群模式,实现高可用性和水平扩展。4)持久化和数据安全:通过RDB和AOF两种方式实现数据持久化,确保数据的完整性和可靠性。5)广泛的生态系统和社区支持:拥有庞大的生态系统和活跃社区,

Redis的关键特性包括速度、灵活性和丰富的数据结构支持。1)速度:Redis作为内存数据库,读写操作几乎瞬时,适用于缓存和会话管理。2)灵活性:支持多种数据结构,如字符串、列表、集合等,适用于复杂数据处理。3)数据结构支持:提供字符串、列表、集合、哈希表等,适合不同业务需求。

Redis的核心功能是高性能的内存数据存储和处理系统。1)高速数据访问:Redis将数据存储在内存中,提供微秒级别的读写速度。2)丰富的数据结构:支持字符串、列表、集合等,适应多种应用场景。3)持久化:通过RDB和AOF方式将数据持久化到磁盘。4)发布订阅:可用于消息队列或实时通信系统。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3汉化版
中文版,非常好用

Dreamweaver Mac版
视觉化网页开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器