项目技术点(1)

全文检索

  • ​ 全文检索技术成为快速获取有效信息的核心支撑,而索引机制的设计是决定检索效率的关键因素。倒排索引凭借其关键字到文档的直接映射关系,在大规模数据检索中展现出显著优势。具体来说,当系统构建倒排索引时,会对所有文档中的关键字进行提取和归类,为每个关键字建立对应的文档列表。
  • ​ 例如在包含 “月” 字的文档检索场景中,索引会清晰记录 “月 -- 文档 1、月 -- 文档 2、月 -- 文档 3” 的映射关系,当用户发起查询请求时,系统无需遍历所有文档,只需通过关键字 “月” 直接定位到关联的文档列表,整个过程毫秒级完成,彻底摆脱了传统遍历方式的效率瓶颈。这种机制特别适用于电商平台商品搜索、新闻资讯聚合、学术论文检索等需要处理海量数据的场景,能够在短时间内响应用户的查询需求。

项目使用 Elasticsearch 实现全文检索功能,具体实现如下:

  • SearchController: 提供统一的搜索接口,支持按类型搜索(攻略、游记、用户、问答、全部)
  • SearchServiceImpl: 实现高亮搜索逻辑,使用 ElasticsearchRestTemplate 进行ES查询
  • ES实体类: 定义了多个ES文档类型:
  • StrategyEs: 攻略搜索(title, subTitle, summary)
  • NoteEs: 游记搜索(title, summary)
  • UserInfoEs: 用户搜索(nickname, info, city)
  • DestinationEs: 目的地搜索(name, info)

技术特点:

  • 使用 IK分词器 (ik_max_word) 进行中文分词
  • 支持 高亮显示 搜索结果
  • 通过 RabbitMQ 实现数据同步,当MySQL数据变更时自动更新ES索引
  • 采用 混合查询 模式:ES负责搜索,MySQL负责获取完整数据

高并发统计数字(浏览量 评论量……)

项目使用 Redis 实现高并发统计,具体实现如下:
核心机制:

  • Redis Hash结构: 使用 strategy_statis_hash:{id} 存储每个攻略的统计数据
  • 原子操作: 使用 incrementCacheMapValue 进行原子递增操作
  • 定时持久化: 定期将Redis统计数据同步到MySQL

统计指标:

  • 浏览量 (viewnum): 每次访问+1
  • 评论量 (replynum): 每次评论+1
  • 收藏量 (favornum): 收藏/取消收藏时±1
  • 点赞量 (thumbsupnum): 点赞时+1
  • 分享量 (sharenum): 分享时+1

实现细节:

  • Apply

防刷机制:

  • 点赞限制: 每个用户每天最多点赞5次
  • IP限流: 使用Redis实现访问频率控制

采用了Redis 的 Hash 数据结构和原子操作。将点赞、收藏、转发等不同类型的统计数据拆分为独立的 Hash 键,每个 Hash 键中的字段对应具体的统计项。当需要更新数据时,直接调用 Redis 提供的 INCR 命令对 Hash 字段进行自增操作。Redis 的 INCR 命令是原子性的,即整个操作过程不会被其他线程打断,即使在高并发场景下,多个线程同时发起的更新请求也会被 Redis 按顺序逐个处理,确保每个操作都能准确反映到最终结果中。这种设计不仅彻底解决了数据一致性问题,还凭借 Redis 内存操作的高效性,能够轻松支撑每秒数万次的高频读写请求,同时保证统计数据的实时性和准确性。

jwt

项目使用 JWT + Redis 实现身份认证,具体实现如下:
核心组件:

  • JwtUtils: JWT工具类,负责token的创建、解析和验证
  • TokenService: 管理用户登录状态和token生命周期
  • AuthFilter: 网关层过滤器,验证请求token

JWT结构:

  • Apply

认证流程:

  • 登录: 用户登录成功后,生成JWT token并存储到Redis
  • 请求验证: 网关过滤器解析JWT,验证用户身份
  • 状态检查: 检查Redis中是否存在有效的登录状态
  • 信息传递: 将用户信息添加到请求头中传递给下游服务

实现细节:

  • Apply

安全特性:

  • HS512算法: 使用强加密算法签名
  • Redis存储: token状态存储在Redis中,支持快速失效
  • 网关统一认证: 在网关层统一处理认证逻辑
  • 内部服务通信: 支持服务间内部调用认证

在这一机制中,Redis 扮演了关键角色,不仅用于存储 RefreshToken 的状态信息,还支持通过设置过期时间实现自动失效,同时可以根据用户的活跃情况动态延长 RefreshToken 的有效期,进一步优化用户体验。

posted @ 2025-08-12 21:52  Charon-YC  阅读(16)  评论(0)    收藏  举报