MagickCache 提供安全的方法和工具,用于将图像、图像序列、视频、音频或元数据缓存到本地文件夹中。任何内容都将内存映射以实现高效检索。通过检索图像的一部分,可以实现额外的效率。内容可以持久存在,或者您可以分配生存时间 (TTL) 以在 TTL 超过时自动使内容过期。MagickCache 支持几乎无限的内容,多达数十亿张图像,使其适用于作为 Web 图像服务。
MagickCache 与 ImageMagick 协同工作。下载 MagickCache 并安装。现在,您需要创建缓存并使用图像、视频和相关元数据填充它。
创建 MagickCache
您需要一个存储和检索内容的地方。让我们在本地文件系统上创建一个缓存
$ magick-cache -passkey passkey.txt create /opt/magick-cache
其中 `passkey.txt` 包含您的缓存密钥。请勿丢失您的密钥。没有它,您将无法识别、过期或删除缓存中的内容。
您只需要创建一次 MagickCache。但是,您可以使用不同的路径创建多个 MagickCache。
创建 MagickCache 后,您需要使用包含图像、视频、音频或元数据的内容填充缓存。
将内容放入 MagickCache
让我们将一部电影的演员图像添加到我们新创建的缓存中
$ magick-cache put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg
请注意,图像标识符是一个由 项目/类型/资源路径 组成的 IRI。在此示例中,项目为 movies,类型为 image,资源路径为 mission-impossible/cast/rebecca-ferguson。该路径唯一地标识缓存资源。无法使用相同的资源路径存储两个不同的图像。而是使用类似 mission-impossible/cast/20210508-rebecca-ferguson-1 和 mission-impossible/cast/20210508-rebecca-ferguson-2 的内容。
现在,让我们设置资源密钥并将生存时间设置为 2 天。在第二天之后,图像将使用 expire 函数自动删除。要获取、过期或删除图像,您需要使用相同的资源密钥
$ magick-cache -passkey passkey.txt -ttl "2 days" put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg
其中 passkey.txt 包含您的资源密钥。请勿丢失您的密钥。没有它,您将无法获取、识别、过期或删除您拥有的资源。
资源密钥确保只有您和缓存所有者可以访问您的图像。为了防止缓存所有者查看其内容,请使用以下命令对其进行加密
$ magick-cache -passkey passkey.txt -passphrase passphrase.txt -ttl "2 days" put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg
请注意,Blob 和元数据以纯文本形式存储在缓存中。为了防止窥探,请在将内容存储到缓存中之前对其进行加密。
从 MagickCache 获取内容
最终您需要检索您的内容,让我们从缓存中获取原始演员图像
$ magick-cache -passkey passkey.txt get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
请注意,原始图像以 JPEG 格式放入缓存中。在这里,我们方便地将其转换为 PNG 格式,同时提取图像。
当检索图像时,-extract 选项非常有用。要提取图像的一部分,请指定图块宽度、高度和偏移量
$ magick-cache -passkey passkey.txt -extract 100x100+0+0 get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
要调整大小,请不要指定偏移量
$ magick-cache -passkey passkey.txt -extract 100x100 get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
如果您的图像已加密,请提供密码对其进行解密
$ magick-cache -passkey passkey.txt -passphrase passphrase.txt get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
从 MagickCache 删除内容
我们可以显式删除内容
$ magick-cache -passkey passkey.txt delete /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson
或者我们可以删除所有已过期的演员图像(超过了各自的生存时间),尝试此命令
$ magick-cache -passkey passkey.txt expire /opt/magick-cache movies/image/mission-impossible/cast
识别 MagickCache 内容
也许您想识别您拥有的所有内容
$ magick-cache -passkey passkey.txt identify /opt/magick-cache movies/image/mission-impossible/cast movies/image/mission-impossible/cast/rebecca-ferguson[1368x912] 406B 1:0:0:0 2021-05-30T17:41:42Z identified 1 resources
每个条目都包括 IRI、图像的图像尺寸、内容大小(以字节为单位)、生存时间、资源是否已过期(用 `*` 表示)以及创建时间。
其他人可以在您的内容旁边将内容存储在缓存中。但是,您无法访问他们的内容。您无法获取、识别、过期或删除您不拥有的内容,这由您的密钥决定。
MagickCache 所有者可以使用此命令获取、识别、过期或删除所有内容,包括您拥有的内容,例如
$ magick-cache -passkey passkey.txt identify /opt/magick-cache /
请注意,已过期的资源用星号注释。
MagickCache 不仅适用于图像
除了 image 类型外,您还可以将其原始形式的图像内容、视频或音频存储为 blob 内容类型,或将元数据存储为 meta 内容类型
$ magick-cache -passkey passkey.txt put /opt/magick-cache movies/blob/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.mp4
或
$ magick-cache -passkey passkey.txt put /opt/magick-cache movies/meta/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.txt
图像必须采用 ImageMagick 理解的格式。元数据必须是文本。Blob 可以是任何内容,包括图像、视频、音频或二进制文件。
删除 MagickCache
MagickCache 所有者可以完全删除缓存中的所有内容
$ magick-cache -passkey passkey.txt delete /opt/magick-cache /
请注意,执行此命令后,您的缓存内容将无法恢复。
安全
MagickCache 安全性不是加密强度的。相反,它为每个资源生成一个唯一的哈希值,确保无法发现资源 ID。只要可以提供各自的密钥,缓存的用户和缓存所有者都可以访问资源。对于具有足够权限访问 MagickCache 磁盘路径的任何人,也可以访问这些资源。