首頁  >  問答  >  主體

redis 如何实现数据筛选

redis 如何实现数据按 id 或者 timestamp 筛选?
比如,像 sql 这样

sqlselect * 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),
);
黄舟黄舟2707 天前1292

全部回覆(6)我來回復

  • 高洛峰

    高洛峰2017-04-22 09:02:37

    請題主看看redis的zset,scop可以實現你的要求,但是你說的id大於的那種查詢最好在redis換換思路,這不是它的長項

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-22 09:02:37

    我覺得Key-Value資料庫不太適合篩選出來的應用吧。

    如果512这个条件是固定的,可以在添加文章的时候把大于512的元素加到一个集合里。
    yesterday可以用EXPIRE實作。

    如果篩選條件在設計時無法確定的話,就要遍歷Hash錶/鍊錶了,效率不會太高…

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-22 09:02:37

    512 是一個什麼數?如果是有特別意義的數,常常需要這樣查,那麼建議你將id>512的集合在redis中單獨用一個map存儲,如map_512,每次直接拿出整個map就行。如果不是,那就只能每次都取出map,然後在本地進行過濾了。這種查詢如果很頻繁,而且過濾條件不同的話,建議一次性拿回來全部,然後統一過濾。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-22 09:02:37

    多謝各位大牛的回覆! :)

    如果 redis 不適合這樣的需求,求推薦一款適合的 nosql 例如 mongodb?

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-22 09:02:37

    如果資料經常變動,例如新增、修改、刪除鍵,可以用mongodb,輕鬆又愉快~

    回覆
    0
  • 高洛峰

    高洛峰2017-04-22 09:02:37

    另外建立索引或換mongodb

    回覆
    0
  • 取消回覆