实战:Redis实现排行榜、点赞和关注功能的基本操作

打印 上一主题 下一主题

主题 997|帖子 997|积分 2991

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Redis是一款高性能的内存数据库,以其极快的读写速率和丰富的数据结构广泛应用于各种互联网服务中。本文将介绍怎样基于Redis实现排行榜、点赞和关注功能,并提供相应的代码示例。
实战:Redis性能测试、调优和利用规范-CSDN博客

规范:Redis规范-CSDN博客
实战:搞懂Redisson、分布式锁、限流器_redisson分布式限流-CSDN博客
实践:Redis6.0设置文件解读_redis 6.0-CSDN博客
科普文:深入理解Redis-CSDN博客
1. Redis简介

Redis(Remote Dictionary Server)是一种开源的内存数据结构存储系统,通常用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、散列、列表、集合、有序集合等,并提供持久化选项。
重要特点:


  • 高速读写性能
  • 丰富的数据结构
  • 主从复制和高可用性
  • 持久化支持
这些特性使得Redis非常得当用于实现及时性要求较高的功能,好比排行榜、点赞和关注。
2. 情况设置

在开始之前,我们须要设置开发情况。本文利用Jedis库来与Redis进行交互。首先,在你的项目中引入Jedis库。对于Maven项目,可以在pom.xml中添加以下依靠:


  1. <dependency>    <groupId>redis.clients</groupId>    <artifactId>jedis</artifactId>    <version>3.7.0</version></dependency>
复制代码


接下来,确保你的系统已经安装并运行Redis服务器。
3. 排行榜功能的实现

概述

排行榜功能是很多应用中的常见需求,好比游戏中的积分排名、网站上的热门文章排行等。Redis提供的有序集合(Sorted Set)数据结构非常得当实现排行榜功能,因为它可以自动根据分数排序,并支持范围查询。
实现步调


  • 数据结构选择:利用有序集合(Sorted Set),其中成员是用户ID或项目ID,分数是对应的积分或权重。
  • 添加和更新分数:利用ZADD下令添加或更新成员的分数。
  • 获取排行榜:利用ZRANGE下令获取排行榜中的成员及其分数。
  • 获取成员排名:利用ZRANK下令获取成员在排行榜中的排名。
代码示例

  1. import redis.clients.jedis.Jedis;import redis.clients.jedis.Tuple;
  2. import java.util.Set;
  3. public class Leaderboard {
  4.     private static final String LEADERBOARD_KEY = "leaderboard";    private Jedis jedis;
  5.     public Leaderboard(Jedis jedis) {        this.jedis = jedis;    }
  6.     // 添加或更新用户积分    public void addScore(String userId, double score) {        jedis.zadd(LEADERBOARD_KEY, score, userId);    }
  7.     // 获取排行榜前N名    public Set<Tuple> getTopN(int n) {        return jedis.zrevrangeWithScores(LEADERBOARD_KEY, 0, n - 1);    }
  8.     // 获取用户排名    public long getRank(String userId) {        Long rank = jedis.zrevrank(LEADERBOARD_KEY, userId);        return rank != null ? rank + 1 : -1;    }
  9.     public static void main(String[] args) {        try (Jedis jedis = new Jedis("localhost")) {            Leaderboard leaderboard = new Leaderboard(jedis);
  10.             leaderboard.addScore("user1", 100);            leaderboard.addScore("user2", 150);            leaderboard.addScore("user3", 120);
  11.             Set<Tuple> top3 = leaderboard.getTopN(3);            for (Tuple tuple : top3) {                System.out.println(tuple.getElement() + ": " + tuple.getScore());            }
  12.             System.out.println("user1's rank: " + leaderboard.getRank("user1"));        }    }}
复制代码


4. 点赞功能的实现

概述

点赞功能常用于交际平台或内容网站,用于表现用户对某个内容的喜爱。Redis的集合(Set)数据结构可以有用地实现点赞功能,每个被点赞的内容对应一个集合,集合中存储点赞用户的ID。
实现步调


  • 数据结构选择:利用集合(Set),集合名为内容ID,集合中存储点赞用户的ID。
  • 添加点赞:利用SADD下令将用户ID添加到集合中。
  • 取消点赞:利用SREM下令将用户ID从集合中移除。
  • 获取点赞数:利用SCARD下令获取集合中的元素数量。
  • 检查用户是否点赞:利用SISMEMBER下令检查集合中是否包含用户ID。
代码示例

  1. import redis.clients.jedis.Jedis;
  2. public class LikeService {
  3.     private Jedis jedis;
  4.     public LikeService(Jedis jedis) {        this.jedis = jedis;    }
  5.     // 点赞    public void like(String contentId, String userId) {        jedis.sadd("likes:" + contentId, userId);    }
  6.     // 取消点赞    public void unlike(String contentId, String userId) {        jedis.srem("likes:" + contentId, userId);    }
  7.     // 获取点赞数    public long getLikes(String contentId) {        return jedis.scard("likes:" + contentId);    }
  8.     // 检查用户是否点赞    public boolean hasLiked(String contentId, String userId) {        return jedis.sismember("likes:" + contentId, userId);    }
  9.     public static void main(String[] args) {        try (Jedis jedis = new Jedis("localhost")) {            LikeService likeService = new LikeService(jedis);
  10.             likeService.like("post1", "user1");            likeService.like("post1", "user2");            likeService.unlike("post1", "user1");
  11.             System.out.println("post1 likes: " + likeService.getLikes("post1"));            System.out.println("user1 has liked post1: " + likeService.hasLiked("post1", "user1"));        }    }}
复制代码


5. 关注功能的实现

概述

关注功能是交际网络中的核心功能,用户可以关注其他用户以获取其动态。Redis的集合(Set)数据结构也得当实现关注功能,分别用两个集合存储每个用户的关注列表和粉丝列表。
实现步调


  • 数据结构选择:利用集合(Set),一个集合存储关注列表,一个集合存储粉丝列表。
  • 关注用户:利用SADD下令将被关注用户ID添加到关注列表,将关注者ID添加到粉丝列表。
  • 取消关注:利用SREM下令将被关注用户ID从关注列表移除,将关注者ID从粉丝列表移除。
  • 获取关注列表和粉丝列表:利用SMEMBERS下令获取集合中的全部元素。
  • 检查是否关注:利用SISMEMBER下令检查集合中是否包含用户ID。
代码示例

  1. import redis.clients.jedis.Jedis;
  2. import java.util.Set;
  3. public class FollowService {
  4.     private Jedis jedis;
  5.     public FollowService(Jedis jedis) {        this.jedis = jedis;    }
  6.     // 关注用户    public void follow(String userId, String targetId) {        jedis.sadd("following:" + userId, targetId);        jedis.sadd("followers:" + targetId, userId);    }
  7.     // 取消关注    public void unfollow(String userId, String targetId) {        jedis.srem("following:" + userId, targetId);        jedis.srem("followers:" + targetId, userId);    }
  8.     // 获取关注列表    public Set<String> getFollowing(String userId) {        return jedis.smembers("following:" + userId);    }
  9.     // 获取粉丝列表    public Set<String> getFollowers(String userId) {        return jedis.smembers("followers:" + userId);    }
  10.     // 检查是否关注    public boolean isFollowing(String userId, String targetId) {        return jedis.sismember("following:" + userId, targetId);    }
  11.     public static void main(String[] args) {        try (Jedis jedis = new Jedis("localhost")) {            FollowService followService = new FollowService(jedis);
  12.             followService.follow("user1", "user2");            followService.follow("user1", "user3");            followService.unfollow("user1", "user2");
  13.             System.out.println("user1 is following: " + followService.getFollowing("user1"));            System.out.println("user2's followers: " + followService.getFollowers("user2"));            System.out.println("user1 is following user2: " + followService.isFollowing("user1", "user2"));        }    }}
复制代码
结论

本文介绍了怎样利用Java语言和Redis实现排行榜、点赞和关注功能。通过Jedis库,我们可以轻松地与Redis进行交互,利用其高性能和丰富的数据结构来实现这些常见的功能。盼望这些代码示例能资助你更好地理解和实现相关功能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表