Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Caching objek JSON di sisi server

Anda bisa menggunakan memcached, tetapi sekali lagi semua orang akan memukul server database Anda. Dalam kasus Anda, Anda mengatakan bahwa hasil kueri agak persisten jadi mungkin lebih masuk akal untuk men-cache respons JSON dari Layanan Web Anda.

Ini dapat dilakukan dengan menggunakan Proxy Terbalik dengan cache bawaan. Saya kira sebuah contoh mungkin paling membantu Anda bagaimana kami melakukannya dengan Jetty (Java) dan NGINX:

Dalam pengaturan kami, kami memiliki instans Jetty (Java) yang melayani API untuk klien seluler kami. API mendengarkan di localhost:8080/api dan mengembalikan hasil JSON yang diambil dari beberapa kueri di database MySQL lokal.

Pada titik ini, kami dapat menyajikan API langsung ke klien kami, tetapi inilah Proxy Terbalik:

Di depan API terdapat server web NGINX yang mendengarkan dari 0.0.0.0:80/ (di mana saja, port 80) Ketika klien seluler terhubung ke 0.0.0.0:80/api, Proxy Terbalik bawaan mencoba mengambil string kueri yang tepat dari itu tembolok. Jika gagal, ia mengambilnya dari localhost:8080/api, memasukkannya ke dalam cache-nya dan menyajikan nilai baru yang ditemukan dalam cache.

Manfaat:

  • Anda dapat menggunakan pernak-pernik NGINX lainnya:kompresi GZIP otomatis dari file JSON yang di-cache
  • Penghentian titik akhir SSL di NGINX.
  • Pekerja NGINX mungkin menguntungkan Anda, saat Anda memiliki lebih banyak koneksi, semua meminta data dari cache.
  • Anda dapat menggabungkan titik akhir layanan

Pikirkan tentang pembatalan cache:

Anda harus memikirkan tentang validasi cache. Anda dapat memberi tahu NGINX untuk menahan cache-nya, katakanlah, selama seminggu untuk semua permintaan HTTP 200 untuk localhost:8080/api, atau 1 menit untuk semua kode status HTTP lainnya. Tetapi jika tiba saatnya, di mana Anda ingin memperbarui API dalam waktu kurang dari seminggu, cache tidak valid, jadi Anda harus menghapusnya entah bagaimana atau mengecilkan waktu caching menjadi satu jam atau hari (sehingga kebanyakan orang akan menekan cache).

Inilah yang kami lakukan:Kami memilih untuk menghapus cache, ketika itu kotor. Kami memiliki JOB lain yang berjalan di Server yang mendengarkan acara Update-API dipicu melalui Wayang. JOB akan menangani pembersihan cache NGINX untuk kami.

Ide lain adalah menambahkan fungsi kliring cache di dalam Layanan Web Anda. Alasan kami memutuskan untuk tidak menggunakan solusi ini adalah:Layanan Web harus mengetahui bahwa itu berjalan di belakang proxy terbalik, yang memecah pemisahan masalah. Tapi saya akan mengatakan, itu tergantung pada apa yang Anda rencanakan.

Hal lain, yang akan membuat Layanan Web Anda lebih benar akan melayani header ETAG dan cache-expires yang benar dengan setiap file JSON. Sekali lagi, kami tidak melakukannya, karena kami memiliki satu Acara Pembaruan besar, bukan yang kecil untuk setiap file.

Catatan samping:

  • Anda tidak harus menggunakan NGINX, tetapi konfigurasinya sangat mudah
  • NGINX dan Apache memiliki dukungan SSL
  • Ada juga Reverse Proxy yang terkenal (https://www.varnish-cache.org), tetapi setahu saya itu tidak melakukan SSL (belum?)

Jadi, jika Anda menggunakan Varnish di depan Web Service + SSL Anda, Anda akan menggunakan konfigurasi seperti:NGINX -> Varnish -> Web Service.

Referensi:- Server NGINX:http://nginx.com- Varnish Reverse Proxy:https://www.varnish-cache.org- Otomasi IT Wayang:https://puppetlabs.com- Tutorial proxy terbalik NGINX:http:/ /www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy/ http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Saya mendapatkan kesalahan Kelas 'Predis\Client' tidak ditemukan di Laravel 5.2

  2. menyebarkan redis ke heroku tidak dapat terhubung

  3. Saya menerima pesan duplikat di aplikasi node.js/socket.io/redis pub/sub saya yang berkerumun

  4. Python &Redis:Praktik terbaik aplikasi Manajer/Pekerja

  5. delay_jobs vs resque vs pohon kacang?