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.

Cache isn't meant to persist, and something is wrong if you hard depend on it persisting.

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.

If you need persistence on your Redis, then you're not using is as a cache. You're using it as a key-value store.

Not quite - if you have a crash / hard restart, the table is truncated. If Postgres gracefully shuts down, the data is retained.

Cache is not the only solution to the thundering herd.