如何设计高并发点赞系统:基于RedisTemplate的架构实践
一、需求分析与技术选型
典型业务场景
- 每日千万级点赞请求
- 毫秒级响应延迟要求
- 防止用户重复点赞
- 实时展示点赞总数
- 支持查看点赞用户列表
技术选型理由
- Redis:单机10W+ QPS,天然适合计数器场景
- Hash结构:存储用户与内容的点赞关系
- String结构:存储点赞总数
- 异步队列:处理数据库持久化
- 分布式锁:解决并发竞争问题
二、系统架构设计
[客户端]
│
▼
[API网关] → [限流熔断]
│
▼
[点赞服务] ← Redis集群(存储实时数据)
│
▼
[RabbitMQ] → [持久化服务] → MySQL(最终一致性)
│
▼
[监控报警] ← Prometheus+Grafana
三、Redis数据结构设计
核心数据结构
- 点赞关系存储(Hash)
Key:like:{entityType}:{entityId}
Field:userId
Value:timestamp
- 点赞计数器(String)
Key:like_count:{entityType}:{entityId}
Value:Integer
- 用户行为记录(ZSet)
Key:user_like:{userId}
Score:timestamp
Value:{entityType}:{entityId}
四、Spring Boot核心实现代码
1. 依赖配置
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.23.2</version>
</dependency>
# application.properties
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.lettuce.pool.max-active=8
2. 核心服务实现
@Service
public class LikeService {
private final RedisTemplate<String, Object> redisTemplate;
private final RedissonClient redissonClient;
private final RabbitTemplate rabbitTemplate;
// 实体类型常量
private static final String ENTITY_TYPE_POST = &#