【发布时间】:2019-06-08 18:10:44
【问题描述】:
为了更好的分页性能,而不是在 postgresql 中这样做:
SELECT * FROM message ORDER BY created_at DESC limit 30 offset 30;
我可以将 ID 存储在 redis 排序集中,然后简单地通过以下方式从 redis 获取 ID:
ZREVRANGE message_ids 30 39
然后在 postgresql 中查询这些 ID 以获取值。
我之所以不直接将 value 存储在 Redis 中是因为 value 可能很大而且 RAM 很昂贵。 (我没有足够的内存)。
如果推荐或可以这样做以提高性能,我如何才能通过 ID 正确查询 postgresql 中的值?
我找到了以下方法,但不确定这是否是最好的方法:
SELECT m.*
FROM unnest('{17579, 17580, 17582}'::int[]) id
JOIN message m USING (id);
或者简单地说:
SELECT * FROM message WHERE id IN (17579, 17580, 17582);
以上查询来自这个link
顺便说一句,我也不确定上述命令是否会根据 id 列表的顺序给我正确的顺序,以及我最后是否需要ORDER BY id。
综上,这个redis+postgresql方案会不会比只有postgresql方案快很多?
【问题讨论】:
标签: postgresql redis