MagickCache(图像缓存)
MagickCache 提供了安全的方法和工具,可将图像、图像序列、视频、音频或元数据缓存到本地文件夹中。所有内容都会通过内存映射来实现高效检索。通过仅检索图像的一部分,还能获得额外的效率提升。内容可以持久保存,你也可以为其分配生存时间(TTL),在超过 TTL 后自动让内容过期。MagickCache 支持几乎无限量的内容,可达数十亿张图像,适合用作 Web 图像服务。
MagickCache 与 ImageMagick 协同工作。下载 MagickCache 并安装。接下来你需要创建缓存,并向其中填充图像、视频以及相关的元数据。
创建 MagickCache
你需要一个存储和检索内容的位置。让我们在本地文件系统上创建一个缓存:
$ magick-cache -passkey passkey.txt create /opt/magick-cache
其中 passkey.txt 包含你的缓存通行密钥(passkey)。不要丢失你的通行密钥。没有它,你将无法识别、过期或删除缓存中的内容。
你只需创建一次 MagickCache。不过,你可以使用不同的路径创建多个 MagickCache。
创建 MagickCache 之后,你需要向缓存中填充内容,包括图像、视频、音频或元数据。
向 MagickCache 中放入内容
让我们向新创建的缓存中添加一张电影演员阵容图像:
$ magick-cache put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg
注意,图像标识符是由 project /type /resource-path 组成的 IRI。在本例中,project 是 movies,type 是 image,resource path 是 mission-impossible/cast/rebecca-ferguson。该路径唯一地标识一个缓存资源。两张不同的图像不能使用相同的 resource path 存储。请改用类似 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 选项在检索图像时很有用。要提取图像的一部分,请指定瓦片(tile)的宽度、高度和偏移量:
$ 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
如果你的图像被打乱了,请提供口令(passphrase)以将其还原:
$ 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 磁盘路径的任何人也可以访问这些资源。