- 仅记录用户ID并统计实时参与人数:
- 数据结构选型:使用Redis的Set数据结构。
- 理由:Set数据结构具有自动去重的特性,非常适合用于记录唯一的用户ID,防止重复参与。同时,可以使用
SCARD
命令获取Set中元素的数量,即实时参与人数。例如,在Java中使用Jedis客户端:
Jedis jedis = new Jedis("localhost");
jedis.sadd("seckill_users", "user1_id");
jedis.sadd("seckill_users", "user2_id");
Long count = jedis.scard("seckill_users");
System.out.println("实时参与人数: " + count);
- 同时记录用户的参与时间:
- 数据结构选型:使用Redis的Sorted Set数据结构。
- 理由:Sorted Set可以为每个成员(用户ID)关联一个分数(参与时间的时间戳)。这样既可以利用Set的去重特性防止重复参与,又能通过分数记录用户的参与时间。对于读取操作,可以根据分数范围获取在特定时间范围内参与的用户。写入时,使用
ZADD
命令将用户ID和当前时间戳(作为分数)添加到Sorted Set中。例如,在Python中使用redis - py客户端:
import redis
import time
r = redis.Redis(host='localhost', port=6379, db = 0)
user_id = 'user3_id'
timestamp = time.time()
r.zadd('seckill_users_with_time', {user_id: timestamp})
- 读取操作示例:获取所有用户及其参与时间(按参与时间排序),在Python中:
users_with_time = r.zrange('seckill_users_with_time', 0, -1, withscores=True)
for user, timestamp in users_with_time:
print(f"用户 {user.decode('utf - 8')} 参与时间: {timestamp}")