一、前言

登录功能一般都是有 约定俗成的方法 的。

在这里我们使用 session 的方式 去实现登录功能!

二、cookie、session、redis

1、cookie

  • 存储在浏览器的一段字符串(最大 4kb)
  • 跨域不共享
  • 格式如 k1=v1;k2=v2;k3=v3; 因此可以存储结构化数据
  • 每次发送 http 请求,会将请求域的 cookie 一起发送给 server
  • server 可以修改 cookie 并返回给浏览器
  • 浏览器中也可以通过 JavaScript 修改 cookie(有限制)

2、session

  • 单独使用 cookie 会暴露 username,很危险
  • 如何解决:cookie 中存储 userid,server 端对应 username
  • 解决方案:session,即 server 端存储用户信息

在这里插入图片描述

3、redis

  • web server 最常用的缓存数据库,数据存放在内存中
  • 相比于 mysql,访问速度快(内存和硬盘不是一个数量级的)
  • 但成本更高,可存储的数据量更小(内存的硬伤)
  • 将 web server 和 redis 拆分为两个单独的服务
  • 双方都是独立的,都是可扩展的(例如都扩展成集群)
  • (包括 mysql,也是一个单独的服务,也可扩展)

在这里插入图片描述

4、为什么 session 适合用 redis?

  • session 访问频繁,对性能要求极高
  • session 可不考虑断电丢失数据的问题(内存的硬伤)
  • session 数据量不会很大(相对于 mysql 中存储的数据)

5、为何网站数据不适合用 redis?

  • 操作频率不是太高(相比于 session 操作)
  • 断电不能丢失,必须保留
  • 数据量太大,内存成本太高

三、安装 redis

安装 redis 参考链接

有以下内容输出,即安装成功:

在这里插入图片描述

blog.csdnimg.cn/c9759ae9b1524ba88c49ffab17264cbe.png)

四、nodejs 连接 redis 的测试

创建 redis-test 文件夹,控制台输入 npm init -y 进行初始化,并创建 index.js 文件

在这里插入图片描述

安装 redis

npm i redis

index.js 文件

  • 导入 redis 模块
  • 创建客户端并连接(端口号,服务端地址)
  • 退出
const redis = require('redis')

!(async function () {
    // 创建客户端
    const redisClient = redis.createClient(6379, '127.0.0.1')

    // 连接
    await redisClient.connect()
        .then(() => console.log('redis connect success!'))
        .catch(console.error)
        
    // set
    await redisClient.set('myname', 'zahuopu')
    
    // get
    const myname = await redisClient.get('myname')
    console.log('myname', myname)
    
    // 退出
    redisClient.quit()
})()

开启 redis 服务,终端运行文件:

在这里插入图片描述

五、写在最后

至此,我们明白了为什么要把 session 存入 redis,并对 redis 做了连接的测试。继续跟进学习吧!