# 从 Session 到 Redis

# Session 的短板

session 属于 js 变量,它存放在 nodejs 进程内存中

  • 当内存有限,访问量过大,内存保证了会对 session 的存储有影响
  • 上线后如果是多进程,但是进程之间的内存是无法共享的

# Redis

  • web server 常用的缓存数据库,数据存放在内存中,读写特别快
  • 相比 mysql 访问速度更快,毕竟 mysql 属于硬盘数据库,内存和硬盘的访问速度不是一个数量级别的
  • 个人理解:
    • nodejs 的运行,可以想象成一个进程的工作。每个进程开始时,都会分配一定的运行内存。像 nodejs,在 64 位中的内存大概不超过 3G。而 session 的写法,相当于将 session 的存储和 nodejs 的运行程序放在了一块内存中。而随着 session 的不断增大,必然会带来内存溢出等问题。
    • 而 redis 相当于重新起了一个存储服务。虽然数据都是存储在内存中,但存储的内存和 nodejs 的运行内存并不在一起,而是一个独立的进程。进程与进程之间的内存是不共享的。后期可以分离开单独进行扩容等维护。这也是分层处理的一种思想吧

An image

# Redis 的安装

  • 安装 1 Mac 的安装,通过 brew install redis 安装时,需要通过 brew search redis 查询能安装的 redis 版本。按查询结果能直接安装 redis,但是我只安装成功了 redis@4 版本。但是安装后,redis-server 指令一直没有配置成功,就放弃了 ू(ʚ̴̶̷́ .̠ ʚ̴̶̷̥̀ ू)...

An image

  • 安装 2:通过 tar 包安装
    • 下载压缩包后,在 /usr/local/ 中进行解压 tar xzf redis-6.2.6.tar.gz
    • cd /usr/local/redis-6.2.6.tar.gz 进入 redis 文件夹下,执行make 安装
    • 安装后执行 make install, 基本安装结束,配置都才用了默认配置
    • 中间碰到了没有权限的问题,通过 sudo即可

An image

# Redis 使用

  • redis-server 就可以启动 redis 服务,服务启动后,如图:

An image

  • redis-cli 就开启了 redis 的客户端链接,redis 的指令如下:
    • set key value 设置 key = value
    • get key 获取 key 的存储
    • keys * 获取全部的存储
    • del key 删除 key

An image