Rumah > Soal Jawab > teks badan
redis 如何实现数据按 id 或者 timestamp 筛选?
比如,像 sql 这样
sql
select * from news_table where id > '512'; select * from news_table where id > '512' and cat_id = '2'; select * from news_table where pubdate > 'yesterday';
sql
-- news_table info CREATE TABLE `news_table` ( `id` int(10), `cat_id`, int(10), `title` text, `content` longtext, `pubdate` int(10), );
高洛峰2017-04-22 09:02:37
Sila lihat pada zset redis, scop boleh mencapai keperluan anda, tetapi jenis pertanyaan yang anda nyatakan dengan id yang lebih besar daripada itu adalah yang terbaik untuk menukar idea dalam redis, ini bukan titik kukuhnya
伊谢尔伦2017-04-22 09:02:37
Saya rasa pangkalan data Key-Value tidak sesuai untuk aplikasi menapis mengikut syarat.
Jika 512
syarat ini ditetapkan, anda boleh menambah elemen lebih besar daripada 512 pada set apabila menambah artikel. yesterday
boleh dilaksanakan menggunakan EXPIRE
.
Jika keadaan penapisan tidak dapat ditentukan semasa reka bentuk, jadual Hash/senarai terpaut mesti dilalui, yang tidak akan menjadi sangat cekap...
大家讲道理2017-04-22 09:02:37
Apakah itu 512? Jika ia adalah nombor dengan makna istimewa dan selalunya perlu disemak dengan cara ini, anda disyorkan supaya menyimpan set id>512 dalam peta berasingan dalam redis, seperti map_512 dan hanya mengeluarkan keseluruhan peta setiap kali . Jika tidak, anda hanya boleh mengeluarkan peta setiap kali dan menapisnya secara setempat. Jika pertanyaan jenis ini sangat kerap dan keadaan penapisan berbeza, adalah disyorkan untuk mendapatkannya sekali gus dan kemudian menapisnya secara seragam.
PHP中文网2017-04-22 09:02:37
Terima kasih semua atas balasan anda! :)
Jika redis tidak sesuai untuk keperluan tersebut, sila cadangkan nosql yang sesuai seperti mongodb?
ringa_lee2017-04-22 09:02:37
Jika data kerap berubah, seperti menambah, mengubah suai atau memadam kekunci, anda boleh menggunakan mongodb, yang mudah dan menyeronokkan~