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 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 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 belum terjawab 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 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 dapat 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
mengirim pesan ke saluran itu. Semua pengguna akan mendapatkan pesan. Anda harus menggunakan teknologi web seperti soket web atau komet 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