Postgres 可以替代 Redis 作为缓存吗?
近期,一篇名为“Postgres 可以替代 Redis 作为缓存吗?”的文章在Medium迅速出圈,这一新颖的话题,似乎能带来不少实际项目的启示,下面跟随着作者Raphael De Lio来解读这一疑问。
但首先,我为什么要用 Postgres 替换 Redis?
我们对缓存服务有怎样的目标?
怎样才能将 Postgres 变成缓存?
CREATE UNLOGGED TABLE cache (id serial PRIMARY KEY,key text UNIQUE NOT NULL,value jsonb,inserted_at timestamp);CREATE INDEX idx_cache_key ON cache (key);
CREATE OR REPLACE PROCEDURE expire_rows (retention_period INTERVAL) AS$$BEGINDELETE FROM cacheWHERE inserted_at < NOW() - retention_period;COMMIT;END;$$ LANGUAGE plpgsql;CALL expire_rows('60 minutes'); -- This will remove rows older than 1 hour
-- Create a schedule to run the procedure every hourSELECT cron.schedule('0 * * * *', $$CALL expire_rows('1 hour');$$);-- List all scheduled jobsSELECT * FROM cron.job;
CREATE OR REPLACE PROCEDURE lru_eviction(eviction_count INTEGER) AS$$BEGINDELETE FROM cacheWHERE ctid IN (SELECT ctidFROM cacheORDER BY last_read_timestamp ASCLIMIT eviction_count);COMMIT;END;$$ LANGUAGE plpgsql;-- Call the procedure to evict a specified number of rowsCALL lru_eviction(10); -- This will remove the 10 least recently accessed rows
性能表现如何?
未记录表
记录表
未记录表
记录表
读取
写入
读取
我应该用 Postgres 替换 Redis 吗?
作者丨Raphael De Lio编译丨Rio