MagickCache menyediakan metode dan alat yang aman untuk menyimpan gambar, urutan gambar, video, audio, atau metadata ke dalam cache di sebuah direktori lokal. Semua konten dipetakan ke memori (memory-mapped) agar pengambilannya efisien. Efisiensi tambahan dapat dicapai dengan mengambil hanya sebagian dari gambar. Konten dapat bertahan secara permanen, atau Anda dapat menetapkan masa berlaku (time-to-live/TTL) agar konten otomatis kedaluwarsa saat TTL tersebut terlampaui. MagickCache mendukung konten yang praktis tak terbatas hingga miliaran gambar, sehingga cocok digunakan sebagai layanan gambar berbasis web.
MagickCache bekerja bersama ImageMagick. Unduh MagickCache lalu instal. Selanjutnya Anda akan membuat cache dan mengisinya dengan gambar, video, serta metadata terkait.
Membuat MagickCache
Anda memerlukan tempat untuk menyimpan dan mengambil konten Anda. Mari kita buat cache pada filesystem lokal kita:
$ magick-cache -passkey passkey.txt create /opt/magick-cache
Di sini passkey.txt berisi passkey cache Anda. Jangan sampai kehilangan passkey Anda. Tanpanya, Anda tidak akan dapat mengidentifikasi, membuat kedaluwarsa, atau menghapus konten dalam cache Anda.
Anda hanya perlu membuat MagickCache satu kali. Namun, Anda dapat membuat lebih dari satu MagickCache dengan path yang berbeda.
Setelah MagickCache dibuat, Anda akan mengisi cache tersebut dengan konten yang mencakup gambar, video, audio, atau metadata.
Memasukkan konten ke MagickCache
Mari kita tambahkan gambar pemeran film ke cache yang baru kita buat:
$ magick-cache put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg
Perhatikan, pengidentifikasi gambar tersebut adalah sebuah IRI yang terdiri dari project /type /resource-path. Pada contoh ini, project-nya adalah movies, type-nya adalah image, dan resource path-nya adalah mission-impossible/cast/rebecca-ferguson. Path ini secara unik mengidentifikasi sebuah resource cache. Dua gambar yang berbeda tidak dapat disimpan dengan resource path yang sama. Sebagai gantinya, gunakan sesuatu seperti mission-impossible/cast/20210508-rebecca-ferguson-1 dan mission-impossible/cast/20210508-rebecca-ferguson-2.
Sekarang, mari kita tetapkan resource passkey dan masa berlaku (time to live) menjadi 2 hari. Kapan pun setelah hari kedua, gambar tersebut akan otomatis dihapus melalui fungsi expire. Untuk mendapatkan, membuat kedaluwarsa, atau menghapus gambar tersebut, Anda perlu menggunakan resource passkey yang sama:
$ magick-cache -passkey passkey.txt -ttl "2 days" put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg
Di sini passkey.txt berisi resource passkey Anda. Jangan sampai kehilangan passkey Anda. Tanpanya, Anda tidak akan dapat mendapatkan, mengidentifikasi, membuat kedaluwarsa, atau menghapus resource milik Anda.
Resource passkey ini memastikan hanya Anda dan pemilik cache yang dapat mengakses gambar Anda. Untuk mencegah pemilik cache melihat isinya, acak kontennya dengan:
$ 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
Perhatikan, blob dan metadata disimpan di dalam cache sebagai plainteks. Untuk mencegah pengintaian, acak konten tersebut sebelum menyimpannya di cache.
Mengambil konten dari MagickCache
Pada akhirnya Anda akan ingin mengambil kembali konten Anda; mari kita ambil gambar pemeran asli dari cache:
$ magick-cache -passkey passkey.txt get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
Perhatikan bahwa gambar aslinya dimasukkan ke cache dalam format JPEG. Di sini kita dengan mudah mengonversinya ke format PNG saat mengekstrak gambar tersebut.
Opsi -extract berguna saat mengambil gambar. Untuk mengekstrak sebagian dari gambar, tentukan lebar, tinggi, dan offset dari tile:
$ magick-cache -passkey passkey.txt -extract 100x100+0+0 get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
Untuk mengubah ukuran (resize) sebagai gantinya, jangan tentukan offset-nya:
$ magick-cache -passkey passkey.txt -extract 100x100 get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
Jika gambar Anda diacak, berikan passphrase untuk membuka acakannya:
$ magick-cache -passkey passkey.txt -passphrase passphrase.txt get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
Menghapus konten dari MagickCache
Kita dapat menghapus konten secara eksplisit:
$ magick-cache -passkey passkey.txt delete /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson
atau kita dapat menghapus semua gambar pemeran yang telah kedaluwarsa (melebihi masa berlaku masing-masing); coba jalankan perintah berikut:
$ magick-cache -passkey passkey.txt expire /opt/magick-cache movies/image/mission-impossible/cast
Mengidentifikasi konten MagickCache
Barangkali Anda ingin mengidentifikasi seluruh konten yang Anda miliki:
$ 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
Setiap entri mencakup IRI, dimensi gambar untuk gambar, ukuran konten dalam byte, masa berlaku, apakah resource tersebut sudah kedaluwarsa (ditandai dengan *), dan tanggal pembuatan.
Orang lain dapat menyimpan konten di cache berdampingan dengan konten Anda. Namun, konten mereka tidak tersedia bagi Anda. Anda tidak dapat mendapatkan, mengidentifikasi, membuat kedaluwarsa, atau menghapus konten yang bukan milik Anda, sebagaimana ditentukan oleh secret passkey Anda.
Pemilik MagickCache dapat mendapatkan, mengidentifikasi, membuat kedaluwarsa, atau menghapus seluruh konten, termasuk konten milik Anda, dengan perintah berikut, misalnya:
$ magick-cache -passkey passkey.txt identify /opt/magick-cache /
Perhatikan, resource yang kedaluwarsa ditandai dengan tanda bintang.
MagickCache bukan hanya untuk gambar
Selain type image, Anda dapat menyimpan konten gambar dalam bentuk aslinya, video, atau audio sebagai content type blob, atau metadata dengan content type meta:
$ magick-cache -passkey passkey.txt put /opt/magick-cache movies/blob/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.mp4
atau
$ magick-cache -passkey passkey.txt put /opt/magick-cache movies/meta/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.txt
Gambar harus dalam format yang dipahami oleh ImageMagick. Metadata harus berupa teks. Blob dapat berupa konten apa pun, termasuk gambar, video, audio, atau file biner.
Menghapus MagickCache
Pemilik MagickCache dapat menghapus seluruh konten di dalam sebuah cache sepenuhnya:
$ magick-cache -passkey passkey.txt delete /opt/magick-cache /
Berhati-hatilah, setelah perintah ini, konten yang telah di-cache akan hilang secara tidak dapat dipulihkan.
Keamanan
Keamanan MagickCache secara kriptografis tidak kuat. Sebagai gantinya, sistem ini menghasilkan hash unik untuk setiap resource sehingga ID resource tidak dapat ditemukan. Resource dapat diakses baik oleh pengguna cache maupun pemilik cache, asalkan mereka dapat menunjukkan passkey masing-masing. Resource tersebut juga dapat diakses oleh siapa pun yang memiliki hak akses (privilege) yang cukup untuk mengakses path disk MagickCache.