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), );
Redis の zset を見てください。scop は要件を達成できますが、100% を超える ID で言及した種類のクエリは Redis で考えを変えるのが最善です。これは Redis の強みではありません
Key-Valueデータベースは条件でフィルタリングするアプリケーションには適していないと思います。
もし
512
这个条件是固定的,可以在添加文章的时候把大于512的元素加到一个集合里。yesterday
可以用EXPIRE
が叶ったら。設計中にフィルタリング条件を決定できない場合、ハッシュテーブル/リンクリストを走査する必要があり、あまり効率的ではありません...
512とは何ですか?特別な意味を持つ数値であり、この方法で頻繁にチェックする必要がある場合は、id>512 のセットを redis の別のマップ (map_512 など) に保存し、毎回マップ全体を取り出すことをお勧めします。 。そうでない場合は、毎回マップを取り出してローカルでフィルターすることしかできません。この種のクエリが頻繁に発生し、フィルタリング条件が異なる場合は、すべてを一度に取得して均一にフィルタリングすることをお勧めします。
みなさん、ご返信ありがとうございました! :)
Redis がそのようなニーズに適さない場合は、mongodb などの適切な nosql を推奨してください。
キーの追加、変更、削除など、データが頻繁に変更される場合は、簡単で楽しいmongodbを使用できます~
別のインデックスを作成するか、mongodb に変更します