Web进阶

身份认证

当我们在使用互联网时,经常会遇到一些需要身份验证或者保持用户状态的情况。为了实现这些功能,常用的方法有使用cookie、session和token。

  1. Cookie(HTTP Cookie):
    Cookie是服务器发送到用户浏览器并保存在用户本地的一小段数据。它通常用于记录用户的身份认证、浏览历史、购物车信息等。当用户访问同一个网站时,浏览器会将相应的Cookie信息发送给服务器,以便服务器识别用户并提供个性化的服务。Cookie可以设置过期时间,可以是会话级别的(浏览器关闭后失效)或者长期有效的。

  2. Session(会话):
    Session是服务器端存储用户信息的一种机制。当用户第一次访问网站时,服务器会为该用户创建一个唯一的会话ID,并将该ID存储在服务器上。然后,服务器将该会话ID发送给用户的浏览器,通常通过Cookie的形式。用户的每次请求都会携带该会话ID,服务器通过该ID来识别用户并获取相应的会话数据。Session通常存储在服务器的内存或者数据库中,可以存储更多的用户信息。

  3. Token(令牌):
    Token是一种用于身份验证和授权的令牌。当用户登录成功后,服务器会生成一个Token并返回给客户端。客户端在后续的请求中携带该Token,服务器通过验证Token的有效性来识别用户身份。Token通常是加密的,包含了用户的一些信息,如用户ID、权限等。token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。

总结:

1、Cookie是存储在用户浏览器中的数据,用于记录用户信息;

2、 Session是存储在服务器端的用户信息,通过会话ID进行识别;

3、Token是一种用于身份验证和授权的令牌:

  • 不需要在服务器端存储用户信息, 可以减小服务器压力。
  • 每次都是通过解密来验证是否合法, 更安全
  • 每次都是一个无状态的请求,即时有多台服务器,服务器也只是做了token的解密和用户数据的查询,它不需要在服务端去保留用户的认证信息或者会话信息,这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,解决了session扩展性的弊端。

中间件

redis最常见的5种应用场景

缓存(Cache)

Redis的第一个应用场景是Redis作为缓存对象来加速Web应用的访问。

Web进阶_第1张图片
在该场景下,有一些存储于数据库中的数据会被频繁访问,如果频繁的访问数据库,数据库负载会升高,同时由于数据库IO比较慢,应用程序的响应会比较差。此时,如果引入Redis来存储这些被频繁访问的数据,就可以有效的降低数据库的负载,同时提高应用程序的请求响应

会话存储(Session)

使用Redis来存储会话(Session)数据,可以实现在无状态的服务器之间共享用户相关的状态数据数据。

当用户登录Web应用时候,将会话数据存储于Redis,并将唯一的会话ID(Session ID)返回到客户端的Cookie中。当用户再向应用发送请求时,会将此会话ID包含在请求中。无状态的Web服务器,根据这个会话ID从Redis中搜索相关的会话数据来进一步请求处理。

这里需要注意的是,Redis是内存数据库,如果采用单实例部署。那么当Redis服务器故障重启之后,所有的Session会话会消失,用户不得不重新登录来获取新的Session。所以,当拿Redis来存储Session的时候,建议采用主从的集群模式来部署。这样,即使主服务器挂了,马上有从库接管流量,不影响用户的使用。

分布式锁(Distributed Lock)

当我们在应用中部署了多个节点,这些节点需要操作同一个资源的时候会存在竞争。此时,我们可以使用Redis来作为分布式锁,以协调多个节点对共享资源的操作。

速率限制器(Rate Limiter)

由于Redis提供了计数器功能,所以我们可以通过该能力,配合超时时间,来实现速率限制器,最常见的场景就是服务端是用的请求限流。

一个基本的限速实现如下图:

Web进阶_第2张图片

根据用户id或者ip来作为key,使用INCR命令来记录用户的请求数量。然后将该请求数量与允许的请求上限数量做比较,只有低于限制的时候,才会执行请求处理。如果超过限制,就拒绝请求。

同时,请求数量的计数器需要设置一个时间窗口,比如:1分钟。也就是没过一分钟时间,计数器将被清零,重新计数。所以,当一个时间窗口中被限流之后,等到下一个时间窗口,就能恢复继续请求。以实现限制速率的效果。除了时间窗算法之外,漏桶算法也能通过Redis来实现。

排行榜(Rank/Leaderboard)

由于Redis提供了排序集合(Sorted Sets)的功能,所以很多游戏应用采用Redis来实现各种排行榜功能。
排序集合是唯一元素(比如:用户id)的集合,每个元素按分数排序,这样可以快速的按分数来检索元素

Web进阶_第3张图片

Redis的应用非常广泛,这里仅总结了一些常见的用法。除此之外,还有很多有意思的应用,这取决于业务场景

Web进阶_第4张图片

参考:https://www.didispace.com/youtube/20231003-redis-top-5-case.html

你可能感兴趣的:(JAVA进阶,云计算虚拟化,前端)