- Published on
面试 Web 后端
- Authors
- Name
- Shelton Ma
web后端
1. 使用redis做缓存的功能
Redis 缓存的工作原理:
- 缓存命中(Cache Hit):当请求的数据存在于 Redis 中时,就直接返回 Redis 的缓存数据,这样就能避免去数据库查询,提高响应速度。
- 缓存未命中(Cache Miss):当请求的数据不在 Redis 中时,系统会查询数据库获取数据,并将数据存入 Redis,以便下次访问时能够命中缓存。
- 缓存失效(Cache Expiration):缓存中的数据设置了过期时间,到了过期时间后,数据就会从 Redis 中删除。这个机制可以有效避免缓存的“脏数据”问题。
关键点
- 缓存过期:通过 setex 方法可以为缓存设置过期时间,防止缓存数据长期存在导致不一致。
- 缓存穿透:如果查询的内容非常频繁,缓存的数据被清除后,可能会导致数据库压力增大。可以通过布隆过滤器等方式来避免缓存穿透。
- 缓存雪崩:如果大量缓存数据在同一时刻过期,可能导致数据库压力增大。可以通过随机设置过期时间来分散过期时间,减少瞬间压力。
2. 消息队列
Redis 和 RabbitMQ 都是常见的消息中间件,但它们的设计目标、功能和适用场景有所不同。下面是它们的对比分析:
- redis 主要用于高速读写、数据缓存、实时数据处理、临时存储等场景。
- RabbitMQ 主要用于高可靠性、消息队列、事件驱动架构、任务调度等场景。
特性 | Redis | RabbitMQ |
---|---|---|
设计目标 | 高速缓存、临时数据存储、Pub/Sub | 消息队列、任务调度、异步消息传递 |
消息持久化 | 不持久化(默认),可以持久化数据 | 支持消息持久化,确保消息不丢失 |
消息确认 | 不支持消息确认 | 支持消息确认(ACK) |
性能 | 极高的性能,低延迟,高吞吐量 | 性能较低,但高可靠性 |
可靠性 | 消息丢失风险大 | 消息可靠性高,支持消息重试和确认 |
适用场景 | 高并发、实时数据、缓存、Pub/Sub | 任务调度、异步处理、事件驱动架构 |
扩展性 | 支持水平扩展(Redis Cluster) | 支持集群模式和高可用队列 |
3. 关系型数据库与非关系型数据库
非关系型数据库: 数据结构灵活(如爬虫数据), 简单数据查询, 不涉及复杂查询和连接操作
4. JWT(JSON Web Token)
JWT(JSON Web Token)包含三部分:
头部(Header)
头部通常由两部分组成:
alg:签名算法,常见的有HS256、RS256等。
typ:令牌类型,通常是JWT。
{ "alg": "HS256", "typ": "JWT" }
载荷(Payload)
签名(Signature)签名部分用于验证令牌的完整性以及身份验证。签名是使用头部中的alg指定的算法,通过对头部和载荷进行编码,并与密钥一起计算得到的。其目的是确保JWT在传输过程中未被篡改。
5. JWT 和 Session 存储的方式和机制
简而言之:
- JWT 存储在客户端,是无状态的,适合于分布式、无状态的应用。
- Session 存储在服务器端,是有状态的,适合于单一应用或需要维护会话的场景。