Redis 集合(Set)
SADD | 向集合中添加一个或多个成员 | SADD key member1 [member2 ...] |
SMEMBERS | 返回集合中的所有成员 | SMEMBERS key |
SINTER | 返回多个集合的交集 | SINTER key1 [key2 ...] |
SINTERSTORE | 将多个集合的交集存储到一个新集合中 | SINTERSTORE destination key1 [key2 ...] |
SUNION | 返回多个集合的并集 | SUNION key1 [key2 ...] |
SUNIONSTORE | 将多个集合的并集存储到一个新集合中 | SUNIONSTORE destination key1 [key2 ...] |
SDIFF | 返回第一个集合与其他集合的差集 | SDIFF key1 [key2 ...] |
SDIFFSTORE | 将第一个集合与其他集合的差集存储到一个新集合中 | SDIFFSTORE destination key1 [key2 ...] |
SISMEMBER | 判断成员是否是集合的成员 | SISMEMBER key member |
SCARD | 获取集合中成员的数量 | SCARD key |
SPOP | 随机移除并返回集合中的一个成员 | SPOP key [count] - count (可选):指定移除并返回的成员数量 |
SRANDMEMBER | 随机返回集合中的一个或多个成员,不删除成员 | SRANDMEMBER key [count] - count (可选):指定返回的成员数量。正数表示返回不重复的成员,负数表示返回可能重复的成员 |
SREM | 从集合中移除一个或多个成员 | SREM key member1 [member2 ...] |
场景示例
1. 去重
假设我们要统计网站的独立访客 IP 地址,使用集合可以轻松实现去重。
记录访客 IP(Java 代码示例):
import redis.clients.jedis.Jedis;
public class VisitorRecorder {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String visitorSetKey = "website:visitors";
String visitorIp = "192.168.1.100";
// 向集合中添加访客 IP
jedis.sadd(visitorSetKey, visitorIp);
System.out.println("记录访客 IP: " + visitorIp);
jedis.close();
}
}
统计独立访客数量(Java 代码示例):
import redis.clients.jedis.Jedis;
public class VisitorCounter {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String visitorSetKey = "website:visitors";
// 获取独立访客数量
Long uniqueVisitorCount = jedis.scard(visitorSetKey);
System.out.println("独立访客数量: " + uniqueVisitorCount);
jedis.close();
}
}
2. 共同好友
假设有两个用户,我们要找出他们的共同好友。
添加用户好友(Java 代码示例):
import redis.clients.jedis.Jedis;
public class FriendAdder {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String user1FriendsKey = "user:1:friends";
String user2FriendsKey = "user:2:friends";
// 添加用户 1 的好友
jedis.sadd(user1FriendsKey, "Alice", "Bob", "Charlie");
// 添加用户 2 的好友
jedis.sadd(user2FriendsKey, "Bob", "Charlie", "David");
jedis.close();
}
}
找出共同好友(Java 代码示例):
import redis.clients.jedis.Jedis;
import java.util.Set;
public class CommonFriendFinder {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String user1FriendsKey = "user:1:friends";
String user2FriendsKey = "user:2:friends";
// 获取两个用户的共同好友
Set<String> commonFriends = jedis.sinter(user1FriendsKey, user2FriendsKey);
System.out.println("共同好友: " + commonFriends);
jedis.close();
}
}
3. 点赞列表
假设我们要记录一篇文章的点赞用户,并实现一些相关功能,如判断用户是否点赞、获取点赞用户数量等。
用户点赞文章(Java 代码示例):
import redis.clients.jedis.Jedis;
public class Liker {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String articleLikesKey = "article:1:likes";
String userId = "user:101";
// 用户点赞文章
jedis.sadd(articleLikesKey, userId);
System.out.println("用户 " + userId + " 点赞了文章");
jedis.close();
}
}
判断用户是否点赞(Java 代码示例):
import redis.clients.jedis.Jedis;
public class LikeChecker {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String articleLikesKey = "article:1:likes";
String userId = "user:101";
// 判断用户是否点赞
boolean isLiked = jedis.sismember(articleLikesKey, userId);
if (isLiked) {
System.out.println("用户 " + userId + " 已点赞文章");
} else {
System.out.println("用户 " + userId + " 未点赞文章");
}
jedis.close();
}
}
获取点赞用户数量(Java 代码示例):
import redis.clients.jedis.Jedis;
public class LikeCounter {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
String articleLikesKey = "article:1:likes";
// 获取点赞用户数量
Long likeCount = jedis.scard(articleLikesKey);
System.out.println("点赞用户数量: " + likeCount);
jedis.close();
}
}
#我的2024牛客高光时刻##牛客创作赏金赛#