Memcached vs Redis

1. Gambaran keseluruhan

Dalam artikel ini, kita akan mengkaji persamaan dan perbezaan dua pangkalan data dalam memori yang popular, Memcached dan Redis.

2. Memcached dan Redis

Selalunya, kami berfikir tentang cache untuk meningkatkan prestasi semasa memproses sejumlah besar data.

Memcached adalah sistem cache memori yang diedarkan yang direka untuk kemudahan penggunaan dan kesederhanaan dan sangat sesuai sebagai cache atau sesi penyimpanan .

Redis adalah gedung struktur data dalam memori yang menawarkan pelbagai ciri. Ia berguna sebagai cache, pangkalan data, broker mesej, dan antrian .

3. Pemasangan

3.1. Memasang Memcached

Kita boleh memasang pelayan Memcached terbaru dengan memuat turun pakej dan menjalankan membuat :

$ 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. Memasang Redis

Begitu juga, kita boleh memasang pelayan 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-Milisaat

Memcached dan Redis menawarkan masa tindak balas sub-milisaat dengan menyimpan data dalam ingatan.

4.2. Pembahagian Data

Begitu juga, kedua-dua pangkalan data dalam memori membolehkan menyebarkan data di beberapa nod.

4.3. Sokongan Bahasa Pengaturcaraan

Begitu juga, kedua-duanya menyokong semua bahasa pengaturcaraan utama termasuk Java, Python, JavaScript, C, dan Ruby.

Selain itu, terdapat beberapa klien Java yang tersedia untuk kedua-dua pangkalan data dalam memori. Sebagai contoh, pelanggan Xmemcached dan Memcached-java tersedia untuk Memcached, sementara Jedis, Lettuce, dan Redisson tersedia untuk Redis.

4.4. Pembersihan Cache

Memcached membolehkan membersihkan cache menggunakan perintah flush_all . Begitu juga, Redis membolehkan kita menghapus segala-galanya dari cache dengan menggunakan perintah seperti FLUSHDB dan FLUSHALL .

4.5. Penskalaan

Kedua-dua penyelesaian caching menawarkan skalabilitas tinggi untuk menangani data besar apabila permintaan meningkat secara eksponensial.

5. Perbezaan

5.1. Garis Perintah

Memcached membolehkan kita menjalankan perintah dengan menyambung ke pelayan 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 // ...

Berbeza dengan Memcached, Redis hadir dengan antara muka baris perintah khusus, redis-cli , yang memungkinkan kita untuk melaksanakan 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 melaksanakan COMMAND untuk menyenaraikan semua arahan yang diberikan oleh Redis.

5.2. Pembuangan I / O Disk

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

Walau bagaimanapun, Redis menyediakan mekanisme lalai yang sangat dapat dikonfigurasi seperti RDB (fail pangkalan data Redis) atau AOF (fail Lampirkan sahaja) untuk pembuangan cakera. Ini boleh berguna untuk pengarkiban dan pemulihan.

Dengan menggunakan redis-cli, kita dapat menjalankan perintah SIMPAN segerak untuk mengambil gambar data dalam memori:

$ redis-cli SAVE OK

Di sini, arahan menyimpan gambar dalam fail binari dump.rdb dan mengembalikan status OK apabila selesai.

Walau bagaimanapun, pelaksanaan BGSAVE asinkron memulakan proses latar belakang mengambil gambar:

$ redis-cli BGSAVE OK

Selain itu, kita boleh menggunakan arahan LASTSAVE untuk memeriksa masa Unix dari snapshot DB terakhir yang berjaya.

$ redis-cli LASTSAVE (integer) 1410853592

5.3. Struktur Data

Memcached menyimpan nilai kunci pasangan sebagai Rentetan dan mempunyai had ukuran 1MB setiap nilai. Namun, Redis juga menyokong struktur data lain seperti senarai, set, dan hash, dan dapat menyimpan nilai sehingga 512MB .

5.4. Replikasi

Memcached menyokong replikasi dengan garpu pihak ketiga seperti repcached.

Tidak seperti Memcached, Redis memberi kita fungsi untuk memperbanyak kelompok dengan mereplikasi storan utama untuk skalabiliti yang lebih baik dan ketersediaan tinggi.

Pertama, kita boleh menggunakan perintah REPLICAOF untuk membuat replika pelayan induk Redis. Seterusnya, kami melaksanakan perintah PSYNC pada replika untuk memulakan replikasi dari master.

5.5. Urus Niaga

Memcached tidak menyokong transaksi, walaupun 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

Dalam artikel ini, kami meneroka Memcached dan Redis. Pertama, kami melihat persamaan kedua-dua pangkalan data dalam memori. Kemudian, kami melihat perbezaan ciri yang disediakan oleh kedua-dua penyelesaian caching tersebut.

Terdapat banyak penyelesaian cache dalam memori yang ada. Oleh itu, kita harus mempertimbangkan ciri-ciri mesin caching dan memadankannya dengan kes penggunaan kita.

Kita pasti dapat menyimpulkan bahawa Memcached adalah pilihan yang tepat untuk menyelesaikan masalah caching sederhana. Walau bagaimanapun, secara umum, Redis mengatasi Memcached dengan menawarkan fungsi yang lebih kaya dan pelbagai ciri yang menjanjikan untuk kes penggunaan yang kompleks.