黑马点评点赞
时间: 2025-05-10 21:34:36 浏览: 17
### 黑马点评系统的点赞功能实现
为了实现黑马点评中的点赞功能,可以通过 Redis 的 `Sorted Set` 数据结构来完成。以下是具体的实现方式:
#### 1. 使用 Sorted Set 存储点赞数据
Redis 中的 `Sorted Set` 是一种非常强大的数据结构,它不仅可以存储唯一的成员(member),还可以为每个成员分配一个分数(score)。这使得我们可以利用 `Sorted Set` 来记录用户的点赞行为并按时间或其他条件排序。
当用户对某条笔记进行点赞时,可以将该笔记 ID 和当前时间戳作为键值存入 `Sorted Set` 中。这样既能够保证点赞的唯一性,又可以根据时间戳对点赞记录进行排序[^3]。
```python
import redis
# 初始化 Redis 连接
r = redis.StrictRedis(host='localhost', port=6379, db=0)
def like_note(user_id, note_id):
"""
用户对某个笔记进行点赞的操作。
:param user_id: 点赞用户的ID
:param note_id: 被点赞的笔记ID
"""
timestamp = int(time.time()) # 获取当前时间戳
# 将用户ID和笔记ID组合成唯一的key
key = f"note:{note_id}:likes"
# 添加到 Sorted Set 中,其中 score 为时间戳, member 为用户ID
r.zadd(key, {user_id: timestamp})
```
#### 2. 查询笔记的点赞数
通过查询 `Sorted Set` 的大小即可获取某条笔记的总点赞数量。
```python
def get_like_count(note_id):
"""
获取某条笔记的点赞总数。
:param note_id: 笔记ID
:return: 总点赞数
"""
key = f"note:{note_id}:likes"
return r.zcard(key) # 返回集合中元素的数量
```
#### 3. 查看前 N 名点赞者
如果需要展示最近点赞的用户列表,可以直接从 `Sorted Set` 中提取排名靠前的数据。
```python
def get_top_likers(note_id, top_n=5):
"""
获取某条笔记的TopN点赞用户。
:param note_id: 笔记ID
:param top_n: 需要返回的用户数量,默认为5
:return: TopN点赞者的用户ID列表
"""
key = f"note:{note_id}:likes"
return r.zrevrange(key, 0, top_n - 1) # 按照分值降序排列取前N个
```
#### 4. 处理重复点赞的情况
由于 `Sorted Set` 自动会过滤掉相同的成员,因此无需担心同一个用户多次点赞的问题。每次调用 `zadd` 方法都会更新对应的分数(即时间戳)[^2]。
---
### 注意事项
- 如果遇到错误提示 `WRONGTYPE Operation against a key holding the wrong kind of value`,说明目标 Key 已经存在且其类型不是 `Sorted Set`。此时应先确认 Key 类型是否正确或者清理旧数据后再尝试操作。
- 时间戳的选择非常重要,在实际应用中可能还需要考虑毫秒级精度的时间戳以避免并发写入冲突。
---
阅读全文
相关推荐


















