# Nest_Basic **Repository Path**: qq1256807020/Nest_Basic ## Basic Information - **Project Name**: Nest_Basic - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-23 - **Last Updated**: 2026-01-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Nest+Redis实现排行榜 153关注、被关注,相互关注,用 redis 的 Set 实现的 这种关注、被关注,相互关注,我们每天都能见到。 那它是怎么实现的呢? 一般是用 redis 的 Set 实现的。 Set 是集合,有很多命令: SADD:添加元素 SMEMBERS:查看所有元素 SISMEMBER:某个 key 是否在集合中 SCARD:集合中某个 key 的元素数量 SMOVE:移动元素从一个集合到另一个集合 SDIFF:两个集合的差集 SINTER:两个集合的交集 SUNION:两个集合的并集 SINTERSTORE:两个集合的交集,存入新集合 SUNIONSTORE:两个集合的并集,存入新集合 SDIFFSTORE:两个集合的差集,存入新集合 关注、被关注、互相关注。 在 mysql 里用中间表来存储 user 和 user 的关系,在 TypeORM 里用 @ManyToMany 映射。 互相关注用 redis 的 Set 来实现,先把 user 的 followers 和 following 存储到集合中。 然后把两个集合的交集求出来放入一个新的集合。 这样就能求出互相关注的关系。 当有新的关注或者取消关注时,除了要更新数据库外,也要顺便更新下 redis。 这样,查询互相关注关系的功能就完成了。 一般涉及到排行榜,都是用 Redis 来做,因为它有一个专为排行榜准备的数据结构:有序集合 ZSET。 它有这些命令: ZADD:往集合中添加成员 ZREM:从集合中删除成员 ZCARD:集合中的成员个数 ZSCORE:某个成员的分数 ZINCRBY:增加某个成员的分数 ZRANK:成员在集合中的排名 ZRANGE:打印某个范围内的成员 ZRANGESTORE:某个范围内的成员,放入新集合 ZCOUNT:集合中分数在某个返回的成员个数 ZDIFF:打印两个集合的差集 ZDIFFSTORE:两个集合的差集,放入新集合 ZINTER:打印两个集合的交集 ZINTERSTORE:两个集合的交集,放入新集合 ZINTERCARD:两个集合的交集的成员个数 ZUNION:打印两个集合的并集 ZUNIONSTORE:两个集合的并集,放回新集合 ZADD set1 1 mem1 2 mem2 3 mem3 范围从 0 到 -1 就是返回全部 ZRANGE set1 0 -1 默认是分数从小到大排序,也可以从大到小,加个 REV 就行 ZRANGE set1 0 -1 REV 用 ZRANGESTORE 把它存入新集合: ZRANGESTORE rangeset set1 0 -1 查看下新集合: ZRANGE rangeset 0 -1