没太理解 内存炸和多线程不能共享的问题

来源:7-8 从 session 到 redis

Inuyasha__

2019-08-05

cookie会暴露username所以 在cookie中存储userid
让server端对应username 这种解决方案称为 session
session 直接是js变量 在node.js的内存中

问题1:
如果http请求进行访问,进程内存有限。
可是其他的数据 还有一些函数之类的 不是也都在node.js的进程内存中吗
如果是教学中的session 似乎只是一个很小的字符串而已,相比于那些函数来说
其实没有多大意义,老师的意思是 session在实际开发中可能很大
所以才会导致内存炸掉,需要redis吗

问题2:
另外也不是很能理解
多线程不能访问彼此的内存的话,也没事吧
因为http请求发送了cookie (session)
cookie返回是否带有userid 如果有的话,就不再设置userid
那这样对各个线程的node.js来说不是可以共享这个cookie吗?

希望老师解答一下

写回答

2回答

双越

2019-08-05

先回答你题干中的两个问题。

  1. 真正的线上请求,在线用户多了,session 会很大,可能会撑满内存。另外,如果开启多进程,session 存储在各个进程中,进程中数据不能共享。即,你登录时访问的是进程 P1 ,记录了 session ,你下次操作正好访问了进程 P2 ,此时就拿不到这个 session ,因为 session 在 P1 中。

  2. 多进程可以共享 cookie ,但是无法共享 session (除非 sessoin 统一放在 redis 中)。cookie 中 userid 传过来了,但是没有 session 数据,光有 userid 啥也干不了,连用户名是谁都不知道。

1
1
Inuyasha__
非常感谢!
2019-08-05
共1条回复

Inuyasha__

提问者

2019-08-05

好像可以理解session的内存爆炸的问题了,因为每次访问都要经过www.js 这里session的访问频率很高,不过仍有其他js变量存储在www.js中,session很大吗?

0
4
双越
回复
前端小白111
redis 可以设置过期时间,到期会自动释放。如果用 koa 或者 express 链接 redis 的话。redis 会根据 cookie 来自动设置过期时间。
2020-01-16
共4条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4050 学习 · 2006 问题

查看课程