Ada terlalu banyak skenario aplikasi untuk Redis. Sekarang izinkan saya memperkenalkan salah satu fitur utamanya, menerbitkan langganan (pub/sub).
Pendahuluan Fitur:
Apa itu langganan publikasi untuk Redis (pub/sub)? Fungsi pub/sub (berarti publikasi, berlangganan) adalah fungsi penerbitan dan berlangganan. Dalam sistem berbasis peristiwa, pub/sub saat ini banyak digunakan model komunikasi. Ini mengadopsi peristiwa sebagai mekanisme komunikasi dasar untuk memberikan model interaksi yang digabungkan secara longgar yang diperlukan oleh sistem skala besar: pelanggan (seperti klien) mengekspresikan suatu peristiwa atau jenis peristiwa yang tertarik untuk menerima dalam bentuk berlangganan acara; Penerbit (seperti server) dapat memberi tahu pelanggan peristiwa yang relevan yang diminati oleh pelanggan kapan saja. Teman -teman yang akrab dengan pola desain harus memahami bahwa ini sangat mirip dengan pola pengamat di antara 23 pola desain.
Demikian pula, Redis's Pub/Sub adalah mode komunikasi pesan, tujuan utamanya adalah untuk melepaskan publisher pesan dan pelanggan pesan. Sebagai pub/sub server, Redis memainkan fungsi perutean pesan antara pelanggan dan penerbit.
Jika Anda tidak memahami penjelasan profesional di atas, itu tidak masalah, tetapi saya tidak terlalu memahaminya.
Sederhananya, ada juga konsep saluran di sini, yang berarti saluran. Misalnya, jika Anda berlangganan saluran bank, ketika dana Anda berubah, Anda akan menerima bahwa bank akan mengirimkan informasi kepada Anda melalui salurannya. Di sini, Anda menerima secara pasif, daripada meminta informasi kepada bank. Dalam contoh ini, Anda adalah sub (pelanggan), dan bank adalah pub (pub).
Skenario Aplikasi Proyek:
Saya selalu berpikir bahwa sebelum Anda mengetahui teknologi yang sama, Anda harus terlebih dahulu memahami di mana teknologi seperti itu akan digunakan dan Anda tidak dapat mempelajari sesuatu secara membabi buta.
Melihat fitur penerbitan langganan, ini sangat cocok untuk membuat sistem obrolan langsung sederhana. Ini adalah salah satunya, tentu saja, hal -hal seperti itu jarang terlibat dalam perkembangan kita. Izinkan saya memberi Anda skenario lain yang biasa digunakan. Dalam arsitektur terdistribusi kami, kami sering menemukan skenario membaca dan menulis pemisahan. Selama proses penulisan, Anda dapat menggunakan Redis untuk menerbitkan langganan, sehingga nilai -nilai tertulis diterbitkan untuk setiap program baca secara tepat waktu, memastikan konsistensi lengkap data. Misalnya, di situs web blog, 100 penggemar berlangganan Anda. Saat Anda memposting artikel baru, Anda dapat mendorong pesan ke penggemar Anda. Singkatnya, ada banyak adegan dan perlu dieksplorasi. .
Tinjau bagaimana Java beroperasi Redis:
Redis adalah database cache, yang juga merupakan struktur C/S, yaitu klien dan server. Secara umum, di Java, kami biasanya menggunakan jedis (klien) untuk mengoperasikan Redis (server). Saat beroperasi, koneksi harus dibuat di antara keduanya. Sama seperti tautan database, dalam database relasional, kami umumnya mempertahankan kumpulan koneksi untuk mencapai penggunaan kembali tautan, sehingga dapat menghemat waktu untuk membangun dan menutup koneksi. Oleh karena itu, di Jedis, ada juga konsep Jedispool (Jedis Connection Pool), dan kami semua menggunakan koneksi dari kolam.
Pada kode:
Jika Anda ingin menggunakan JEDIS, Anda pertama -tama akan memperkenalkan dependensi
<dependency> <GroupId> redis.clients </groupid> <ArTifactId> jedis </artifactid> <version> 2.9.0 </version> </gandendency>
Buat Penerbit (Penerbit)
Penerbit kelas publik memperluas utas {private final jedispool jedispool; Penerbit Publik (Jedaispool Jedispool) {this.jedispool = jedispool; } @Override public void run () {BufferedReader Reader = new BufferedReader (InputStreamReader baru (System.in)); Jedis jedis = jedispool.getResource (); // Ambil koneksi dari kumpulan koneksi sementara (true) {string line = null; coba {line = reader.readline (); if (! "Quit" .Equals (line)) {jedis.publish ("mychannel", line); // dorong pesan dari saluran mychannel} else {break; }} catch (ioException e) {E.PrintStackTrace (); }}}}Buat pelanggan lain
Pelanggan kelas publik memperluas jedispubsub {pelanggan publik () {} @Override public void onMessage (saluran string, string pesan) {// Terima pesan dan panggilan system.out.println (string.format ("Terima Redis Pesan, Saluran %S, pesan %s", saluran, pesan)); } @Override public void Onsubscribe (saluran string, int subscribedChannels) {// Tidak disampaikan kepada saluran akan memanggil System.out.println (String.Format ("Subscribe Redis Channel Success, Channel %S, SubscribedChannels %D", Channel, SubscribedChannels)); } @Override public void onunsubscribe (saluran string, int subscribedChannels) {// tidak berlangganan akan memanggil system.out.println (string.Format ("Saluran Redis berhenti berlangganan, saluran %S, berlangganan Channels %D", Channel, SubscribedChannels)); }}Di sini, pelanggan perlu mewarisi JEDISPUBSUB untuk menulis ulang tiga metode. Komentar tujuan telah ditulis, sangat sederhana.
Kami hanya mendefinisikan pelanggan di sini, dan pergi ke saluran berlangganan di bawah ini.
Subthread kelas publik memperluas utas {private final jedispool jedispool; Pelanggan Private Final Subscriber = Pelanggan Baru (); Private Final String Channel = "MyChannel"; Subthread publik (jedaispool jedaispool) {super ("subthread"); this.jedispool = jedispool; } @Override public void run () {System.out.println (string.format ("Berlangganan redis, saluran %s, utas akan diblokir", saluran)); Jedis jedis = null; coba {jedis = jedaispool.getResource (); // ambil koneksi jedis.subscribe (pelanggan, saluran); // Berlangganan melalui API Berlangganan, parameternya adalah pelanggan dan nama saluran} (Exception e) {System.out.println (string.format ("Kesalahan saluran subsrcibe, %s", e)); } akhirnya {if (jedis! = null) {jedis.close (); }}}}Akhirnya, tulis kelas tes lain dan jalankan. Masukkan pesan di keyboard dan pelanggan akan memicu metode OnMessage
PubsubDemo kelas publik {public static void main (string [] args) {// terhubung ke server redis jedispool jedispool = new jedispool (new jedispoolconfig (), "127.0.0.1", 6379); System.out.println (String.format ("Redis Pool dimulai, redis ip %s, redis port %d", "127.0.0.1", 6379)); Subthread subthread = subthread baru (jedispool); // Subscriber Subthread.start (); Penerbit Penerbit = Penerbit Baru (Jedispool); // penerbit penerbit.start (); }}Lihat hasil cetak
Lampirkan alamat kode https://github.com/fangyong1421/redis
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.