没太理解 内存炸和多线程不能共享的问题
来源: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回答
-
先回答你题干中的两个问题。
真正的线上请求,在线用户多了,session 会很大,可能会撑满内存。另外,如果开启多进程,session 存储在各个进程中,进程中数据不能共享。即,你登录时访问的是进程 P1 ,记录了 session ,你下次操作正好访问了进程 P2 ,此时就拿不到这个 session ,因为 session 在 P1 中。
多进程可以共享 cookie ,但是无法共享 session (除非 sessoin 统一放在 redis 中)。cookie 中 userid 传过来了,但是没有 session 数据,光有 userid 啥也干不了,连用户名是谁都不知道。
112019-08-05 -
Inuyasha__
提问者
2019-08-05
好像可以理解session的内存爆炸的问题了,因为每次访问都要经过www.js 这里session的访问频率很高,不过仍有其他js变量存储在www.js中,session很大吗?
042020-01-16
相似问题
回答 2
回答 2