天天看點

使用redis實作好友功能 1.set的使用 2.增、删、查 3.是否操作成功的判斷

|-- pom.xml                                                                     
|-- src                                                                         
|   |-- main                                                                    
|   |   |-- java                                                                
|   |   |   `-- org                                                             
|   |   |       `-- example                                                     
|   |   |           |-- enums                                                   
|   |   |           |   `-- RedisKeyEnum.java                                   
|   |   |           |-- handler                                                 
|   |   |           |   `-- FriendHandler.java                                  
|   |   |           |-- logic                                                   
|   |   |           |   `-- friend                                              
|   |   |           |       |-- FriendChecker.java                              
|   |   |           |       `-- FriendManager.java                              
|   |   |           `-- service                                                 
|   |   |               |-- FriendService.java                                  
|   |   |               `-- JedisService.java                                         

|-- pom.xml

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
           

|-- src

|   |-- main

|   |   |-- java

|   |   |   `-- org

|   |   |       `-- example

|   |   |           |-- enums

|   |   |           |   `-- RedisKeyEnum.java

package org.example.enums;

public enum RedisKeyEnum {
    /**
     * 好友清單
     */
    FRIEND_LIST("friend_list_"),
    ;
    private String key;
    private int expireSeconds;

    RedisKeyEnum(String key) {
        this(key, Integer.MAX_VALUE);
    }

    RedisKeyEnum(String key, int expireSeconds) {
        this.key = key;
        this.expireSeconds = expireSeconds;
    }

    public String buildKey(String key) {
        return getKey() + key;
    }

    public String getKey() {
        return key;
    }

    public int getExpireSeconds() {
        return expireSeconds;
    }
}
           

|   |   |           |-- handler

|   |   |           |   `-- FriendHandler.java

package org.example.handler;

import org.example.service.FriendService;
import org.example.service.JedisService;

import java.util.Set;

public class FriendHandler {
    public static String rid1 = "1";
    public static String rid2 = "2";
    public static String rid3 = "3";
    public static String rid4 = "4";
    public static String rid5 = "5";

    public static void main(String[] args) {
        JedisService.init();

        long s = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            // 添加好友
            FriendService.addFriend(rid1, rid2);
            FriendService.delFriend(rid1, rid2);

            FriendService.addFriend(rid1, rid3);
            FriendService.delFriend(rid1, rid3);

            FriendService.addFriend(rid1, rid4);
            FriendService.delFriend(rid1, rid4);

            FriendService.addFriend(rid1, rid5);
            FriendService.delFriend(rid1, rid5);
        }

        FriendService.addFriend(rid1, rid2);
        FriendService.addFriend(rid1, rid3);
        FriendService.addFriend(rid1, rid4);
        FriendService.addFriend(rid1, rid5);

        Set<String> friendRidSet = FriendService.getFriendRidSet(rid1);
        System.out.println(friendRidSet);
        System.out.println("time:" + (System.currentTimeMillis() - s));
    }
}

/*
[2, 3, 4, 5]
time:5160
 */
           

|   |   |           |-- logic

|   |   |           |   `-- friend

|   |   |           |       |-- FriendChecker.java

package org.example.logic.friend;

public class FriendChecker {
    public static void checkSameRidError(String rid1, String rid2) {
        if (rid1.equals(rid2)) {
            throw new RuntimeException("rid不能相同");
        }
    }
}
           

|   |   |           |       `-- FriendManager.java

package org.example.logic.friend;

import org.example.enums.RedisKeyEnum;
import org.example.service.JedisService;
import redis.clients.jedis.Jedis;

import java.util.Set;

public class FriendManager {
    public static void addFriend(String rid, String targetRid) {
        try (Jedis jedis = JedisService.getJedis()) {
            String key = FriendManager.getKey(rid);
            long rtn = jedis.sadd(key, targetRid);
            if (rtn != 1) {
                System.out.println("添加好友失敗");
            }
        }
    }

    /**
     * 删除好友
     *
     * @param rid
     * @param targetRid
     * @return
     */
    public static void delFriend(String rid, String targetRid) {
        try (Jedis jedis = JedisService.getJedis()) {
            String key = FriendManager.getKey(rid);
            long rtn = jedis.srem(key, targetRid);
            if (rtn != 1) {
                System.out.println("删除好友失敗");
            }
        }
    }

    public static Set<String> getFriendRidSet(String rid) {
        try (Jedis jedis = JedisService.getJedis()) {
            String key = FriendManager.getKey(rid);
            Set<String> ridSet = jedis.smembers(key);
            return ridSet;
        }
    }

    private static String getKey(String rid) {
        return RedisKeyEnum.FRIEND_LIST.buildKey(rid);
    }
}
           

|   |   |           `-- service

|   |   |               |-- FriendService.java

package org.example.service;

import org.example.logic.friend.FriendChecker;
import org.example.logic.friend.FriendManager;

import java.util.Set;

public class FriendService {
    /**
     * rid添加targetRid為好友
     *
     * @param rid
     * @param targetRid
     */
    public static void addFriend(String rid, String targetRid) {
        FriendChecker.checkSameRidError(rid, targetRid);
        FriendManager.addFriend(rid, targetRid);
    }

    /**
     * 删除好友
     *
     * @param rid
     * @param targetRid
     * @return
     */
    public static void delFriend(String rid, String targetRid) {
        FriendChecker.checkSameRidError(rid, targetRid);
        FriendManager.delFriend(rid, targetRid);
    }

    /**
     * 查詢rid好友清單
     *
     * @param rid
     * @return
     */
    public static Set<String> getFriendRidSet(String rid) {
        return FriendManager.getFriendRidSet(rid);
    }
}
           

|   |   |               `-- JedisService.java 

package org.example.service;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisService {
    private static JedisPool jedisPool;

    public static void init() {
        jedisPool = new JedisPool("127.0.0.1", 6379);
    }

    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}
           

rdm檢視下資料

使用redis實作好友功能 1.set的使用 2.增、删、查 3.是否操作成功的判斷