Redis 6: Database berkecepatan tinggi, cache, dan broker pesan

Seperti kebanyakan orang, Anda mungkin menganggap Redis hanya sebagai cache. Sudut pandang itu sudah ketinggalan zaman.

Pada dasarnya, Redis adalah penyimpanan struktur data dalam memori NoSQL yang dapat bertahan di disk. Ini dapat berfungsi sebagai database, cache, dan perantara pesan. Redis memiliki replikasi bawaan, pembuatan skrip Lua, penggusuran LRU, transaksi, dan berbagai tingkat persistensi pada disk. Ini menyediakan ketersediaan tinggi melalui Redis Sentinel dan partisi otomatis dengan Redis Cluster.

Model data inti Redis adalah nilai kunci, tetapi berbagai jenis nilai didukung: String, Daftar, Kumpulan, Kumpulan yang Diurutkan, Hash, Aliran, HyperLogLogs, dan Bitmap. Redis juga mendukung indeks geospasial dengan kueri dan aliran radius.

[Juga pada: Bagaimana Redis tergores dan gatal - dan mengubah database selamanya]

Untuk open source Redis, Redis Enterprise menambahkan fitur untuk kecepatan tambahan, keandalan, dan fleksibilitas, serta database cloud sebagai layanan. Redis Enterprise menskalakan secara linier ke ratusan juta operasi per detik, memiliki distribusi global aktif-aktif dengan latensi lokal, menawarkan Redis on Flash untuk mendukung kumpulan data besar dengan biaya infrastruktur database berbasis disk, dan menyediakan 99,999% waktu operasional berdasarkan bawaan -dalam daya tahan dan failover satu digit-detik.

Lebih lanjut, Redis Enterprise memperluas fungsionalitas inti Redis untuk mendukung metode pemodelan data apa pun dengan modul seperti RediSearch, RedisGraph, RedisJSON, RedisTimeSeries, dan RedisAI, dan memungkinkan operasi dijalankan di seluruh dan di antara modul dan inti. Semua ini disediakan sambil menjaga latensi database di bawah satu milidetik.

Fitur dan kasus penggunaan Core Redis

Apa artinya Redis sekarang dapat berfungsi sebagai database, cache, dan perantara pesan? Dan apa kasus penggunaan yang didukung peran tersebut?

Cache adalah fungsi klasik Redis. Pada dasarnya, Redis berada di depan database berbasis disk dan menyimpan kueri dan hasil; aplikasi memeriksa cache Redis untuk hasil yang disimpan terlebih dahulu, dan menanyakan database berbasis disk untuk hasil yang saat ini tidak ada dalam cache. Mengingat tingkat respons Redis di bawah milidetik, ini biasanya merupakan kemenangan besar untuk kinerja aplikasi. Pengatur waktu kedaluwarsa dan pengusiran LRU (paling tidak baru-baru ini digunakan) dari cache Redis membantu menjaga cache tetap terkini dan menggunakan memori secara efektif.

The toko sesi adalah bagian penting dari aplikasi web modern. Ini adalah tempat yang nyaman untuk menyimpan informasi tentang pengguna dan interaksinya dengan aplikasi. Dalam arsitektur web farm, menghosting penyimpanan sesi secara langsung di server web mengharuskan pengguna "tetap" ke server back-end yang sama untuk permintaan di masa mendatang, yang dapat membatasi penyeimbang beban. Menggunakan database berbasis disk untuk penyimpanan sesi menghilangkan kebutuhan untuk mengikat sesi ke satu server web, tetapi memperkenalkan sumber latensi tambahan. Menggunakan Redis (atau database dalam memori cepat lainnya) sebagai penyimpanan sesi sering kali menghasilkan arsitektur aplikasi web dengan latensi rendah dan throughput tinggi.

Redis dapat berfungsi sebagai perantara pesan menggunakan tiga mekanisme berbeda, dan salah satu kasus penggunaan penting Redis sebagai perantara pesan adalah bertindak sebagai perekat antar layanan mikro. Redis memiliki mekanisme pemberitahuan publikasi / langganan overhead rendah yang memfasilitasi pesan api-dan-lupakan, tetapi tidak dapat berfungsi ketika layanan tujuan tidak mendengarkan. Untuk antrean pesan seperti Kafka yang lebih persisten, Redis menggunakan aliran, yang merupakan pasangan nilai kunci yang diurutkan dengan stempel waktu dalam satu kunci. Redis juga mendukung daftar elemen yang ditautkan ganda yang disimpan pada satu kunci, yang berguna sebagai antrian pertama masuk / keluar pertama (FIFO). Layanan mikro dapat, dan sering melakukannya, menggunakan Redis sebagai cache serta menggunakannya sebagai perantara pesan, meskipun cache harus dijalankan dalam contoh Redis yang terpisah dari antrean pesan.

Replikasi dasar memungkinkan Redis melakukan penskalaan tanpa menggunakan teknologi cluster versi Redis Enterprise. Replikasi Redis menggunakan model pemimpin-pengikut (juga disebut master-slave), yang secara default tidak sinkron. Klien dapat memaksa replikasi sinkronis menggunakan perintah WAIT, tetapi itu pun tidak membuat Redis konsisten di seluruh replika.

Redis memiliki skrip Lua sisi server, memungkinkan pemrogram untuk memperluas database tanpa menulis modul C atau kode sisi klien. Transaksi Redis Dasar memungkinkan klien untuk mendeklarasikan urutan perintah sebagai unit yang tidak dapat diinterupsi, menggunakan perintah MULTI dan EXEC untuk menentukan dan menjalankan urutan. Ini tidak sama dengan transaksi relasional dengan rollback.

Redis memiliki berbagai tingkat persistensi pada disk yang dapat dipilih pengguna. Persistensi RDB (file database Redis) mengambil snapshot database pada interval tertentu. Persistensi AOF (file khusus tambahan) mencatat setiap operasi tulis yang diterima oleh server. Anda dapat menggunakan persistensi RDB dan AOF untuk keamanan data maksimum.

Redis Sentinel, yang merupakan sistem terdistribusi, menyediakan ketersediaan tinggi untuk Redis. Ia memantau instance master dan replika, memberi tahu jika ada yang salah, dan failover otomatis jika master berhenti bekerja. Ini juga berfungsi sebagai penyedia konfigurasi untuk klien.

Kluster Redis menyediakan cara untuk menjalankan penginstalan Redis di mana data secara otomatis dibagi ke beberapa node Redis. Redis Cluster juga menyediakan beberapa tingkat ketersediaan selama partisi, meskipun cluster akan berhenti beroperasi jika mayoritas master tidak tersedia.

Seperti yang saya sebutkan sebelumnya, Redis adalah penyimpanan nilai kunci yang mendukung Strings, List, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, dan Bitmaps sebagai nilai. Salah satu kasus penggunaan paling sederhana dan paling umum adalah menggunakan nilai integer sebagai penghitung. Untuk mendukung ini, INCR (increment), DECR (decrement), dan operasi tunggal lainnya bersifat atomik, dan oleh karena itu aman dalam lingkungan multi-klien. Di Redis, ketika kunci dimanipulasi, mereka akan secara otomatis dibuat jika belum ada.

> SET koneksi 10

baik

> Koneksi INCR

(bilangan bulat) 11

> Koneksi INCR

(bilangan bulat) 12

> Koneksi DEL

(bilangan bulat) 1

> Koneksi INCR

(bilangan bulat) 1

> Koneksi INCRBY 100

(bilangan bulat) 101

> Koneksi DECR

(bilangan bulat) 100

> Koneksi DECRBY 10

(bilangan bulat) 90

Jenis struktur nilai lainnya juga memiliki contohnya dalam tutorial Try Redis. Tutorial sedang dalam pemeliharaan saat saya mencobanya sendiri; Saya berharap hal itu segera diperbaiki, karena Redis Labs telah terlibat dalam apa yang awalnya merupakan upaya komunitas.

Ada sejumlah modul add-on untuk Redis termasuk (dalam urutan popularitas yang menurun) modul jaringan neural, penelusuran teks lengkap, SQL, tipe data JSON, dan database grafik. Lisensi untuk modul ditetapkan oleh penulis. Beberapa modul yang bekerja dengan Redis pada dasarnya adalah modul untuk Redis Enterprise.

Peningkatan Redis Enterprise

Menggunakan arsitektur cluster tanpa-bersama, Redis Enterprise memberikan penskalaan linier tak terbatas tanpa memberlakukan overhead non-linier dalam arsitektur yang diskalakan. Anda dapat menerapkan beberapa instance Redis pada satu node cluster, untuk memanfaatkan sepenuhnya arsitektur komputer multi-core. Redis Enterprise telah mendemonstrasikan penskalaan hingga ratusan juta operasi per detik dengan lima sembilan (99,999%) waktu operasional. Redis Enterprise melakukan sharding ulang dan penyeimbangan ulang otomatis sambil mempertahankan latensi rendah dan throughput tinggi untuk beban transaksional.

Redis Enterprise menawarkan penerapan aktif-aktif untuk database yang didistribusikan secara global, memungkinkan operasi baca dan tulis simultan pada set data yang sama di beberapa lokasi geografis. Untuk membuatnya lebih efisien, Redis Enterprise dapat menggunakan tipe data yang direplikasi bebas konflik (CRDT) untuk menjaga konsistensi dan ketersediaan data. Riak dan Azure Cosmos DB adalah dua database NoSQL lain yang mendukung CRDT.

Meskipun ada literatur akademis yang luas tentang CRDT, saya akui saya tidak sepenuhnya memahami bagaimana atau mengapa mereka bekerja. Ringkasan singkat dari apa yang mereka lakukan adalah bahwa CRDT dapat menyelesaikan inkonsistensi tanpa intervensi, menggunakan seperangkat aturan yang diturunkan secara matematis. CRDT sangat berharga untuk data volume tinggi yang memerlukan status bersama, dan dapat menggunakan server yang tersebar secara geografis untuk mengurangi latensi bagi pengguna.

Salah satu perbedaan utama antara Redis dan Redis Enterprise adalah Redis Enterprise memisahkan jalur data dari manajemen cluster. Ini meningkatkan pengoperasian kedua komponen. Jalur data didasarkan pada beberapa proxy tanpa latensi, multi-threaded yang berada di setiap node cluster untuk menutupi kompleksitas yang mendasari sistem. Manajer klaster adalah fungsi pengatur yang menyediakan kapabilitas seperti resharding, rebalancing, auto-failover, kesadaran rak, penyediaan database, manajemen sumber daya, konfigurasi persistensi data, serta pencadangan dan pemulihan. Karena manajer kluster sepenuhnya dipisahkan dari komponen jalur data, perubahan pada komponen perangkat lunaknya tidak mempengaruhi komponen jalur data.

Redis on Flash adalah fitur Redis Enterprise yang dapat secara drastis mengurangi biaya perangkat keras untuk Redis. Alih-alih harus membayar terabyte RAM atau membatasi ukuran kumpulan data Redis, Anda dapat menggunakan Redis di Flash untuk menempatkan data panas yang sering diakses di memori dan nilai yang lebih dingin di Flash atau memori persisten, seperti Intel Optane DC.

Modul Redis Enterprise mencakup RedisGraph, RedisJSON, RedisTimeSeries, RedisBloom, RediSearch, dan RedisGears. Semua modul Redis Enterprise juga bekerja dengan Redis sumber terbuka.

Apa yang baru di Redis 6?

Redis 6 adalah rilis besar, baik untuk versi open source dan versi komersial Redis Enterprise. Berita performa adalah penggunaan I / O berulir, yang memberikan Redis 6 peningkatan kecepatan 2x lipat dari Redis 5 (yang tidak bungkuk). Itu terbawa ke Redis Enterprise, yang memiliki peningkatan kecepatan tambahan untuk cluster seperti yang dijelaskan di atas.

Penambahan daftar kontrol akses (ACL) memberi Redis 6 konsep pengguna, dan memungkinkan pengembang untuk menulis kode yang lebih aman. Redis Enterprise 6 dibangun di atas ACL untuk menawarkan kontrol akses berbasis peran (RBAC), yang lebih nyaman bagi pemrogram dan DBA.

Fitur baru utama di Redis 6

Redis 6.0 open source

  • Daftar kontrol akses (ACL)
  • Penggusuran yang ditingkatkan
  • I / O berulir
  • Protokol RESP3

Redis Enterprise 6.0

  • Kontrol akses berbasis peran (RBAC)
  • Memperluas aktif-aktif
  • HyperLogLog
  • Aliran

Redis Enterprise 6.0 menambahkan dukungan untuk tipe data Streams di database aktif-aktif. Hal ini memungkinkan ketersediaan tinggi dan latensi rendah saat membaca dan menulis secara bersamaan ke dan dari aliran waktu nyata di beberapa pusat data di beberapa lokasi geografis.

RedisGears adalah kerangka kerja dinamis yang memungkinkan pengembang untuk menulis dan menjalankan fungsi yang mengimplementasikan aliran data di Redis. Ini memungkinkan pengguna menulis skrip Python untuk dijalankan di dalam Redis, dan memungkinkan sejumlah kasus penggunaan termasuk menulis di belakang (Redis bertindak sebagai front-end ke database berbasis disk), pemrosesan data waktu nyata, streaming dan pemrosesan acara, operasi yang melintasi struktur dan model data, dan transaksi yang digerakkan oleh AI.

RedisAI adalah model yang melayani mesin yang berjalan di dalam Redis. Itu dapat melakukan inferensi dengan model PyTorch, TensorFlow, dan ONNX. RedisAI dapat berjalan di CPU dan GPU, dan mengaktifkan kasus penggunaan seperti deteksi penipuan, deteksi anomali, dan personalisasi.

Menginstal Redis

Anda dapat menginstal Redis dengan mengunduh dan mengompilasi tarball sumber atau dengan menarik image Docker dari Docker Hub. Redis dapat dikompilasi dan digunakan di Linux, MacOS, OpenBSD, NetBSD, dan FreeBSD. Repositori kode sumber ada di GitHub. Di Windows, Anda dapat menjalankan Redis di container Docker atau di bawah Windows Subsystem for Linux (WSL), yang memerlukan Windows 10.

Anda dapat menginstal Redis Enterprise di Linux atau di wadah Docker. Download Linux datang dalam bentuk paket biner (DEB atau RPM tergantung pada jenis Linux) dan skrip shell Bash untuk instalasi cluster. Skrip memeriksa empat inti yang diperlukan dan 15 GB RAM untuk instalasi.

Redis Enterprise Cloud

Cara tercepat untuk menginstal Redis Enterprise bukanlah dengan menginstalnya sama sekali, melainkan menjalankannya di Redis Enterprise Cloud. Ketika saya mencoba ini sendiri untuk tujuan peninjauan, saya awalnya menerima contoh Redis 5; Saya harus meminta peningkatan ke Redis 6.