Berdasarkan jawapan @ybak, saya akan berikan anda penyelesaian yang agak mudah dan praktikal.
Hadkan memori yang diduduki oleh Redis akan memuatkan data panas ke dalam memori mengikut strategi penyingkiran datanya sendiri. Jadi, kirakan anggaran memori yang diduduki oleh data 20W, dan kemudian tetapkan had memori Redis.
Seperti data pengguna. Pangkalan data mempunyai 20 juta penyertaan. Pengguna aktif: Masukkan redis sortSet pengguna yang telah log masuk dalam masa dua hari (untuk kemudahan, pengguna aktif dalam satu hari) dilog masuk ZADD sekali Jika set sudah wujud, skornya (masa log masuk) akan ditimpa. Kunci: log masuk:pengguna, nilai: cap masa skor, id pengguna nilai. Sediakan tugas berkala, seperti memadamkan data dalam susunan yang ditetapkan sebelum pukul 3 pada hari sebelumnya pada pukul 03:00:00 setiap hari (untuk memastikan set itu tidak berkembang secara tidak teratur dan mengekalkan pengguna aktif pada hari lalu ).
Apabila mengambil, dapatkan cap masa semasa (int 10 digit), kemudian tolak 1 hari untuk mendapatkan pengguna aktif dalam tempoh 24 jam yang lalu mengikut julat skor.
Melihat soalan anda, anda hanya perlu menggunakan Redis sebagai cache Sediakan cara mudah untuk melaksanakan pembatalan cache: LRU (baru-baru ini jarang digunakan keusangan) Iaitu, setiap kali cache redis mencecah, Tambah. ttl (masa tamat tempoh) tertentu ke cache hit (ditetapkan mengikut situasi tertentu, seperti 10 minit Selepas tempoh masa, ttl data panas akan menjadi lebih besar dan tidak akan tamat tempoh secara automatik. Data sejuk pada asasnya menjadi tidak sah serta-merta selepas melepasi set ttl.
Apabila saiz set data memori redis meningkat kepada saiz tertentu, strategi penyingkiran data akan dilaksanakan.
redis menyediakan 6 strategi penghapusan data:
volatile-lru: Pilih data yang paling kurang digunakan baru-baru ini daripada set data dengan masa tamat untuk menghapuskan volatile-ttl volatile-random allkeys-lru allkeys -random tiada enviction
Berdasarkan jawapan @ybak, saya akan berikan anda penyelesaian yang agak mudah dan praktikal.
Hadkan memori yang diduduki oleh Redis akan memuatkan data panas ke dalam memori mengikut strategi penyingkiran datanya sendiri.
Jadi, kirakan anggaran memori yang diduduki oleh data 20W, dan kemudian tetapkan had memori Redis.
Data apakah masalahnya?
Seperti data pengguna. Pangkalan data mempunyai 20 juta penyertaan.
Pengguna aktif:
Masukkan redis sortSet pengguna yang telah log masuk dalam masa dua hari (untuk kemudahan, pengguna aktif dalam satu hari) dilog masuk ZADD sekali Jika set sudah wujud, skornya (masa log masuk) akan ditimpa. Kunci: log masuk:pengguna, nilai: cap masa skor, id pengguna nilai. Sediakan tugas berkala, seperti memadamkan data dalam susunan yang ditetapkan sebelum pukul 3 pada hari sebelumnya pada pukul 03:00:00 setiap hari (untuk memastikan set itu tidak berkembang secara tidak teratur dan mengekalkan pengguna aktif pada hari lalu ).
Apabila mengambil, dapatkan cap masa semasa (int 10 digit), kemudian tolak 1 hari untuk mendapatkan pengguna aktif dalam tempoh 24 jam yang lalu mengikut julat skor.
Melihat soalan anda, anda hanya perlu menggunakan Redis sebagai cache
Sediakan cara mudah untuk melaksanakan pembatalan cache: LRU (baru-baru ini jarang digunakan keusangan)
Iaitu, setiap kali cache redis mencecah, Tambah. ttl (masa tamat tempoh) tertentu ke cache hit (ditetapkan mengikut situasi tertentu, seperti 10 minit
Selepas tempoh masa, ttl data panas akan menjadi lebih besar dan tidak akan tamat tempoh secara automatik. Data sejuk pada asasnya menjadi tidak sah serta-merta selepas melepasi set ttl.
Apabila saiz set data memori redis meningkat kepada saiz tertentu, strategi penyingkiran data akan dilaksanakan.
redis menyediakan 6 strategi penghapusan data:
volatile-lru: Pilih data yang paling kurang digunakan baru-baru ini daripada set data dengan masa tamat untuk menghapuskan
volatile-ttl
volatile-random
allkeys-lru
allkeys -random
tiada enviction