PostgreSQLVSMongoDB
PostgreSQL 与 MongoDB 对比
开源关系型数据库的王者 PostgreSQL 与灵活的 NoSQL 文档数据库 MongoDB。该如何根据你的数据模型选择合适的数据库?
多功能的内存数据结构存储
简单快速的分布式缓存
| 分类 | Redis | Memcached |
|---|---|---|
| 性能 | 9/10 | 9/10 |
| 学习难易度 | 7/10 | 10/10 |
| 生态系统 | 10/10 | 5/10 |
| 社区 | 10/10 | 5/10 |
| 就业市场 | 9/10 | 4/10 |
| 面向未来 | 9/10 | 4/10 |
// Redis — 缓存与 pub/sub(Node.js ioredis)
import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL);
// 带 TTL 的缓存
async function getUserCached(userId: string) {
const cached = await redis.get(`user:${userId}`);
if (cached) return JSON.parse(cached);
const user = await db.users.findById(userId);
await redis.setex(`user:${userId}`, 3600, JSON.stringify(user));
return user;
}
// 使用有序集合实现排行榜
await redis.zadd('leaderboard', 1500, 'ali');
await redis.zadd('leaderboard', 2300, 'ayse');
const top10 = await redis.zrevrange('leaderboard', 0, 9, 'WITHSCORES');
// 限流
const key = `rate:${ip}`;
const count = await redis.incr(key);
if (count === 1) await redis.expire(key, 60);
if (count > 100) throw new Error('请求过于频繁');// Memcached — 简单缓存(Node.js memjs)
import Memcached from 'memjs';
const client = Memcached.Client.create(
process.env.MEMCACHIER_SERVERS!,
{
username: process.env.MEMCACHIER_USERNAME,
password: process.env.MEMCACHIER_PASSWORD
}
);
// 数据缓存(TTL:1 小时)
async function getPageCached(path: string) {
const { value } = await client.get(path);
if (value) return value.toString();
const html = await renderPage(path);
await client.set(path, html, { expires: 3600 });
return html;
}
// 清除缓存
await client.delete('home-page');对于新项目,Redis 几乎总是更好的选择——凭借丰富的数据结构、持久化选项和活跃的生态系统,它领先于 Memcached。Memcached 只在已有基础设施投入或需要极其简单、纯粹缓存的系统中才保有价值。
获取免费咨询在简单的 key-value get/set 操作中,二者性能相近。在并行连接负载下,Memcached 的多线程架构会带来优势。在实际应用中,这种差异几乎可以忽略不计。