Set 的一些案例
1607字约5分钟
2024-08-10
网站每日 UV 数据指标去重统计
/**
* 添加一次用户访问记录
*/
public void addUserAcess(long userId) {
jedis.sadd("user_access_set_20210829", String.valueOf(userId));
}
/**
* 获取当天的网站 UV 值
*/
public long getUV() {
return jedis.scard("user_access_set_20210829");
}
朋友圈点赞
/**
* @ClassName MomentDemo
* @Desciption 朋友圈点赞
* @Author MaRui
* @Date 2021/8/29 22:40
* @Version 1.0
*/
public class MomentDemo {
private static Jedis jedis = new Jedis("127.0.0.1", 6379);
public static void main(String[] args) {
MomentDemo demo = new MomentDemo();
// 你的用户 id
long userId = 1;
// 你朋友圈的 id
long momentId = 100;
// 你朋友 1 的用户 id
long friendId = 2;
// 你朋友 2 的用户 id
long otherFriendId = 3;
// 你的朋友 1 对你的朋友圈进行点赞,再取消点赞
demo.likeMoment(friendId, momentId);
demo.dislikeMoment(friendId, momentId);
boolean hasLikeMoment = demo.hasLikeMoment(friendId, momentId);
System.out.println("朋友 1 刷朋友圈,看到是否对你的朋友圈点赞过:" + hasLikeMoment);
// 你的朋友 2 对你的朋友圈进行点赞
demo.likeMoment(otherFriendId, momentId);
hasLikeMoment = demo.hasLikeMoment(otherFriendId, momentId);
System.out.println("朋友 2 刷朋友圈,看到是否对你的朋友圈点赞过:" + hasLikeMoment);
// 自己刷朋友圈,看自己的朋友圈点在情况
Set<String> momentLikeUsers = demo.getMomentLikeUsers(momentId);
long momentLikeUsersCount = demo.getMomentLikeUsersCount(momentId);
System.out.println("你自己刷朋友圈,看到自己发的朋友圈被 " + momentLikeUsersCount + "点赞,点赞的用户为:" + momentLikeUsers.toString());
}
/**
* 对朋友圈进行点赞
*/
public void likeMoment(long userId, long momentId) {
jedis.sadd("moment_like_users::" + momentId, String.valueOf(userId));
}
/**
* 对朋友圈取消点赞
* @param userId
* @param momentId
*/
public void dislikeMoment(long userId, long momentId) {
jedis.srem("moment_like_users::" + momentId, String.valueOf(userId));
}
/**
* 查看自己是否对某条朋友圈点赞过
* @param userId
* @param momentId
* @return
*/
public boolean hasLikeMoment(long userId, long momentId) {
return jedis.sismember("moment_like_users::" + momentId, String.valueOf(userId));
}
/**
* 获取你的一条朋友圈有哪些人点赞
* @param momentId
* @return
*/
public Set<String> getMomentLikeUsers(long momentId) {
return jedis.smembers("moment_like_users::" + momentId);
}
/**
* 获取一条朋友圈被几个人点赞过
* @param momentId
* @return
*/
public long getMomentLikeUsersCount(long momentId) {
return jedis.scard("moment_like_users::" + momentId);
}
}
投票统计案例
/**
* @ClassName VoteDemo
* @Desciption 投票统计案例
* @Author MaRui
* @Date 2021/8/29 22:53
* @Version 1.0
*/
public class VoteDemo {
private static Jedis jedis = new Jedis("127.0.0.1", 6379);
public static void main(String[] args) {
VoteDemo demo = new VoteDemo();
// 定义用户 id
long userId = 1;
// 定义投票项 id
long voteItemId = 10;
// 进行投票
demo.vote(userId, voteItemId);
// 检查我是否投票过
boolean hasVoted = demo.hasVote(userId, voteItemId);
System.out.println("用户查看自己是否投票过:" + hasVoted);
// 归票统计
Set<String> voteItemUsers = demo.getVoteItemUsers(voteItemId);
long voteItemUsersCount = demo.getVoteItemUsersCount(voteItemId);
System.out.println("投票项有那些人投票" + voteItemUsers + ",有几个人投票:" + voteItemUsersCount);
}
/**
* 投票
* @param userId
* @param voteItemId
*/
public void vote(long userId, long voteItemId) {
jedis.sadd("vote_item_users::" + voteItemId, String.valueOf(userId));
}
/**
* 检查用户对投票项是否投过票
* @param userId
* @param voteItemId
* @return
*/
public boolean hasVote(long userId, long voteItemId) {
return jedis.sismember("vote_item_users::" + voteItemId, String.valueOf(userId));
}
/**
* 获取一个投票项被那些人投票了
* @param voteItemId
* @return
*/
public Set<String> getVoteItemUsers(long voteItemId) {
return jedis.smembers("vote_item_users::" + voteItemId);
}
/**
* 获取一个投票项被多少人投票了
* @param voteItemId
* @return
*/
public long getVoteItemUsersCount(long voteItemId) {
return jedis.scard("vote_item_users::" + voteItemId);
}
}
微博案例
/**
* @ClassName MicroBlogDemo
* @Desciption 微博案例
* @Author MaRui
* @Date 2021/8/29 23:03
* @Version 1.0
*/
public class MicroBlogDemo {
private static Jedis jedis = new Jedis("127.0.0.1", 6379);
public static void main(String[] args) {
MicroBlogDemo demo = new MicroBlogDemo();
// 定义用户id
long userId = 1;
long friendId = 2;
long superstarId = 3;
// 定义关注的关系链(我 -> 明星、朋友,朋友 -> 明星)
demo.follow(userId, friendId);
demo.follow(userId, superstarId);
demo.follow(friendId, superstarId);
// 明星看自己被哪些人关注了
Set<String> superstarFollowers = demo.getFollowers(superstarId);
long superstarFollowersCount = demo.getFollowersCount(superstarId);
System.out.println("明星被哪些人关注了:" + superstarFollowers + ",关注自己的人数:" + superstarFollowersCount);
// 朋友看看自己被哪些人关注了,自己关注了哪些人
Set<String> friendFollowers = demo.getFollowers(friendId);
long friendFollowersCount = demo.getFollowersCount(friendId);
Set<String> friendFollowUsers = demo.getFollowUsers(friendId);
long friendFollowUsersCount = demo.getFollowUsersCount(friendId);
System.out.println("朋友被哪些人关注了:" + friendFollowers + ",被多少人关注:" + friendFollowersCount);
System.out.println("朋友关注了哪些人:" + friendFollowUsers + ",关注了多少人:" + friendFollowUsersCount);
}
/**
* 关注别人
*/
public void follow(long userId, long followUserId) {
jedis.sadd("user::" + followUserId + "::followers", String.valueOf(userId));
jedis.sadd("user::" + userId + "::follow_users", String.valueOf(followUserId));
}
/**
* 取消关注别人
* @param userId
* @param followUserId
*/
public void unfollow(long userId, long followUserId) {
jedis.srem("user::" + followUserId + "::followers", String.valueOf(userId));
jedis.srem("user::" + userId + "::follow_users", String.valueOf(followUserId));
}
/**
* 查看有哪些人关注了自己
* @param userId
* @return
*/
public Set<String> getFollowers(long userId) {
return jedis.smembers("user::" + userId + "::followers");
}
/**
* 查看关注自己的人数
* @param userId
* @return
*/
public long getFollowersCount(long userId) {
return jedis.scard("user::" + userId + "::followers");
}
/**
* 查看自己关注了哪些人
* @param userId
* @return
*/
public Set<String> getFollowUsers(long userId) {
return jedis.smembers("user::" + userId + "::follow_users");
}
/**
* 查看自己关注的人数
* @param userId
* @return
*/
public long getFollowUsersCount(long userId) {
return jedis.scard("user::" + userId + "::follow_users");
}
}
微博共同关注与推荐关注
public static void main(String[] args) {
MicroBlogDemo demo = new MicroBlogDemo();
// 定义用户id
long userId = 1;
long friendId = 2;
long superstarId = 3;
long classmateId = 4;
long motherId = 5;
// 定义关注的关系链(我 -> 明星、朋友,朋友 -> 明星)
demo.follow(userId, friendId);
demo.follow(userId, superstarId);
demo.follow(userId, motherId);
demo.follow(friendId, superstarId);
demo.follow(friendId, classmateId);
// 获取我和朋友共同关注的好友
Set<String> sameFollowUsers = demo.getSameFollowUsers(userId, friendId);
System.out.println("我和朋友共同关注的人有哪些:" + sameFollowUsers);
// 获取推荐给我的可以关注的人,就是我关注的人关注的其他人
Set<String> recommendFollowUsers = demo.getRecommendFollowUsers(userId, friendId);
System.out.println("推荐给我的关注人:" + recommendFollowUsers);
}
/**
* 获取用户跟其他用户之间共同关注的人有哪些
* @param userId
* @param otherUserId
* @return
*/
public Set<String> getSameFollowUsers(long userId, long otherUserId) {
return jedis.sinter("user::" + userId + "::follow_users",
"user::" + otherUserId + "::follow_users");
}
/**
* 获取给我推荐的可关注人
* 我关注的某个好友关注的一些人,我没关注,推荐那些人给我
* @param userId
* @return
*/
public Set<String> getRecommendFollowUsers(long userId, long otherUserId) {
return jedis.sdiff("user::" + otherUserId + "::follow_users",
"user::" + userId + "::follow_users");
}
抽奖案例
/**
* @ClassName LotteryDrawDemo
* @Desciption 抽奖案例
* @Author MaRui
* @Date 2021/8/30 8:39
* @Version 1.0
*/
public class LotteryDrawDemo {
private static Jedis jedis = new Jedis("127.0.0.1", 6379);
public static void main(String[] args) {
LotteryDrawDemo demo = new LotteryDrawDemo();
long lotteryDrawEventId = 100;
for (int i = 0; i < 20; i++) {
demo.addLotteryDrawUser(i + 1, lotteryDrawEventId);
}
List<String> lotteryDrawUsers = demo.doLotteryDraw(lotteryDrawEventId, 3);
System.out.println("获奖人选为:" + lotteryDrawUsers);
}
/**
* 添加抽奖候选人
* @param userId
*/
public void addLotteryDrawUser(long userId, long lotteryDrawEventId) {
jedis.sadd("lottery_draw_event::"+ lotteryDrawEventId +"::candidates", String.valueOf(userId));
}
/**
* 进行抽奖
* @param lotteryDrawEventId
* @return
*/
public List<String> doLotteryDraw(long lotteryDrawEventId, int count) {
return jedis.srandmember("lottery_draw_event::"+ lotteryDrawEventId +"::candidates", count);
}
}
商品搜索案例
/**
* @ClassName ProductSearchDemo
* @Desciption 商品搜索案例
* @Author MaRui
* @Date 2021/8/30 8:46
* @Version 1.0
*/
public class ProductSearchDemo {
private static Jedis jedis = new Jedis("127.0.0.1", 6379);
public static void main(String[] args) {
ProductSearchDemo demo = new ProductSearchDemo();
// 添加一批商品
demo.addProduct(1, Arrays.asList("手机", "iphone", "潮流"));
demo.addProduct(2, Arrays.asList("手机", "huawei", "炫酷"));
demo.addProduct(3, Arrays.asList("手机", "xiaomi", "炫酷"));
// 根据关键词搜索商品
Set<String> searchProduct = demo.searchProduct(Arrays.asList("炫酷"));
System.out.println("搜索结果:" + searchProduct);
}
/**
* 添加商品的时候附带一些关键词
* @param productId
* @param keywords
*/
public void addProduct(long productId, List<String> keywords) {
for (String keyword : keywords) {
jedis.sadd("keyword::" + keyword + "::products", String.valueOf(productId));
}
}
/**
* 根据多个关键词搜索商品
* @param keywords
* @return
*/
public Set<String> searchProduct(List<String> keywords) {
List<String> keywordSetKeys = new ArrayList<>();
for (String keyword : keywords) {
keywordSetKeys.add("keyword::" + keyword + "::products");
}
String[] keywordArray = keywordSetKeys.toArray(new String[keywordSetKeys.size()]);
return jedis.sinter(keywordArray);
}
}