Live data from Hacker News

Redis is fast – I'll cache in Postgres

dizzy.zone

11–20 of 311 posts

Re: Redis is fast – I'll cache in Postgres

#11

This isn't a great test setup. It's testing RTT rather than the peak throughput of Redis. I'd suggest using Redis pipelining -- or better: using the excellent rueidis redis client which performs auto-pipelining. Wouldn't be surprising to see a 10x performance boost. https://github.com/redis/rueidis

Postgres also supports query pipelining - at it seems like the popular go Postgres client library pgx supports it: https://github.com/jackc/pgx/issues/1113#event-6964024724

Re: Redis is fast – I'll cache in Postgres

#12
post #7

I think you just convinced me to drop redis for my new project. Definitely a premature optimization on my part.

“Dropping” something from a “new” project is premature optimization? Wherever you go, there you are.

Presumably adding Redis to a new project with no performance issues (yet?) is the premature optimisation.

Re: Redis is fast – I'll cache in Postgres

#13
post #4

When I last benchmarked Redis vs. PostgreSQL for a simple k/v cache it was about ~1ms for PostgreSQL to fetch a key, and ~0.5ms for Redis with a similar setup as in this post (although I used "value bytea" instead of "value string" – I don't know if it matters, probably not; 1ms was fast enough that I didn't care to test). I didn't measure setting keys or req/sec because for my use case keys were updated infrequently…

When you benchmarked Postgres did you disable WAL for the cache table? That may minimize the difference.

Re: Redis is fast – I'll cache in Postgres

#16
post #7

I think you just convinced me to drop redis for my new project. Definitely a premature optimization on my part.

“Premature optimization” typically refers to optimizing before profiling. Ie optimizing in places that won’t help.

Is redis not improving your latency? Is it adding complexity that isn’t worth it? Why bother removing it?

Re: Redis is fast – I'll cache in Postgres

#17
This seems to be testing how the software is optimized for low core deployments… how does Postgres perform vary as you add more cores and ram? It’s the sort of software where I’d presume more cores and ram yields better performance. Assuming as always that mature systems software sees more many core perf engineering.

Re: Redis is fast – I'll cache in Postgres

#18
post #14

If you use an UNLOGGED table in Postgres as a cache, and your DB restarts, you no longer have a cache. Then your main table gets a huge spike in traffic and likely grinds to a halt.

Same as the folks who use in-memory Redis. Is there something uniquely bad about Postgres for this situation?

If your cache is so performance critical that you can't lose the data then it sounds like you need a (denormalized) database.

Re: Redis is fast – I'll cache in Postgres

#19
post #4

When I last benchmarked Redis vs. PostgreSQL for a simple k/v cache it was about ~1ms for PostgreSQL to fetch a key, and ~0.5ms for Redis with a similar setup as in this post (although I used "value bytea" instead of "value string" – I don't know if it matters, probably not; 1ms was fast enough that I didn't care to test). I didn't measure setting keys or req/sec because for my use case keys were updated infrequently…

A difference of 0.5ms is negligible with single digit network latency. You would need significant batching to experience the effects of this difference.

Of course such sensitive environments are easily imaginable but I wonder why you'd select either in that case.

Re: Redis is fast – I'll cache in Postgres

#20
post #4

When I last benchmarked Redis vs. PostgreSQL for a simple k/v cache it was about ~1ms for PostgreSQL to fetch a key, and ~0.5ms for Redis with a similar setup as in this post (although I used "value bytea" instead of "value string" – I don't know if it matters, probably not; 1ms was fast enough that I didn't care to test). I didn't measure setting keys or req/sec because for my use case keys were updated infrequently…

When you benchmarked Postgres did you disable WAL for the cache table? That may minimize the difference.

Unlogged table, yes. 1ms is more than fast enough so I didn't bother to look further.
Post reply on HN