当前位置: 首页 > news >正文

缓存机制:Redis集成

引言:Redis——高速缓存的内存引擎

欢迎继续《Node.js 服务端开发》专栏的第四个模块:《数据库集成》!在上篇文章《数据查询优化技巧》中,我们深入探讨了索引设计、MongoDB aggregate聚合查询的性能调优,以及SQL JOIN操作的优化技巧,帮助你从慢查询转向高效响应。现在,让我们转向缓存机制:集成Redis作为内存数据库。这不仅仅是加速数据访问,更是构建高性能应用的战略武器,通过String/Hash/List等数据结构,实现如session缓存的实践,减少数据库负载,提高吞吐量。

随着Node.js Current版本25.0.0的成熟(于2025年10月15日发布,由@targos等贡献)和LTS版本22.21.0 'Jod’的稳定支持,Redis的最新版本8.0(于2025年10月25日发布)和Node.js客户端ioredis 3.2.5(于2025年10月26日左右发布)提供了更强劲的性能,如Redis 8.0的RESP3协议和ioredis的异步管道优化。 Redis 8.0引入了更快的Lua脚本执行,而ioredis 3.2.5优化了集群支持。 这篇文章将深入Redis客户端的安装、String/Hash/List操作,以及Node.js中的session缓存示例。我们将结合历史演进、代码示例、性能分析和2025年的最佳实践(如Lua脚本和集群模式),提供深度洞见,适合零基础读者。

Redis的历史源于2009年,由Salvatore Sanfilippo创建,作为内存键值存储,2010年发布1.0版。 ioredis于2014年由Lu Yichun创建,作为高性能客户端,支持管道和集群。 为什么Redis?它亚毫秒延迟、多数据结构和持久化,适合缓存、队列和实时分析。 在2025年,Redis 8.0的RESP3协议和ioredis的版本支持,让它在云原生环境中闪耀。 准备好你的Node环境,让我们从Redis客户端安装开始,实践session缓存。

Redis客户端安装:从本地到云部署

Redis安装灵活,支持本地、Docker和云服务如AWS ElastiCache。

本地安装跨平台

  • Windows:下载MSI从redis.io,选8.0。运行redis-server.exe启动。
  • macOS:brew install redis@8.0,brew services start redis。
  • Linux:apt/yum install redis-server=8.0,systemctl start redis。

代码连接(使用ioredis):

const Redis = require('ioredis');
const redis = new Redis({host: 'localhost',port: 6379,password: 'yourpass'  // 如果设置
});redis.on('error', (err) => console.error('Redis Error', err));
redis.on('connect', () => console.log('Redis Connected'));

深度剖析:ioredis支持集群/哨兵,优于node-redis。 历史:Redis v1键值,v8.0添加模块API。 性能:本地延迟<1ms。误区:默认无密码易攻。

最佳实践:用Docker:docker run -d -p 6379:6379 redis:8.0。 云:Atlas Redis免管理。

String/Hash/List操作:Redis数据结构的实践

Redis支持多结构,String简单键值,Hash对象,List队列。

String操作

String存储字符串/数字/二进制。

代码:

await redis.set('key', 'value', 'EX', 3600);  // 过期1小时
const value = await redis.get('key');
console.log(value);
await redis.del('key');

深度:SET/GET原子,EX设置TTL。 性能:O(1)访问。误区:大String耗内存,用压缩。

Hash操作

Hash存储对象,如用户数据。

代码:

await redis.hset('user:1', 'name', 'Alice', 'age', 30);
const name = await redis.hget('user:1', 'name');
const all = await redis.hgetall('user:1');
console.log(all);  // { name: 'Alice', age: '30' }
await redis.hdel('user:1', 'age');

深度:HSET/HGET O(1),适合session。 性能:比多个String省内存。

List操作

List双端队列,支持推送/弹出。

代码:

await redis.lpush('queue', 'task1', 'task2');  // 左推
const task = await redis.rpop('queue');  // 右弹出
console.log(task);  // 'task1'
const length = await redis.llen('queue');

深度:LPUSH/RPOP O(1),适合任务队列。 性能:BRPOP阻塞弹出。

最佳实践:用管道批操作,如redis.pipeline().set(…).get(…) .exec()。 2025年,ioredis 3.2.5的管道支持RESP3更快。

Node.js中的session缓存示例:实践Redis集成

session缓存用Redis存储用户状态,避数据库查询。

安装connect-redis:npm install connect-redis@7.1.1 express-session

app.js:

const session = require('express-session');
const RedisStore = require('connect-redis').default;
const redis = new Redis();app.use(session({store: new RedisStore({ client: redis }),secret: 'secret',resave: false,saveUninitialized: false,cookie: { maxAge: 3600000 }  // 1小时
}));app.get('/login', (req, res) => {req.session.user = { id: 1, name: 'Alice' };res.send('Logged in');
});app.get('/profile', (req, res) => {if (!req.session.user) return res.status(401).send('Unauthorized');res.json(req.session.user);
});

深度剖析:RedisStore用Hash存储session,TTL自动过期。 性能:Redis session读<1ms,数据库10ms+。 误区:resave true增写操作。

最佳实践:集群用sticky sessions或共享Redis。 2025年,connect-redis 7.1.1支持RESP3。

结语:Redis,缓存的王者

通过Redis 8.0客户端安装、String/Hash/List操作和session缓存,你已掌握缓存集成。 从2009起源,到2025的优化,它让Node.js应用更快。

http://www.dtcms.com/a/573084.html

相关文章:

  • 做网站要先申请域名吗搭建网站的英语
  • 优思学院|什么是5M1E?它是如何影响产品质量的?
  • 技术赋能生态保护:无人机RTMP推流平台EasyDSS在野生动植物监测中的应用实践
  • 大模型应用技术之提示词工程面试题(二)
  • 对比传统方法和深度学习方法在MATLAB视觉检测中的优缺点
  • 从容器化到自动化:Vue3 项目 Docker 部署与 GitLab CI/CD 集成 Harbor 全流程
  • 企业网站Wap在线生成格力网站建设首页
  • Hibernate 速览指南
  • 凡科网站建设步骤企业年金查询
  • AssertJ,让断言更流畅的Java测试库!
  • C++:大型语言模型与智能系统底座的隐形引擎
  • 你好,未来:零基础看懂大语言模型
  • Spring Boot 多线程文件复制服务(支持大文件流式/NIO复制、失败重试、覆盖写入)
  • 当视觉语言模型接收到相互矛盾的信息时,它会相信哪个信号?
  • 软考中级习题与解答——UML中主要关系
  • 公司做网站属于什么费用wordpress 加入页面
  • 以太网帧格式、IP数据报头部、TCP头部、UDP头部
  • CRMEB标准版小票打印功能详解
  • Java开发性能优化
  • 传输层最重要的两种协议——UDP与TCP的区别(TCP可靠但是慢,UDP不可靠但是快)
  • list(带头双向循环链表)
  • Linux的例行工作
  • Java List全面解析:从入门到精通
  • 英文网站如何做关键词怎样免费注册自己网站的域名
  • Win11卸载重装oracle 11g数据库
  • 模拟电路-工程实践-磁珠的使用方法
  • verilog中数据类型real
  • 如何选择适合的单北斗GNSS变形监测解决方案?
  • 使用vue获取url上的参数
  • kuwa_technology