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