Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Apakah Redis hanya cache?

Tidak, Redis lebih dari sekadar cache.

Seperti Cache, Redis menyimpan pasangan kunci=nilai. Tapi tidak seperti cache, Redis memungkinkan Anda beroperasi pada nilai-nilai. Ada 5 tipe data di Redis - Strings, Sets, Hash, Lists dan Sorted Sets. Setiap tipe data memperlihatkan berbagai operasi.

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

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

Memodelkan Pertanyaan, Pengguna, dan Jawaban

Setiap objek dapat dimodelkan sebagai Peta. Misalnya, Pertanyaan adalah peta dengan bidang {id, title, date_asked, votes, ask_by, status}. Demikian pula, Jawaban adalah peta dengan bidang {id, question_id, answer_text, answer_by, vote, status}. Demikian pula, kita dapat memodelkan objek pengguna.

Masing-masing objek 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 meng-upvote 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 halaman beranda. Jika Anda menulis program .NET atau Java, Anda akan menyimpan pertanyaan dalam Daftar. Ternyata, itu juga cara terbaik untuk menyimpan ini di Redis.

Setiap kali seseorang mengajukan pertanyaan, kami menambahkan id-nya ke dalam daftar.

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

Sekarang, ketika Anda ingin merender beranda Anda, 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 tunjukkan kepada pengguna.

Pertanyaan berdasarkan Tag, Diurutkan berdasarkan Suara

Selanjutnya, kami ingin mengambil pertanyaan untuk setiap tag. Namun SO memungkinkan Anda melihat pertanyaan dengan suara terbanyak, pertanyaan baru, atau pertanyaan yang belum terjawab di bawah setiap tag.

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

Mari kita lanjutkan 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 kumpulan yang diurutkan, dan mengaitkan skor (jumlah suara) untuk setiap pertanyaan. Setiap kali pertanyaan mendapat upvoted, kami akan menambah skornya. Dan ketika pengguna mengklik "Pertanyaan yang diberi tag Redis, diurutkan berdasarkan suara", kami hanya melakukan zrevrange dan dapatkan kembali pertanyaan teratas.

Pertanyaan Waktu Nyata tanpa menyegarkan halaman

Dan akhirnya, fitur bonus. Jika Anda tetap membuka halaman pertanyaan, SO akan memberi tahu Anda saat 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. Saat pertanyaan baru ditambahkan, Anda akan publish pesan ke saluran itu. Semua pengguna kemudian akan mendapatkan pesan tersebut. Anda harus menggunakan teknologi web seperti soket web atau komet untuk benar-benar mengirimkan pesan ke browser, tetapi Redis membantu Anda dengan semua saluran di sisi server.

Kegigihan, Keandalan, dll.

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara lebih cepat untuk mengulangi semua kunci dan nilai dalam redis db

  2. Tidak dapat memulai server Redis karena kesalahan file konfigurasi

  3. Simpan informasi pengguna dengan redis atau mongodb

  4. Mengapa saya harus menutup atau membiarkan koneksi Redis tetap terbuka?

  5. saluran tanpa lapisan saluran atau hosting gratis lainnya