个人介绍
大家好,我是:知识的搬运工旺仔
认真分享技术,记录学习过程的点滴,如果我的分享能为你带来帮助,请支持我奥
你的支持,是我每天更新的动力。
赞点: 留言:✍ 收藏:⭐
个人格言:想法一步一步的落实,才是你我前进最佳选择。
带你玩转 Redis 的 键(key)命令
-
- 1. 什么是Reids 的 键命令
- 2. 查询键
- 3. 修改键
- 4. 建的序列化
- 5. 键的生存时间
- 6. 键值对操作
- 7. 删除键
1. 什么是Reids 的 键命令
Redis 的键命令。用与管理key 的 增删改查
2. 查询键
EXISTS key
:::success EXISTS 命令:判断键是否存在
- key 存在,返回1
- key 不存在,返回0 :::
KEYS pattern
:::success KEYS 命令:查找键
- 用于按照指定的模式pattern 查找所有的key
- pattern 类似于正则表达式
- KEYS * :表示匹配查找数据库中的所有key
- kEYS r?dis :表示匹配 ?位置,任何一个字母,?仅代表任意一个字母,入:redis
- kEYS r*dis:表示匹配 位置,任何零个、一个或多个字母、 代表零个或多个,如:rdis、redis、reedis
- KEYS r[ae]dis :表示匹配radis 和 redis ,不会匹配别的,只会匹配这两种 :::
OBJECT subcommand [arguments [arguments] ]
:::success OBJECT 命令:查看键对象
-
用于从内部,查看给定key 的redis 对象,通常用于排错或者节省空间而对key 进行特殊处理
-
可以使用OBJECT 命令来决定是否清除key
-
OBJECT 有如下命令:
- OBJECT REFCOUNT key :返回key引用所存储的值的次数,多用于排错
- OBJECT ENCODING key :返回 key 所存错的值使用的底层数据结构
- OBJECT IDLETIME key :返回key 自存储以来的空闲时间,以秒为单位
-
Redis有多种编码格式
- 针对字符串,可以被编码为raw(一个字符串)或int(会被编码为64为有符号整数编码存储)
- 针对列表可以被编码为zipmap或linkedlist。ziplist 表示压缩表,表示占用空间较小的列表
- 针对集合可以被编码为intset 或 hashtable。intset只存储数字的小集合的特殊表示
- 针对哈希表可以编码为zipmap 或 hashtable。zipmap 是小哈希表的特殊表示
- 针对有序集合可以被编码为ziplist 或 skiplist。ziplist 主要用户表示小的有序集合,skiplist 可以表示任意大小的有序集合 :::
RANDOMKEY
:::success RANDOMKEY 命令:随机返回一个键
- 随机返回一个当前数据库中的一个key ,并且不会删除这个key :::
3. 修改键
RENAME key newkey
:::success RENAME 命令:修改键的名称
- 将key 的名称修改为 newkey
- key 不存在,返回一个错误
- newkey 已经存在,newkey 则会被覆盖 :::
RENAMWENX key newkey
:::success RENAMENX 命令:修改键的名称
- 仅当newkey 不存在时,才能修改
- key 不存在,返回一个错误 :::
4. 建的序列化
DUMP key
:::success DUMP 命令:序列化键
-
用户序列化给定的key,并返回被序列化的值
-
DUMP序列化生成的值具有以下特点
- 有64位的校验和,用于检测错误。RESTORE 命令在进行反序列化前,会先检查校验和
- 这个值的编码格式和RDB文件编码格式保持一致
- RDB 版本会被编码在序列化值中。Redis版本不同,RDB存在不兼容,Redis就无法进行反序列化
- 这个序列化的值中没有生存时间值 :::
RESTORE key ttl serialized-calue [REPLACE]
:::success RESTORE 命令:对序列化值进行反序列化
- 将一个给定的序列化值反序列化,并为它关联给定key
- ttl 用与为key 设置生存时间,单位为毫秒
- ttl = 0,则不设置生存时间
- 在执行反序列化之前,会对序列化的RDB版本和数据校验并进行检查
- RDB版本不相同或者数据不完整,反序列化失败RESTORE 拒绝进行反序列化,返回一个错误
- key存在,并给定REPLACE 参数,反序列化得出的值会替代key 的旧值
- key存在,没有设置REPLACE 参数,则返回一个错误 :::
5. 键的生存时间
PTTL key
:::success PTTL 命令:获取键的生存时间(毫秒)
- 以毫秒的形式返回key的剩余时间
- key不存在,返回-2
- key存在,但是没有设置生存时间,返回-1 :::
TTL key
:::success TTL 命令:获取键的生存时间(秒)
- 返回key 的生存时间,以秒为单位
- key不存在,返回-2
- key存在,但是没有设置生存时间,返回-1 :::
EXPIRE key seconds
:::success EXPIRE 命令:设置键的生存时间(秒)
- 设置key的生存时间,key 的生存时间为 0 时,这个key 将会被删除
- DEL 删除 key 的生存空间 和 key
- 修改有生存时间的key 的值,可以使用 SET 或 GETSET,这两个命令仅修改值,不影响生存时间
- PERSIST 删除key 的生存时间,实现key的持久化
- EXPIRE 修改key 的生存时间,旧的生存时间会被新值覆盖
- 设置生存时间存在,返回1
- key 不存在,或者不能为key设置生存时间(Redis版本过低),则返回 0 :::
PEXPIRE key milliseconds - timestamp
:::success PEXPIRE 命令:设置键的生存时间(毫秒)
- 以毫秒为单位设置key 的过期时间UNIX 时间戳
- 设置生存时间存在,返回1
- key 不存在,或者不能为key设置生存时间(Redis版本过低),则返回 0 :::
6. 键值对操作
MIGRATE host port key destination-db timeout [COPY] [REPLACE]
:::success MIGRATE 命令:转移键值对到远程目标数据库
-
将key 原子性地从当前数据库转移(复制)到指定目标数据库中
-
转移成功,key会出现在目标数据库中,当前数据库中key 会被删除
-
因为原子操作,转移和被转移的数据库会被阻塞,直到成功、或失败或达到超时时间
-
MIGRATE 的实现原理
- 源数据库,执行DUMP 命令,将它序列化后,再转移到目标数据库
- 目标数据库再使用RESTORE 命令,对数据进行反序列化,把反序列化后的数据保存到数据库中
- 源数据库,在遇见目标数据库执行完RESTORE, 返回ok,就会执行DEL 命令,删除key
-
timeout:设置源数据库和目标数据库转移的最大时间,单位时毫秒
-
MIGRATE 需要在timeout 时间内完成I/O操作,如果在执行I/O操作出现错误,或者超出timeout 时间范围,就会返回一个特殊的错误IOERR
-
IOERR 错误的两种情况
- 源数据库和目标数据库中可能同时存在key
- key 也可能只在源数据库中存在
-
COPY参数:表示转移之后,不会删除源数据库中的key
-
REPLACE:表示转移过程会替代目标数据库中已经存在的key :::
MOVE key db
:::success MOVE 命令:转移键值对到本地目标数据库
- 将当前数据库中的key 转移到指定的数据库db中
- key不存在,MOVE 命令什么也不做
- 源数据库和目标数据路中存在相同的key ,MOVE没有任何效果 :::
SORT key [By pattern] {LIMIT offset count] [GET pattern [GET patern…] ] [ASC | DESC] [ALPHA] [STOPE destination]
:::success SORT 命令:对键值对进行排序
- 返回或保存给定列表、集合、有序集合 key 中经过排序的元素
- 排序默认时以数字为对象,值会被解释为double 类型的浮点数,然会进行比较 :::
TYPE key
:::success TYPE 命令:获取键值对的类型
- key 不存在:则返回none
- key 所对应的值是字符串类型的,则返回string
- key 所对应的值是列表类型的,则返回list
- key所对应的值是集合类型的,则返回set
- key 所对应的值是有序集合的类型,则返回zset
- key 所对应的值是哈希类型的,则返回hash :::
7. 删除键
DEL key [key…]
:::success DEL:删除键
- 删除一个或者多个键
- key 不存在,会被忽略 :::
PERSIST key
:::success PERSIST 命令:删除键的生存时间
- 删除key的生存时间,将带有生存时间的 key 持久化 :::
看完了不妨给我点个赞吧,你的支持,是我每天更新的动力…