Memcached vs Redis

1. Ikhtisar

Pada artikel ini, kita akan memeriksa persamaan dan perbedaan dari dua database dalam memori yang populer, Memcached dan Redis.

2. Memcached dan Redis

Seringkali, kami memikirkan tentang penyimpanan ke cache untuk meningkatkan kinerja sambil memproses data dalam jumlah besar.

Memcached adalah sistem cache memori terdistribusi yang dirancang untuk kemudahan penggunaan dan kesederhanaan dan cocok sebagai cache atau penyimpanan sesi .

Redis adalah penyimpanan struktur data dalam memori yang menawarkan serangkaian fitur yang kaya. Ini berguna sebagai cache, database, perantara pesan, dan antrian .

3. Instalasi

3.1. Menginstal Memcached

Kita dapat menginstal server Memcached terbaru dengan mengunduh paket dan menjalankan make :

$ wget //memcached.org/latest $ tar -zxvf memcached-1.6.3.tar.gz $ cd memcached-1.6.3 $ ./configure && make && make test && sudo make install

3.2. Menginstal Redis

Demikian pula, kita dapat menginstal server Redis terbaru:

$ wget //download.redis.io/releases/redis-5.0.8.tar.gz $ tar xzf redis-5.0.8.tar.gz $ cd redis-5.0.8 $ make

4. Persamaan

4.1. Latensi Sub-Milidetik

Baik Memcached dan Redis menawarkan waktu respons sub-milidetik dengan menyimpan data di memori.

4.2. Partisi Data

Demikian pula, kedua database dalam memori memungkinkan pendistribusian data ke banyak node.

4.3. Dukungan Bahasa Pemrograman

Demikian juga, keduanya mendukung semua bahasa pemrograman utama termasuk Java, Python, JavaScript, C, dan Ruby.

Selain itu, ada beberapa klien Java yang tersedia untuk kedua database dalam memori. Misalnya, Xmemcached dan Memcached-java-client tersedia untuk Memcached, sementara Jedis, Lettuce, dan Redisson tersedia untuk Redis.

4.4. Menghapus Cache

Memcached memungkinkan membersihkan cache menggunakan perintah flush_all . Demikian pula, Redis memungkinkan kita untuk menghapus semuanya dari cache dengan menggunakan perintah seperti FLUSHDB dan FLUSHALL .

4.5. Penskalaan

Kedua solusi caching menawarkan skalabilitas tinggi untuk menangani data besar ketika permintaan tumbuh secara eksponensial.

5. Perbedaan

5.1. Garis komando

Memcached memungkinkan kita menjalankan perintah dengan menghubungkan ke server menggunakan telnet:

$ telnet 10.2.3.4 5678 Trying 10.2.3.4... Connected to 10.2.3.4. 
$ stats STAT pid 14868 STAT uptime 175931 STAT time 1220540125 // ...

Berbeda dengan Memcached, Redis hadir dengan antarmuka baris perintah khusus, redis-cli , memungkinkan kita untuk menjalankan perintah:

$ redis-cli COMMAND 1) 1) "save" 2) (integer) 1 3) 1) "admin" 2) "noscript" // ... 2) 1) "multi" 2) (integer) 1 3) 1) "noscript" 2) "fast" // ... 3) 1) "geodist" 2) (integer) -4 3) 1) "readonly" // ... // ...

Di sini, kami telah menjalankan COMMAND untuk mencantumkan semua perintah yang disediakan oleh Redis.

5.2. Disk I / O Dumping

Memcached menangani pembuangan disk hanya dengan alat pihak ketiga seperti alat libmemcached atau garpu seperti memcached-dd.

Namun, Redis menyediakan mekanisme default yang sangat dapat dikonfigurasi seperti RDB (file database Redis) atau AOF (file Append-only) untuk disk dumping. Ini dapat berguna untuk pengarsipan dan pemulihan.

Dengan menggunakan redis-cli, kita dapat menjalankan perintah SAVE sinkron untuk mengambil snapshot dari data dalam memori:

$ redis-cli SAVE OK

Di sini, perintah menyimpan snapshot dalam file biner dump.rdb dan mengembalikan status OK setelah selesai.

Namun, eksekusi BGSAVE asinkron memulai proses latar belakang pengambilan snapshot:

$ redis-cli BGSAVE OK

Selain itu, kita dapat menggunakan perintah LASTSAVE untuk memeriksa waktu Unix dari snapshot DB terakhir yang berhasil.

$ redis-cli LASTSAVE (integer) 1410853592

5.3. Struktur data

Memcached menyimpan pasangan nilai kunci sebagai String dan memiliki batas ukuran 1MB per nilai. Namun, Redis juga mendukung struktur data lain seperti list, set, dan hash, dan dapat menyimpan nilai hingga ukuran 512MB .

5.4. Replikasi

Memcached mendukung replikasi dengan garpu pihak ketiga seperti dicabut.

Tidak seperti Memcached, Redis memberi kami fungsionalitas untuk menggandakan klaster dengan mereplikasi penyimpanan utama untuk skalabilitas yang lebih baik dan ketersediaan tinggi.

Pertama, kita dapat menggunakan perintah REPLICAOF untuk membuat replika server master Redis. Selanjutnya, kami menjalankan perintah PSYNC pada replika untuk memulai replikasi dari master.

5.5. Transaksi

Memcached tidak mendukung transaksi, meskipun operasinya bersifat atom.

Redis provides out-of-the-box support for transactions to execute commands.

We can start the transaction using the MULTI command. Then, we can use the EXEC command for the execution of the following subsequent commands. Finally, Redis provides the WATCH command for the conditional execution of the transaction.

5.6. Publish and Subscribe Messaging

Memcached doesn't support publish/subscribe messaging out-of-the-box.

Redis, on the other hand, provides functionality to publish and subscribe to messages using pub/sub message queues.

This can be useful when designing applications that require real-time communication like chat rooms, social media feeds, and server intercommunication.

Redis comes with dedicated commands like PUBLISH,SUBSCRIBE, and UNSUBSCRIBE to publish a message to the channel, subscribe, and unsubscribe the client to the specified channels, respectively.

5.7. Geospatial Support

Geospatial support is useful for implementing location-based features for our applications. Unlike Memcached, Redis comes with special commands to manage real-time geospatial data.

For instance, the GEODIST command calculates the distance between two geospatial entries. Likewise, the GEORADIUS command returns all the entries within the radius provided.

Additionally, we can use Spring Data Redis to enable Redis geospatial support in a Java application.

5.8. Architecture

Redis uses a single core and shows better performance than Memcached in storing small datasets when measured in terms of cores.

Memcached implements a multi-threaded architecture by utilizing multiple cores. Therefore, for storing larger datasets, Memcached can perform better than Redis.

Another benefit of Memcached's multi-threaded architecture is its high scalability, achieved by utilizing multiple computational resources.

Redis can scale horizontally via clustering, which is comparatively more complex to set up and operate. Also, we can use Jedis or Lettuce to enable a Redis cluster using a Java application.

5.9. LUA Scripting

In contrast to Memcached, we can execute LUA scripts against Redis. It provides commands like EVAL and SCRIPT LOAD, useful for the execution of the LUA scripts.

For instance, we can execute the EVAL command to evaluate the script:

$ redis-cli eval "return redis.call('set',KEYS[1],'baeldung')" 1 website OK

Here, we've set the key website to the value baeldung by evaluating a script.

5.10. Memory Usage

Memcached has a higher memory utilization rate than Redis when comparing the String data structure.

In spite of that, when Redis uses the hash structure, it provides a higher memory utilization rate than Memcached.

6. Conclusion

Pada artikel ini, kami menjelajahi Memcached dan Redis. Pertama, kami melihat kesamaan dari kedua database dalam memori. Kemudian, kami melihat perbedaan fitur yang disediakan oleh kedua solusi caching.

Ada banyak solusi cache dalam memori yang tersedia. Oleh karena itu, kita harus mempertimbangkan fitur mesin caching dan mencocokkannya dengan kasus penggunaan kita.

Kami pasti dapat menyimpulkan bahwa Memcache adalah pilihan yang tepat untuk memecahkan masalah cache sederhana. Namun, secara umum, Redis mengungguli Memcache dengan menawarkan fungsionalitas yang lebih kaya dan berbagai fitur yang menjanjikan untuk kasus penggunaan yang kompleks.