it-swarm.asia

Apakah Redis hanya sebuah cache?

Saya telah membaca beberapa dokumen Redis dan mencoba tutorialnya di http://try.redis-db.com/ . Sejauh ini, saya tidak bisa melihat perbedaan antara Redis dan teknologi caching seperti Velocity atau Framework Caching Perpustakaan Perusahaan

Anda secara efektif hanya menambahkan objek ke penyimpanan data dalam memori menggunakan kunci unik. Sepertinya tidak ada semantik relasional ...

Apa yang saya lewatkan?

227
Matthew Evans

Tidak, Redis lebih dari sekadar cache. 

Seperti Cache, Redis menyimpan kunci = pasangan nilai. Tetapi tidak seperti cache, Redis memungkinkan Anda beroperasi pada nilai-nilai. Ada 5 tipe data dalam Redis - String, Set, Hash, Daftar dan Set Diurutkan. Setiap tipe data memperlihatkan berbagai operasi.

Cara terbaik untuk memahami Redis adalah dengan memodelkan suatu aplikasi tanpa memikirkan bagaimana Anda akan menyimpannya dalam database. 

Katakanlah kita ingin membangun StackOverflow.com. Untuk membuatnya sederhana, kita membutuhkan Pertanyaan, Jawaban, Tag, dan Pengguna.

Pertanyaan Modeling, Pengguna dan Jawaban

Setiap objek dapat dimodelkan sebagai Peta. Misalnya, Pertanyaan adalah peta dengan bidang {id, judul, date_asked, suara, asked_by, status}. Demikian pula, sebuah Jawaban adalah peta dengan bidang {id, question_id, answer_text, answer_by, suara, status}. Demikian pula, kita dapat memodelkan objek pengguna.

Masing-masing benda ini dapat langsung disimpan di Redis sebagai Hash. Untuk menghasilkan id unik, Anda dapat menggunakan perintah kenaikan atom. Sesuatu seperti ini - 

$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK

$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK

Menangani Suara

Sekarang, setiap kali seseorang menjawab pertanyaan atau jawaban, Anda hanya perlu melakukan ini 

$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2

Daftar Pertanyaan untuk Beranda

Selanjutnya, kami ingin menyimpan pertanyaan terbaru untuk ditampilkan di beranda. Jika Anda sedang menulis program .NET atau Java, Anda akan menyimpan pertanyaan dalam Daftar. Ternyata, itu adalah cara terbaik untuk menyimpan ini di Redis juga. 

Setiap kali seseorang mengajukan pertanyaan, kami menambahkan idnya ke daftar. 

$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1

Sekarang, ketika Anda ingin merender beranda, Anda meminta Redis untuk 25 pertanyaan terbaru. 

$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"

Sekarang setelah Anda memiliki id, ambil item dari Redis menggunakan pipelining dan menunjukkannya kepada pengguna.

Pertanyaan dengan Tag, Diurut berdasarkan Pilihan

Selanjutnya, kami ingin mengambil pertanyaan untuk setiap tag. Tetapi SO memungkinkan Anda untuk melihat pertanyaan pilihan teratas, pertanyaan baru atau pertanyaan yang tidak dijawab di bawah setiap tag.

Untuk memodelkan ini, kami menggunakan fitur Set Diurutkan Redis. Set Diurutkan memungkinkan Anda untuk mengaitkan skor dengan setiap elemen. Anda kemudian dapat mengambil elemen berdasarkan skor mereka. 

Ayo maju dan lakukan ini untuk tag Redis 

$ zadd questions_by_votes_tagged:redis 2 question:1 
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2 
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613 
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5 
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5 
1) "question:2"
2) "question:613"
3) "question:1"

Apa yang kita lakukan di sini? Kami menambahkan pertanyaan ke set yang diurutkan, dan mengaitkan skor (jumlah suara) untuk setiap pertanyaan. Setiap kali sebuah pertanyaan dibatalkan, kami akan menambah nilainya. Dan ketika pengguna mengklik "Pertanyaan yang ditandai Redis, disortir berdasarkan suara", kami hanya melakukan zrevrange dan mendapatkan kembali pertanyaan teratas.

Pertanyaan Waktu Nyata tanpa halaman yang menyegarkan

Dan akhirnya, fitur bonus. Jika Anda membiarkan halaman pertanyaan terbuka, SO akan memberi tahu Anda ketika pertanyaan baru ditambahkan. Bagaimana Redis bisa membantu di sini?

Redis memiliki model pub-sub. Anda dapat membuat saluran, misalnya "channel_questions_tagged_redis". Anda kemudian subscribe pengguna ke saluran tertentu. Ketika pertanyaan baru ditambahkan, Anda akan publish pesan ke saluran itu. Semua pengguna akan mendapatkan pesan. Anda harus menggunakan teknologi web seperti soket atau komet web untuk benar-benar mengirimkan pesan ke browser, tetapi Redis membantu Anda dengan semua pipa ledeng di sisi server.

Kegigihan, Keandalan, dll.

Tidak seperti Cache, Redis tetap menyimpan data pada hard disk. Anda dapat memiliki pengaturan master-slave untuk memberikan keandalan yang lebih baik. Untuk mempelajari lebih lanjut, buka topik Kegigihan dan Replikasi di sini - http://redis.io/documentation

586

Redis memiliki kemampuan unik seperti lua-script ultra-cepat. Waktu pelaksanaannya sama dengan eksekusi perintah C. Ini juga membawa atomicity untuk manipulasi data Redis canggih yang diperlukan untuk mengerjakan banyak objek canggih seperti Locks dan Semaphores.

Ada Redis yang berbasis di kisi data memori yang disebut Redisson yang memungkinkan untuk dengan mudah membangun aplikasi terdistribusi di Java. Berkat terdistribusi Lock, Semaphore, ReadWriteLock, CountDownLatch, ConcurrentMap objek dan banyak lainnya.

Sempurna bekerja di cloud dan mendukung AWS Elasticache , AWS Elasticache Cluster dan Azure Redis Cache support

3
Nikita Koksharov

Bukan hanya cache.

  • Dalam penyimpanan nilai kunci memori
  • Mendukung banyak tipe data (string, hash, daftar, set, set diurutkan, bitmap, dan hyperloglogs)
  • Ini memberikan kemampuan untuk menyimpan data cache ke penyimpanan fisik (jika diperlukan).
  • Mendukung model pub-sub
  • Redis cache menyediakan replikasi untuk ketersediaan tinggi (master/slave)
2
Pankaj Rawat

Sebenarnya tidak ada ketergantungan antara representasi data relatif (atau semua tipe representasi data) dan peran basis data (cache, kegigihan permanen, dll).

Redis baik untuk cache memang benar, tetapi lebih dari sekadar cache. Ini adalah basis data dalam memori sepenuhnya berkecepatan tinggi. Itu tetap ada data pada disk. Ini bukan relasional, ini penyimpanan nilai kunci.

Kami menggunakannya dalam produksi. Redis membantu kami membangun perangkat lunak yang menangani ribuan permintaan per detik dan menyimpan data bisnis pelanggan selama siklus hidup alami.

1
Denys

Redis adalah cache yang paling cocok untuk arsitektur lingkungan didistribusikan/Microservice.

Itu cepat, dapat diandalkan, memberikan atomicity dan konsistensi dan memiliki berbagai tipe data seperti set, hash, daftar dll. 

Saya menggunakannya dari satu tahun terakhir dan itu benar-benar datang sebagai penyelamat ketika Anda perlu memberikan solusi siap produksi dengan sangat cepat dan untuk setiap masalah terkait kinerja karena Anda selalu dapat menggunakannya untuk menyimpan data.

0
Manvendra Jina

Selain sebagai server cache, Redis secara khusus server struktur data. Menjadi cache dalam bentuk server struktur data sangat berarti, karena struktur data adalah dasar program, atau aplikasi . Pertimbangkan Anda menggunakan database SQL sebagai teknologi penyimpanan dan perlu membuat daftar, peta hash, sekumpulan peringkat, atau hal-hal seperti itu, agak sakit di leher. Redis dapat menyediakan Anda fungsi-fungsi ini langsung dengan cara yang sangat sederhana, sehingga sangat menyederhanakan pengembangan.

Di sisi lain, server struktur data tidak harus dalam bentuk cache. Ada proyek yang kompatibel dengan Redis tetapi memiliki mesin penyimpanan persisten.

0