像网易新闻收藏的功能,如果使用redis做缓存的话,应该如何实现?
迷茫
迷茫 2017-04-22 08:59:31
0
4
799

像网易新闻收藏的功能,如果使用redis做缓存的话,应该如何实现?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(4)
巴扎黑

Jika berita itu mempunyai ID atau pengecam unik. Anda boleh mempertimbangkan untuk menggunakan jenis koleksi redis. Dan keunikan koleksi menghalang masalah penambahan pendua!
redis.sadd('personmark:userID',newsID);//Tambah elemen pada koleksi pengguna
redis.smembers('personmark:userID');//Dapatkan semua ID berita yang dikumpul oleh pengguna pada satu masa

巴扎黑

Gunakan set zset yang diisih; kunci ialah ID pengguna; ahli ialah ID unik berita; Skor ialah kenaikan tarikh bermula dari hari sebelumnya (contohnya, bermula dari 2015-1-1, markah hari ini ialah 155? setelah anda mempunyai skor, anda boleh mengeluarkannya tanpa mengisih dan memaparkannya secara langsung; zadd(kunci, markah, ahli):Tambah berita
zrank(kunci, ahli): Mengembalikan mengikut markah daripada kecil kepada besar, iaitu berita yang dikumpul diisih mengikut tarikh daripada baharu kepada lama; zrangebyscore(kunci, min, maks): Mengembalikan koleksi skor dari awal hingga akhir, digunakan untuk merealisasikan paparan berita yang membelok halaman;

大家讲道理

kunci: news_fav_uid
nilai: koleksi ID berita (tatasusunan)
di mana uid ialah ID pengguna.
$news_ids = array(1024,1025,1026);
echo json_encode($news_ids);
Tidak kira anda menggunakan Memcached/Redis/MySQL, anda boleh menyimpannya seperti ini.
array_push menolak koleksi baharu ke penghujung tatasusunan $news_ids.
Jika anda ingin mengisih mengikut masa, anda hanya memerlukan json_decode untuk menyahkod, array_reverse untuk membalikkan tatasusunan, dan kemudian untuk setiap output.

阿神

Jawapan di tingkat 1 sangat bagus, tetapi saya hanya ingin menambah bahawa tidak perlu menggunakan redis sebagai cache di sini, hanya gunakan ia sebagai storan data, kerana redis juga pangkalan data

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan