Boleh menggunakan berbilang storan HashSet. Setiap Weibo hanyalah subkunci dalam HashSet. Anda boleh menggunakan arahan HIncrBy untuk meningkatkan bilangan suka. Bahagikan TID kepada blok supaya kunci dalam setiap HashSet tidak melebihi 100. Dokumentasi rasmi menyatakan bahawa HashSet menggunakan storan dan pengimbasan linear apabila elemen dalaman kurang daripada 100, yang lebih cekap dan menjimatkan memori berbanding dengan struktur pokok pada skala data yang sama.
Contohnya: Weibo dengan TID 123456 wujud dalam HashSet z:1234, dan kuncinya ialah 56. Dengan mengandaikan bahawa Weibo terkini juga sangat aktif, dalam kebanyakan kes hanya beberapa HashSet dipanggil, yang sangat mesra kepada cache CPU.
Jika anda ingin mengurus pengguna yang menyukainya, anda boleh menyesuaikan format data. Apabila bilangan pengguna kecil, benamkan keseluruhan senarai pengguna ke dalam medan nilai HashSet. Selepas terdapat lebih daripada 50 pengguna, contohnya, pisahkan mereka ke dalam Set dan simpan kekunci Set dalam HashSet. Contoh:
Memandangkan kebanyakan pengguna Weibo mempunyai kurang suka, HashSet boleh menyimpan banyak kekunci ruang global (kunci global menggunakan lebih banyak memori daripada kunci HashSet).
Jawapan tentang @menjual seluar dalam dan pergi ke dalam talian:
Jika quicksort di tempat digunakan, kecekapan pengisihan manual bagi 50 pengguna adalah sangat tinggi, kerana pada skala data ini, keramahan cache yang dibawa oleh penyimpanan data padat adalah jauh lebih baik daripada peningkatan yang dibawa oleh Redis ZSet berbanding dengan pengisihan manual. Selepas pengguna yang menyukainya dipromosikan, mereka secara automatik akan menyesuaikan diri dengan set atau zset untuk memastikan kerumitan masa algoritma. Jika anda masih bimbang tentang kecekapan, anda boleh menulis semula senarai UID yang diisih kembali ke dalam nilai dalam HashSet dan menggunakannya secara langsung jika tiada perubahan data pada masa hadapan.
Sama ada nak guna set atau zset masih bergantung pada keperluan poster. Kerumitan menambah ahli kepada set ialah O(1), dan kepada zset ialah O(log N), tetapi set tidak mempunyai fungsi pengisihan.
Tidak digalakkan LS menggunakan HASH untuk menyimpan seperti data Kerana tiada cara untuk mengisih (jika perlu. Saya rasa ia mesti perlu)
Buat masa ini beginilah cara kami mengendalikannya.
Anda boleh menggunakan set pesanan ZSET untuk storan Secara teorinya, dalam ZSET, tidak ada nombor dalam 100,000 dalam erti kata lain, bilangan orang yang menyukai Weibo adalah dalam 100,000 (ini adalah mustahil).
Adakah perlu untuk menyimpan setiap uid, atau adakah anda fikir ini adalah yang Sina Weibo lakukan? Dalam kebanyakan kes, semua orang hanya memberi perhatian kepada nombor Jika ini berlaku, maka hanya gunakan nombor untuk menyimpan {tid->count}
Jika anda perlu menyimpan, adalah disyorkan untuk menggunakan {tid->set(uid)} untuk menyimpan
Pengoptimuman ialah anda boleh menetapkan ambang Contohnya, jika lebih daripada 100 orang menyukainya, anda tidak akan menambah apa-apa lagi padanya, tetapi hanya menambah nombor (sudah tentu anda perlu menyimpan { yang lain. tid-> ;count}). Kerana terdapat lebih daripada 10,000 suka di Weibo, tiada siapa yang kembali untuk mengklik pada semua orang yang menyukainya satu demi satu. .
Boleh menggunakan berbilang storan HashSet. Setiap Weibo hanyalah subkunci dalam HashSet. Anda boleh menggunakan arahan HIncrBy untuk meningkatkan bilangan suka. Bahagikan TID kepada blok supaya kunci dalam setiap HashSet tidak melebihi 100. Dokumentasi rasmi menyatakan bahawa HashSet menggunakan storan dan pengimbasan linear apabila elemen dalaman kurang daripada 100, yang lebih cekap dan menjimatkan memori berbanding dengan struktur pokok pada skala data yang sama.
Contohnya: Weibo dengan TID
123456
wujud dalam HashSetz:1234
, dan kuncinya ialah 56. Dengan mengandaikan bahawa Weibo terkini juga sangat aktif, dalam kebanyakan kes hanya beberapa HashSet dipanggil, yang sangat mesra kepada cache CPU.Jika anda ingin mengurus pengguna yang menyukainya, anda boleh menyesuaikan format data. Apabila bilangan pengguna kecil, benamkan keseluruhan senarai pengguna ke dalam medan nilai HashSet. Selepas terdapat lebih daripada 50 pengguna, contohnya, pisahkan mereka ke dalam Set dan simpan kekunci Set dalam HashSet. Contoh:
Memandangkan kebanyakan pengguna Weibo mempunyai kurang suka, HashSet boleh menyimpan banyak kekunci ruang global (kunci global menggunakan lebih banyak memori daripada kunci HashSet).
Jawapan tentang @menjual seluar dalam dan pergi ke dalam talian:
Jika quicksort di tempat digunakan, kecekapan pengisihan manual bagi 50 pengguna adalah sangat tinggi, kerana pada skala data ini, keramahan cache yang dibawa oleh penyimpanan data padat adalah jauh lebih baik daripada peningkatan yang dibawa oleh Redis ZSet berbanding dengan pengisihan manual. Selepas pengguna yang menyukainya dipromosikan, mereka secara automatik akan menyesuaikan diri dengan set atau zset untuk memastikan kerumitan masa algoritma. Jika anda masih bimbang tentang kecekapan, anda boleh menulis semula senarai UID yang diisih kembali ke dalam nilai dalam HashSet dan menggunakannya secara langsung jika tiada perubahan data pada masa hadapan.
Sama ada nak guna set atau zset masih bergantung pada keperluan poster. Kerumitan menambah ahli kepada set ialah O(1), dan kepada zset ialah O(log N), tetapi set tidak mempunyai fungsi pengisihan.
Tidak digalakkan LS menggunakan HASH untuk menyimpan seperti data Kerana tiada cara untuk mengisih (jika perlu. Saya rasa ia mesti perlu)
Buat masa ini beginilah cara kami mengendalikannya.
Anda boleh menggunakan set pesanan ZSET untuk storan Secara teorinya, dalam ZSET, tidak ada nombor dalam 100,000 dalam erti kata lain, bilangan orang yang menyukai Weibo adalah dalam 100,000 (ini adalah mustahil).
Hmm, PS lagi!!!c:<ID Komen> Cara mengaitkannya dengan data Weibo seperti ini:
t:$tid:comments:scores (ID ulasan peta masa ZSET);Adakah perlu untuk menyimpan setiap uid, atau adakah anda fikir ini adalah yang Sina Weibo lakukan? Dalam kebanyakan kes, semua orang hanya memberi perhatian kepada nombor Jika ini berlaku, maka hanya gunakan nombor untuk menyimpan {tid->count}
Jika anda perlu menyimpan, adalah disyorkan untuk menggunakan {tid->set(uid)} untuk menyimpan
Pengoptimuman ialah anda boleh menetapkan ambang Contohnya, jika lebih daripada 100 orang menyukainya, anda tidak akan menambah apa-apa lagi padanya, tetapi hanya menambah nombor (sudah tentu anda perlu menyimpan { yang lain. tid-> ;count}). Kerana terdapat lebih daripada 10,000 suka di Weibo, tiada siapa yang kembali untuk mengklik pada semua orang yang menyukainya satu demi satu. .