Sebaiknya migrasikan workload Memorystore for Memcached ke Memorystore for Valkey. Memorystore for Memcached adalah datastore nilai kunci, tetapi Memorystore for Valkey adalah server struktur data yang memiliki lebih banyak fitur.
Memorystore for Valkey memberi Anda fungsi yang serupa dengan Memorystore for Memcached. Selain itu, Memorystore for Valkey memiliki manfaat berikut:
- Layanan ini menawarkan penyimpanan data dalam memori berperforma tinggi yang terkelola sepenuhnya untuk Valkey, sebuah project open source yang kompatibel dengan Redis.
- Layanan Valkey yang terkelola sepenuhnya untuk Google Cloud, yang mendukung instance dengan Mode Cluster Diaktifkan dan Mode Cluster Dinonaktifkan.
- Aplikasi Anda yang berjalan di Google Cloud dapat mencapai performa ekstrem dengan memanfaatkan layanan Valkey yang sangat skalabel, tersedia, dan aman tanpa beban untuk mengelola deployment Valkey yang rumit.
Fitur Memorystore for Valkey
Bermigrasi ke Memorystore for Valkey memberi Anda akses ke fitur yang tidak tersedia di Memorystore for Memcached. Fitur ini memberi Anda pengembangan, keandalan, dan performa aplikasi yang lebih baik.
Tabel berikut mencantumkan dan menjelaskan fitur yang tersedia di Memorystore for Valkey, serta menjelaskan keuntungan menggunakan fitur ini.
| Fitur | Deskripsi | Kelebihan |
|---|---|---|
| Beberapa database | Memorystore for Memcached adalah ruang kunci tunggal dan datar. Namun, secara default, mode Cluster Mode Disabled Memorystore for Valkey mendukung hingga 16 database untuk satu instance. Anda dapat mengonfigurasi lingkungan sehingga Anda dapat memiliki hingga 100 database untuk satu instance. | Memiliki beberapa database untuk sebuah instance mencegah titik tunggal kegagalan untuk instance tersebut, memungkinkan Anda mencadangkan atau memulihkan satu database tanpa memengaruhi ketersediaan atau konsistensi database lain, dan memungkinkan Anda menskalakan atau memigrasikan database secara lebih efisien. |
| Struktur data lengkap | Selain string, Memorystore for Valkey mendukung daftar, set, set yang diurutkan, hash, dan bitmap. Memorystore untuk Valkey juga mendukung filter Bloom, penelusuran vektor, dan JSON. | Anda dapat menggunakan Memorystore for Valkey untuk kasus penggunaan yang kompleks seperti papan peringkat, antrean tugas, dan caching objek, tanpa serialisasi aplikasi. Anda juga dapat menggunakan penelusuran vektor untuk melakukan kueri semantik dengan latensi sub-milidetik. |
| Transaksi | Anda dapat menggunakan perintah MULTI
dan EXEC
untuk menjalankan sekelompok perintah sebagai satu unit yang tidak dapat dibagi
secara atomik. |
Meskipun Anda dapat menggunakan kemampuan compare-and-swap (CAS) dari Memorystore for Memcached untuk penguncian optimis di tingkat kunci, Memorystore for Valkey memungkinkan Anda menjalankan sekelompok perintah secara atomik. |
| Pesan Pub/Sub | Dengan menggunakan Pub/Sub dengan Memorystore untuk Valkey, aplikasi klien Anda dapat berlangganan channel dan menerima pesan real-time. | Memorystore for Valkey memungkinkan Anda mengubah cache menjadi broker pesan ringan untuk update real-time dan komunikasi antar-layanan. |
| Skrip Lua | Anda dapat menggunakan Lua untuk
menjalankan logika aplikasi yang kompleks secara atomik di server Anda menggunakan
perintah EVAL.
|
Penggunaan skrip sisi server akan mengurangi perjalanan pulang pergi jaringan dan memastikan bahwa Memorystore untuk Valkey dapat melakukan operasi yang kompleks tanpa gangguan. Hal ini akan meningkatkan performa aplikasi Anda. |
| Dukungan ketersediaan tinggi, replikasi, dan shard | Arsitektur Memorystore for Valkey mendukung dan menyediakan ketersediaan tinggi (HA). Aplikasi klien Anda dapat mengakses node Memorystore for Valkey secara langsung dengan terhubung ke setiap endpoint (atau shard). | HA dan replikasi meningkatkan keandalan sistem Anda dan meminimalkan gangguan selama update penting. Penggunaan shard membantu Anda mendistribusikan beban traffic tinggi yang terkait dengan aplikasi klien secara efektif. |
| Persistensi | Memorystore for Valkey mendukung jenis persistensi berikut:
|
Dengan menggunakan persistensi AOF dan RDB, Anda dapat menyimpan data penting di Memorystore for Valkey secara tahan lama. Anda dapat memulihkan data Anda kapan saja. Memorystore for Valkey menangani mekanisme persistensi yang mendasarinya, sehingga tidak banyak persiapan yang diperlukan untuk menggunakan persistensi. |
Memigrasikan workload Anda
Untuk memigrasikan workload Memorystore for Memcached ke Memorystore for Valkey, Anda harus menyelesaikan tindakan berikut:
- Ubah library klien Anda: ubah library klien untuk aplikasi Anda dari library Memcached ke library Valkey.
- Ubah perintah Anda: ganti semua perintah untuk Memcached API untuk aplikasi klien Anda dengan perintah yang sesuai untuk Valkey API.
- Deploy dan verifikasi migrasi: siapkan migrasi dan konfirmasi bahwa Anda dapat menggunakannya untuk memigrasikan beban kerja ke Memorystore for Valkey.
Mengubah library klien
Di bagian ini, Anda akan mengubah library klien untuk aplikasi dari library Memcached ke library Valkey.
Tabel berikut mencantumkan contoh library klien Memcached untuk Python, Java, Go, dan Node.js, serta library yang sesuai untuk Valkey.
| Bahasa | Library klien Memcached | Library klien Valkey |
|---|---|---|
| Python | python-memcached, pymemcache | valkey-py |
| Java | spymemcached | Valkey GLIDE, valkey-java |
| Go | gomemcache | Valkey GLIDE, valkey-go |
| Node.js | memjs | Valkey GLIDE, ioredis |
Mengubah perintah Anda
Di bagian ini, Anda akan mengganti semua perintah untuk Memcached API bagi aplikasi klien dengan perintah yang sesuai untuk Valkey API.
Untuk mengubah perintah, Anda harus menyelesaikan tindakan berikut:
- Ubah penyiapan koneksi Anda: ubah koneksi aplikasi klien Anda dari server Memcached ke server Valkey.
- Ubah perintah: ganti semua perintah Memcached API dengan perintah yang sesuai untuk Valkey API.
Mengubah penyiapan koneksi
Di bagian ini, Anda akan mengubah koneksi aplikasi klien dari server Memcached ke server Valkey.
Temukan kode yang Anda gunakan untuk menghubungkan aplikasi klien ke server Memcached. Ini mungkin mirip dengan kode berikut:
import memcache; mc = memcache.Client(['MEMCACHED_IP_ADDRESS:11211'])
Ganti MEMCACHED_IP_ADDRESS dengan alamat IP instance Memorystore for Memcached Anda.
Ubah kode ini agar aplikasi klien Anda dapat terhubung ke server Valkey. Ini mungkin mirip dengan kode berikut:
import valkey; v = valkey.Valkey(host=VALKEY_IP_ADDRESS, port=6379, db=0)
Ganti VALKEY_IP_ADDRESS dengan alamat IP instance Memorystore for Valkey yang Anda buat saat Anda men-deploy dan memverifikasi migrasi.
Mengubah perintah
Di bagian ini, Anda mengganti semua perintah API Memcached untuk aplikasi klien dengan perintah yang sesuai untuk Valkey API.
DECR
Perintah DECR memungkinkan Anda mengurangi nilai yang disimpan pada kunci sebesar
jumlah tertentu.
Temukan kode yang Anda gunakan di Memcached untuk perintah
DECR. Hal ini mungkin mirip dengan kode berikut:mc.DECR('KEY_NAME', AMOUNT)Lakukan penggantian berikut:
- KEY_NAME: nama kunci.
- AMOUNT: nilai yang ingin Anda kurangi dari angka yang disimpan di kunci. Nilai ini harus berupa bilangan bulat.
Ubah kode ini agar Anda dapat menggunakannya dengan Valkey. Perubahan Anda mungkin serupa dengan kode berikut:
v.DECR('KEY_NAME', AMOUNT)
HAPUS
Perintah DELETE memungkinkan Anda menghapus kunci. Misalnya, Anda dapat menghapus pengguna.
Temukan kode yang Anda gunakan di Memcached untuk perintah
DELETE. Hal ini mungkin mirip dengan kode berikut:mc.DELETE('USERNAME')Ganti USERNAME dengan nama pengguna yang ingin Anda hapus.
Ubah kode ini agar Anda dapat menggunakannya dengan Valkey. Perubahan Anda mungkin serupa dengan kode berikut:
v.DELETE('USERNAME')
DAPATKAN
Perintah GET memungkinkan Anda mengambil nilai yang terkait dengan kunci. Misalnya, Anda dapat memperoleh informasi tentang pengguna.
Temukan kode yang Anda gunakan di Memcached untuk perintah
GET. Hal ini mungkin mirip dengan kode berikut:data = mc.GET('USERNAME')Ganti USERNAME dengan nama pengguna yang ingin Anda dapatkan informasinya.
Ubah kode ini agar Anda dapat menggunakannya dengan Valkey. Perubahan Anda mungkin serupa dengan kode berikut:
data = v.GET('USERNAME')
INCR
Perintah INCR memungkinkan Anda menaikkan nilai yang disimpan di kunci sebesar
jumlah tertentu.
Temukan kode yang Anda gunakan di Memcached untuk perintah
INCR. Hal ini mungkin mirip dengan kode berikut:mc.INCR('KEY_NAME', AMOUNT)Lakukan penggantian berikut:
- KEY_NAME: nama kunci.
- AMOUNT: nilai yang ingin Anda tambahkan ke angka yang disimpan di kunci. Nilai ini harus berupa bilangan bulat.
Ubah kode ini agar Anda dapat menggunakannya dengan Valkey. Perubahan Anda mungkin serupa dengan kode berikut:
v.INCR('KEY_NAME', AMOUNT)
MGET
Perintah MGET memungkinkan Anda mengambil nilai untuk beberapa kunci dalam satu perintah. Menggunakan MGET akan meningkatkan performa lingkungan Anda.
Temukan kode yang Anda gunakan di Memcached untuk perintah
MGET. Hal ini mungkin mirip dengan kode berikut:data_map = mc.get_multi(['KEY_NAME_1', 'KEY_NAME_2'])
Ganti KEY_NAME_1 dan KEY_NAME_2 dengan nama kunci yang ingin Anda ambil informasinya.
Ubah kode ini agar Anda dapat menggunakannya dengan Valkey. Perubahan Anda mungkin serupa dengan kode berikut:
data_list = v.MGET(['KEY_NAME_1', 'KEY_NAME_2'])
SET
Perintah SET memungkinkan Anda menentukan nilai untuk kunci. Misalnya, Anda dapat menetapkan
waktu habis masa berlaku untuk pengguna yang mengakses sistem (dalam detik).
Temukan kode yang Anda gunakan di Memcached untuk perintah
SET. Hal ini mungkin mirip dengan kode berikut:mc.SET('USERNAME', 'data', time=EXPIRATION_TIME)Lakukan penggantian berikut:
- USERNAME: nama pengguna yang mengakses sistem
- EXPIRATION_TIME: jumlah detik yang dimiliki pengguna hingga pengguna tidak dapat lagi mengakses sistem
Ubah kode ini agar Anda dapat menggunakannya dengan Valkey. Perubahan Anda mungkin serupa dengan kode berikut:
v.SET('USERNAME', 'data', ex=EXPIRATION_TIME)
Men-deploy dan memverifikasi migrasi
Di bagian ini, Anda akan menyiapkan migrasi dan mengonfirmasi bahwa Anda dapat menggunakannya untuk memigrasikan workload ke Memorystore untuk Valkey.
Untuk men-deploy dan memverifikasi migrasi, selesaikan langkah-langkah berikut:
- Buat instance Memorystore for Valkey: pastikan instance yang Anda buat memiliki ukuran yang sama dengan instance Memorystore for Memcached Anda. Selain itu, gunakan Cloud Monitoring untuk memantau penggunaan instance Memorystore for Valkey.
- Menulis ke kedua instance: untuk migrasi tanpa periode nonaktif, ubah aplikasi Anda untuk menulis ke kedua instance. Tindakan ini akan mengisi cache Valkey dan memungkinkan Anda mengukur tolok ukur metrik pemantauan utama.
- Hentikan traffic ke instance Memorystore for Memcached: ubah konfigurasi aplikasi Anda sehingga operasi baca mengarah ke alamat IP dan nomor port (6379) instance Memorystore for Valkey.
- Pantau aplikasi Anda: pantau tingkat error dan latensi aplikasi Anda.
- Hapus instance Memorystore for Memcached: hentikan penulisan ke instance Memorystore for Memcached, lalu hapus instance.
FAQ
Bagian ini berisi pertanyaan umum (FAQ) tentang memigrasikan workload Memorystore for Memcached ke Memorystore for Valkey.
Mengapa Anda bermigrasi ke Memorystore for Valkey?
Valkey adalah project open source berperforma tinggi yang di-fork dari codebase Redis. Memorystore for Valkey menyediakan layanan terkelola yang kompatibel dengan protokol Redis. Hal ini memastikan bahwa semua library dan perintah klien Redis yang ada berfungsi dengan lancar. Migrasi ke Memorystore for Valkey secara fungsional setara dengan migrasi ke server standar yang kompatibel dengan Redis.
Apakah Anda harus mengonfigurasi ulang aturan firewall jaringan?
Instance Memorystore for Memcached biasanya menggunakan port 11211, sedangkan instance Memorystore for Valkey menggunakan port 6379. Anda harus memastikan bahwa aturan firewall Virtual Private Cloud (VPC) Anda mengizinkan traffic keluar dari aplikasi Anda ke instance Memorystore for Valkey di port yang benar.
Bagaimana Valkey menangani serialisasi objek kompleks?
Karena Memcached tidak mengetahui struktur objek kompleks, seperti objek Python atau objek Java, Memcached memperlakukan semua objek sebagai blob buram.
Akibatnya, sebelum data apa pun masuk ke jaringan, serialisasi terjadi sepenuhnya di sisi aplikasi klien. Server hanya melihat array byte. Misalnya, untuk membaca satu properti seperti alamat email pengguna, Anda harus mengambil seluruh objek yang diserialisasi, mendeserialisasinya di aplikasi Anda, lalu membaca kolom yang terkait dengan properti tersebut.
Valkey dapat menyimpan blob dan memahami struktur objek kompleks. Anda juga dapat menggunakan Valkey untuk memperluas kolom objek ke dalam tabel hash Valkey. Anda dapat menggunakan tabel ini untuk mengambil nilai yang bertingkat dalam secara langsung.
Contoh berikut menggunakan tabel hash Valkey untuk mengambil alamat email pengguna:
# valkey-py
client.hset("user:101", mapping={
"name": "username",
"email": "username@example.com",
"login_count": 10
})
client.hget("user:101", "email") # -> b"username@example.com"
Apa perbedaan protokol komunikasi antara Memcached dan Valkey?
Memcached menggunakan protokol ASCII dan protokol biner opsional. Valkey menggunakan Redis Serialization Protocol (RESP).
Meskipun ini adalah protokol yang berbeda, library aplikasi klien Valkey modern menangani protokol RESP secara otomatis. Hal ini membuat perbedaan antara protokol transparan untuk kode aplikasi.
Setelah Anda bermigrasi ke Memorystore for Valkey, bagaimana cara memetakan kolom flags?
Memorystore for Memcached mendukung kolom flags. Kolom ini berisi bilangan bulat tidak bertanda 32-bit yang digunakan library aplikasi klien untuk menyimpan metadata tentang nilai yang disimpan.
Memorystore for Valkey tidak mendukung kolom ini. Untuk memetakan kolom flags
ke Memorystore untuk Valkey, selesaikan langkah-langkah berikut:
- Menserialkan tanda ke dalam nama kunci objek string.
- Lakukan serialisasi flag ke dalam nilai objek string.
- Gunakan objek hash dengan kolom yang ditetapkan untuk tanda.
Apakah Memorystore for Valkey menawarkan performa yang lebih baik?
Dalam sebagian besar skenario, performa lebih baik di Memorystore for Valkey. Hal ini disebabkan oleh struktur data canggih, koneksi persisten, dukungan pipelining, dan peningkatan efisiensi untuk operasi multi-kunci Valkey. Namun, Anda harus memodifikasi library klien dan perintah dengan benar.
Jika instance Memorystore for Memcached Anda menggunakan beberapa node, apa yang harus Anda lakukan di Memorystore for Valkey?
Saat Anda men-deploy dan memverifikasi migrasi, buat instance dengan Mode Cluster Diaktifkan di Memorystore for Valkey. Instance ini menangani sharding dan ketersediaan tinggi secara internal, dan muncul sebagai endpoint tunggal untuk aplikasi Anda. Hal ini menyederhanakan logika sisi klien aplikasi Anda.
Jika instance Memorystore for Memcached Anda menggunakan beberapa node, jenis node mana yang kami rekomendasikan untuk instance Memorystore for Valkey Anda?
Untuk setiap instance Memorystore for Memcached, guna menentukan ukuran nodenya, periksa nilai yang terkait dengan properti Memory per node. Kemudian, untuk menentukan jenis node untuk instance Memorystore for Valkey yang sesuai, gunakan tabel berikut:
| Ukuran node Memorystore for Memcached | Jenis node Memorystore for Valkey | Total kapasitas node | Jumlah vCPU |
|---|---|---|---|
| < 1 GB | shared-core-nano | 1,4 GB | 0,5 (Bersama) |
| 1 GB – 5 GB | standard-small | 6,5 GB | 2 |
| 6 GB – 12 GB | highmem-medium | 13,0 GB | 2 |
| 13 GB – 50 GB | highmem-xlarge | 58,0 GB | 8 |
Jenis node shared-core-nano ditujukan untuk workload kecil. Jenis node ini memberikan performa yang bervariasi dan tidak memiliki SLA, sehingga tidak cocok untuk beban kerja produksi.
Makin banyak CPU virtual (vCPU) yang Anda pilih untuk instance Memorystore for Valkey, makin baik performanya. Jika instance Anda menjalankan workload yang intensif resource, pilih jenis node dengan vCPU yang lebih tinggi (misalnya, highmem-xlarge). Jika instance Anda menjalankan tugas yang kurang menuntut, pilih jenis node dengan vCPU yang lebih rendah (misalnya, highmem-medium).