Menggunakan Memcache

Halaman ini menjelaskan cara mengonfigurasi dan memantau layanan memcache untuk aplikasi Anda menggunakan konsol Google Cloud. Panduan ini juga menjelaskan cara menggunakan App Engine memcache Python API untuk menetapkan dan mengambil nilai yang disimpan dalam cache, serta menggunakan fitur bandingkan dan tetapkan untuk menangani permintaan tulis serentak ke kunci memcache yang sama. Untuk mempelajari memcache lebih lanjut, baca Ringkasan Memcache.

Mengonfigurasi memcache

  1. Buka halaman Memcache di konsol Google Cloud.
    Buka halaman Memcache
  2. Pilih tingkat layanan memcache yang ingin Anda gunakan:

    • Bersama (default) - gratis dan menyediakan kapasitas cache berdasarkan upaya terbaik.
    • Khusus - ditagih berdasarkan GB-jam ukuran cache dan menyediakan kapasitas cache tetap yang ditetapkan secara eksklusif untuk aplikasi Anda.

    Pelajari lebih lanjut kelas layanan yang tersedia di Ringkasan Memcache.

Menyimpan nilai ke cache dan mengambil nilai

Menyimpan nilai ke cache

Gunakan add() untuk menambahkan nilai kunci jika dan hanya jika nilai tersebut belum ada, dengan waktu habis masa berlaku opsional:

memcache.add(key="[KEY]", value="[VALUE]", time=[EXPIRATION_TIME])

Misalnya, untuk menambahkan nilai raining ke kunci weather_USA_98105 dengan waktu habis masa berlaku satu jam sejak nilai ditulis:

memcache.add(key="weather_USA_98105", value="raining", time=3600)

Pelajari lebih lanjut tentang add() dan metode lainnya untuk menetapkan nilai lebih lanjut dalam dokumentasi Python API memcache.

Lihat contoh lain untuk nilai dalam cache di Contoh Memcache.

Mencari nilai yang disimpan di cache

Gunakan get() untuk mencari nilai satu kunci:

memcache.get(key="[KEY]")

Misalnya, untuk mendapatkan nilai kunci weather_USA_98105:

memcache.get(key="weather_USA_98105")

Pelajari lebih lanjut get() dan metode lainnya untuk mencari nilai dalam dokumentasi memcache Python API.

Memantau memcache di konsol Google Cloud

  1. Buka halaman Memcache di konsol Google Cloud.
    Buka halaman Memcache
  2. Lihat laporan berikut:
    • Tingkat layanan Memcache: Menunjukkan apakah aplikasi Anda menggunakan tingkat layanan Bersama atau Khusus. Jika Anda adalah pemilik project, Anda dapat beralih di antara keduanya. Pelajari tingkat layanan lebih lanjut.
    • Rasio hit: Menampilkan persentase permintaan data yang disajikan dari cache, serta jumlah mentah permintaan data yang disajikan dari cache.
    • Item dalam cache.
    • Usia item terlama: Usia item terlama yang disimpan di cache. Perhatikan bahwa usia item akan di-reset setiap kali item digunakan, baik dibaca maupun ditulis.
    • Total ukuran cache.
  3. Anda dapat melakukan salah satu tindakan berikut:

    • Kunci baru: Menambahkan kunci baru ke cache.
    • Temukan kunci: Mengambil kunci yang ada.
    • Kosongkan cache: Menghapus semua key-value pair dari cache.
  4. (Hanya untuk memcache khusus) Lihat daftar Hotkey.

    • "Hotkey" adalah kunci yang menerima lebih dari 100 kueri per detik (QPS) di memcache.
    • Daftar ini berisi maksimal 100 hotkey, yang diurutkan berdasarkan QPS tertinggi.

Menangani penulisan serentak

Untuk menggunakan fitur bandingkan dan atur guna menangani penulisan dari beberapa permintaan ke kunci memcache yang sama:

  1. Buat instance objek Client memcache.
  2. Gunakan loop percobaan ulang (sebaiknya dengan batasan jumlah percobaan ulang dan penggunaan backoff eksponensial)
    1. Dalam loop percobaan ulang, dapatkan kunci menggunakan gets() atau get_multi() dengan parameter for_cas yang disetel ke True.
    2. Dalam loop percobaan ulang, perbarui nilai kunci menggunakan cas() atau cas_multi().

Cuplikan berikut menunjukkan satu cara untuk menggunakan fitur bandingkan dan atur:

def bump_counter(key):
   client = memcache.Client()
   while True: # Retry loop
     counter = client.gets(key)
     if counter is None: raise KeyError('Uninitialized counter')
     if client.cas(key, counter+1):
        break

Loop percobaan ulang diperlukan karena tanpa loop, kode ini tidak benar-benar menghindari kondisi race, tetapi hanya mendeteksinya! Layanan memcache menjamin bahwa saat digunakan dalam pola yang ditampilkan di sini (yaitu, menggunakan gets() dan cas()), jika dua (atau lebih) instance klien yang berbeda kebetulan terlibat dalam kondisi race, hanya instance pertama yang menjalankan operasi cas() yang berhasil (menampilkan True), sedangkan instance kedua (dan yang berikutnya) gagal (menampilkan False).

Penajaman lainnya yang harus Anda tambahkan ke kode contoh ini adalah dengan menetapkan batasan jumlah percobaan ulang, guna menghindari loop tak terbatas dalam skenario terburuk saat ada banyak pertentangan untuk penghitung yang sama. Contoh kapan pertentangan tersebut dapat terjadi adalah jika ada lebih banyak permintaan yang mencoba memperbarui penghitung daripada yang dapat diproses oleh layanan memcache secara real time.

Pelajari lebih lanjut tentang cara membandingkan dan mengatur di Ringkasan Memcache.

Langkah selanjutnya