键空间
在 Redis 中管理密钥:密钥过期、扫描、更改和查询密钥空间
Redis 密钥是二进制安全的;这意味着您可以使用任何二进制序列作为 key,从字符串(如 “foo”)到 JPEG 文件的内容。 空字符串也是一个有效的键。
关于键的其他一些规则:
- 非常长的键不是一个好主意。例如,1024 字节的密钥是错误的 想法不仅在内存方面,还因为在 数据集可能需要几个成本高昂的键比较。即使手头的任务 是匹配一个大值的存在,对其进行哈希处理(例如 替换为 SHA1)是一个更好的主意,尤其是从内存的角度来看 和带宽。
- 非常短的键通常不是一个好主意。写作没有什么意义 “u1000flw” 作为键,如果您可以改为编写 “user:1000:followers”。后者 更具可读性,并且添加的空格与 Key 对象本身和 Value 对象。虽然短键显然会 消耗更少的内存,您的工作是找到合适的平衡。
- 尝试坚持使用 schema。例如,“object-type:id” 就是一个很好的 idea,如 “user:1000”。点或破折号通常用于多词 字段,如 “comment:4321:reply.to” 或 “comment:4321:reply-to”。
- 允许的最大密钥大小为 512 MB。
更改和查询密钥空间
有些命令未在特定类型上定义,但很有用 以便与空间的 keys 进行交互,因此,可以与 任何类型的密钥。
例如,EXISTS
command 返回 1 或 0 以表示给定键
在数据库中存在或不存在,而DEL
命令删除密钥
和关联的值,无论值是什么。
> set mykey hello
OK
> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0
从这些示例中,您还可以了解如何作DEL
本身返回 1 或 0,具体取决于
密钥被删除(它存在)或未删除(没有这样的密钥)
name) 的 S S
与空间相关的关键命令有很多,但以上两个是
essential 的与TYPE
command 返回
的值存储在指定键中:
> set mykey x
OK
> type mykey
string
> del mykey
(integer) 1
> type mykey
none
密钥过期
在继续之前,我们应该了解一个重要的 Redis 功能,无论您存储的值类型如何,它都可以正常工作:密钥过期。密钥过期允许您为密钥设置超时,也称为“生存时间”或“TTL”。当生存时间过后,密钥将自动销毁。
关于密钥过期的一些重要说明:
- 可以使用秒或毫秒精度来设置它们。
- 但是,过期时间分辨率始终为 1 毫秒。
- 有关过期的信息将复制并保存在磁盘上,当您的 Redis 服务器保持停止状态时,这时间实际上已经过去了(这意味着 Redis 会保存密钥过期的日期)。
使用EXPIRE
命令设置密钥的过期时间:
> set key some-value
OK
> expire key 5
(integer) 1
> get key (immediately)
"some-value"
> get key (after some time)
(nil)
钥匙在两人之间消失了GET
调用,因为第二个调用是
延迟超过 5 秒。在上面的示例中,我们使用了EXPIRE
在
order 来设置过期时间(也可以用来设置一个不同的
expire 复制到已经具有 key 的 key,例如PERSIST
可以按顺序使用
以删除 Expire 并使密钥永久保留)。然而,我们
还可以使用其他 Redis 命令创建带有 expires 的密钥。例如
用SET
选项:
> set key 100 ex 10
OK
> ttl key
(integer) 9
上面的示例使用字符串值设置 key100
,具有 expire
的 10 秒。稍后TTL
命令以检查
钥匙的剩余生存时间。
要设置和检查 expires in milliseconds,请检查PEXPIRE
和
这PTTL
命令以及SET
选项。
导航键空间
扫描
要以高效的方式增量迭代 Redis 数据库中的键,您可以使用SCAN
命令。
因为SCAN
允许增量迭代,每次调用只返回少量元素,它可以在生产中使用,而不会有命令的缺点,如KEYS
或SMEMBERS
当针对大量键或元素调用时,这可能会阻止服务器很长时间(甚至几秒钟)。
但是,虽然阻止了像SMEMBERS
能够在给定时刻提供属于 Set 的所有元素。
这SCAN
命令系列仅对返回的元素提供有限的保证,因为我们增量迭代的集合可以在迭代过程中更改。
钥匙
迭代键空间的另一种方法是使用KEYS
命令,但应谨慎使用此方法,因为KEYS
将阻塞 Redis 服务器,直到返回所有 key。
警告:考虑KEYS
作为只应在生产中使用的命令
环境。
KEYS
在对大型数据库执行时可能会破坏性能。
此命令用于调试和特殊作,例如更改
您的 Keyspace 布局。
不要使用KEYS
在您的常规应用程序代码中。
如果你正在寻找一种方法来在 keyspace 的子集中查找 key,请考虑
用SCAN
或集。
支持的 glob 样式模式:
h?llo
比赛hello
,hallo
和hxllo
h*llo
比赛hllo
和heeeello
h[ae]llo
比赛hello
和hallo,
但不是hillo
h[^e]llo
比赛hallo
,hbllo
, ...但不是hello
h[a-b]llo
比赛hallo
和hbllo
如果要逐字匹配特殊字符,则用于转义它们。\