最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java負(fù)載均衡策略的實(shí)現(xiàn)詳解

 更新時(shí)間:2022年07月18日 15:22:02   作者:Memory_2020  
這篇文章主要介紹了Java負(fù)載均衡策略的實(shí)現(xiàn),負(fù)載均衡在Java領(lǐng)域中有著廣泛深入的應(yīng)用,不管是大名鼎鼎的nginx,還是微服務(wù)治理組件如dubbo,feign等,負(fù)載均衡的算法在其中都有著實(shí)際的使用,需要的朋友可以參考下

1. 引言

當(dāng)在Java應(yīng)用程序中需要處理負(fù)載均衡時(shí),通常涉及到多個(gè)服務(wù)器或服務(wù)實(shí)例,以確保請(qǐng)求能夠分散到這些實(shí)例上,從而提高系統(tǒng)性能、可用性和可伸縮性。實(shí)現(xiàn)負(fù)載均衡策略可以通過(guò)多種方法,包括基于權(quán)重、輪詢、隨機(jī)選擇、最少連接等。今天就來(lái)看一下使用java如何實(shí)現(xiàn)這些算法。

2. 負(fù)載均衡策略

2.1. 隨機(jī)算法(Random)

隨機(jī)選擇一個(gè)服務(wù)器來(lái)處理請(qǐng)求。每個(gè)服務(wù)器都有相同的機(jī)會(huì)被選中。優(yōu)點(diǎn)是簡(jiǎn)單易行,缺點(diǎn)是可能會(huì)出現(xiàn)不均勻的負(fù)載情況。

以下是一個(gè)簡(jiǎn)單的隨機(jī)選擇服務(wù)器的Java代碼實(shí)現(xiàn),使用Java的 Random 類來(lái)實(shí)現(xiàn)隨機(jī)選擇服務(wù)器的功能。

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RandomLoadBalancer {
    private List<String> serverList;
    private Random random;
    public RandomLoadBalancer(List<String> serverList) {
        this.serverList = serverList;
        this.random = new Random();
    }
    public String getRandomServer() {
        int index = random.nextInt(serverList.size());
        return serverList.get(index);
    }
    public static void main(String[] args) {
        List<String> serverList = new ArrayList<>();
        serverList.add("http://server1:8080");
        serverList.add("http://server2:8080");
        serverList.add("http://server3:8080");
        RandomLoadBalancer loadBalancer = new RandomLoadBalancer(serverList);
        // 模擬發(fā)送請(qǐng)求
        for (int i = 0; i < 10; i++) {
            String server = loadBalancer.getRandomServer();
            System.out.println("Sending request to server: " + server);
            // 在實(shí)際應(yīng)用中,可以使用HTTP客戶端發(fā)送請(qǐng)求到選定的服務(wù)器
        }
    }
}

2.2. 輪詢算法(Polling)

1. 創(chuàng)建一個(gè)服務(wù)器列表

首先,創(chuàng)建一個(gè)包含多個(gè)服務(wù)器地址的列表,代表可用的服務(wù)實(shí)例。在真實(shí)場(chǎng)景中,這些地址可能存儲(chǔ)在配置文件中,或由服務(wù)注冊(cè)中心動(dòng)態(tài)維護(hù)。

List<String> serverList = Arrays.asList("http://server1:8080", "http://server2:8080", "http://server3:8080");

2. 輪詢負(fù)載均衡算法

編寫(xiě)一個(gè)負(fù)載均衡器類,使用簡(jiǎn)單的輪詢算法來(lái)選擇要發(fā)送請(qǐng)求的服務(wù)器。

public class LoadBalancer {
    private List<String> serverList;
    private int currentIndex;
    public LoadBalancer(List<String> serverList) {
        this.serverList = serverList;
        this.currentIndex = 0;
    }
    public String getNextServer() {
        String server = serverList.get(currentIndex);
        currentIndex = (currentIndex + 1) % serverList.size();
        return server;
    }
}

3. 使用負(fù)載均衡器發(fā)送請(qǐng)求

使用負(fù)載均衡器類來(lái)發(fā)送請(qǐng)求到選定的服務(wù)器地址。

public class Client {
    public static void main(String[] args) {
        List<String> serverList = Arrays.asList("http://server1:8080", "http://server2:8080", "http://server3:8080");
        LoadBalancer loadBalancer = new LoadBalancer(serverList);
        // 模擬發(fā)送請(qǐng)求
        for (int i = 0; i < 10; i++) {
            String server = loadBalancer.getNextServer();
            System.out.println("Sending request to server: " + server);
            // 此處可以使用HTTP客戶端發(fā)送請(qǐng)求到選定的服務(wù)器
        }
    }
}

注意事項(xiàng)

  • 這只是一個(gè)簡(jiǎn)單的示例,實(shí)際場(chǎng)景可能更加復(fù)雜。
  • 在實(shí)際應(yīng)用中,可以使用各種負(fù)載均衡算法,并考慮服務(wù)器的健康狀況、權(quán)重分配等因素。
  • 可以使用HTTP客戶端(如Apache HttpClient、OkHttp等)來(lái)實(shí)現(xiàn)向服務(wù)器發(fā)送請(qǐng)求。

2.3. 加權(quán)輪詢算法(Weighted Round Robin)

和輪詢類似,但是為每個(gè)服務(wù)器分配一個(gè)權(quán)重值。根據(jù)權(quán)重來(lái)決定選擇哪個(gè)服務(wù)器來(lái)處理請(qǐng)求,權(quán)重越高的服務(wù)器被選中的概率越大,適用于不同服務(wù)器性能不同的情況。

java代碼實(shí)現(xiàn)

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
public class WeightedRoundRobinLoadBalancer {
    private List<Server> serverList;
    private AtomicInteger position;
    private int totalWeight;
    public WeightedRoundRobinLoadBalancer(List<Server> servers) {
        this.serverList = servers;
        this.position = new AtomicInteger(-1);
        this.totalWeight = calculateTotalWeight();
    }
    private int calculateTotalWeight() {
        int total = 0;
        for (Server server : serverList) {
            total += server.getWeight();
        }
        return total;
    }
    public Server getWeightedRoundRobinServer() {
        int index = getNextServerIndex();
        return serverList.get(index);
    }
    private int getNextServerIndex() {
        while (true) {
            int current = position.incrementAndGet() % totalWeight;
            for (int i = 0; i < serverList.size(); i++) {
                Server server = serverList.get(i);
                if (current < server.getWeight()) {
                    return i;
                }
                current -= server.getWeight();
            }
        }
    }
    public static void main(String[] args) {
        List<Server> serverList = new ArrayList<>();
        serverList.add(new Server("http://server1:8080", 4)); // 權(quán)重為4
        serverList.add(new Server("http://server2:8080", 2)); // 權(quán)重為2
        serverList.add(new Server("http://server3:8080", 1)); // 權(quán)重為1
        WeightedRoundRobinLoadBalancer loadBalancer = new WeightedRoundRobinLoadBalancer(serverList);
        // 模擬發(fā)送請(qǐng)求
        for (int i = 0; i < 10; i++) {
            Server server = loadBalancer.getWeightedRoundRobinServer();
            System.out.println("Sending request to server: " + server.getUrl());
            // 在實(shí)際應(yīng)用中,可以使用HTTP客戶端發(fā)送請(qǐng)求到選定的服務(wù)器
        }
    }
}
class Server {
    private String url;
    private int weight;
    public Server(String url, int weight) {
        this.url = url;
        this.weight = weight;
    }
    public String getUrl() {
        return url;
    }
    public int getWeight() {
        return weight;
    }
}

示例中,WeightedRoundRobinLoadBalancer 類接收一個(gè)包含服務(wù)器及其權(quán)重信息的列表,并根據(jù)權(quán)重進(jìn)行加權(quán)輪詢。Server 類表示服務(wù)器,其中包含了服務(wù)器的URL和權(quán)重信息。然后用main 方法模擬了10次發(fā)送請(qǐng)求到根據(jù)權(quán)重選擇的服務(wù)器。

2.4. 最少連接算法(Least Connections)

選擇當(dāng)前連接數(shù)最少的服務(wù)器來(lái)處理請(qǐng)求,以保持服務(wù)器負(fù)載均衡。適用于服務(wù)器性能不均勻的情況。

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class LeastConnectionsLoadBalancer {
    private List<Server> serverList;
    public LeastConnectionsLoadBalancer(List<Server> servers) {
        this.serverList = servers;
    }
    public Server getServerWithLeastConnections() {
        return serverList.stream()
                .min(Comparator.comparingInt(Server::getCurrentConnections))
                .orElseThrow(() -> new RuntimeException("No servers available"));
    }
    public static void main(String[] args) {
        List<Server> serverList = new ArrayList<>();
        serverList.add(new Server("http://server1:8080", 5)); // 模擬當(dāng)前連接數(shù)為5
        serverList.add(new Server("http://server2:8080", 3)); // 模擬當(dāng)前連接數(shù)為3
        serverList.add(new Server("http://server3:8080", 7)); // 模擬當(dāng)前連接數(shù)為7
        LeastConnectionsLoadBalancer loadBalancer = new LeastConnectionsLoadBalancer(serverList);
        // 模擬發(fā)送請(qǐng)求
        Server selectedServer = loadBalancer.getServerWithLeastConnections();
        System.out.println("Sending request to server with least connections: " + selectedServer.getUrl());
        // 在實(shí)際應(yīng)用中,可以使用HTTP客戶端發(fā)送請(qǐng)求到選定的服務(wù)器
    }
}
class Server {
    private String url;
    private int currentConnections;
    public Server(String url, int currentConnections) {
        this.url = url;
        this.currentConnections = currentConnections;
    }
    public String getUrl() {
        return url;
    }
    public int getCurrentConnections() {
        return currentConnections;
    }
}

2.5. IP哈希算法(IP Hash)

根據(jù)客戶端IP地址的哈希值來(lái)選擇服務(wù)器處理請(qǐng)求,確保同一客戶端的請(qǐng)求始終被轉(zhuǎn)發(fā)到同一臺(tái)服務(wù)器上,適用于有狀態(tài)的會(huì)話保持需求。

package com.eoi.cncc.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.CRC32;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.CRC32;
public class IPHashLoadBalancer {
    private List<Server> serverList;
    private Map<Integer, Server> hashToServerMap;
    public IPHashLoadBalancer(List<Server> servers) {
        this.serverList = servers;
        this.hashToServerMap = new HashMap<>();
        calculateHashes();
    }
    private void calculateHashes() {
        for (Server server : serverList) {
            String serverUrl = server.getUrl();
            int hashCode = hashIpAddress(serverUrl);
            hashToServerMap.put(hashCode, server);
        }
    }
    private int hashIpAddress(String ipAddress) {
        CRC32 crc32 = new CRC32();
        crc32.update(ipAddress.getBytes());
        return (int) crc32.getValue();
    }
    public Server getServerForIpAddress(String ipAddress) {
        for (Server server : serverList) {
            if (server.getUrl().contains(ipAddress)) {
                int hashCode = hashIpAddress(server.getUrl());
                return hashToServerMap.get(hashCode);
            }
        }
        return null;
    }
    public static void main(String[] args) {
        List<Server> serverList = new ArrayList<>();
        serverList.add(new Server("http://server1:8080"));
        serverList.add(new Server("http://server2:8080"));
        serverList.add(new Server("http://server3:8080"));
        IPHashLoadBalancer loadBalancer = new IPHashLoadBalancer(serverList);
        // 模擬不同IP地址的請(qǐng)求
        String ipAddress1 = "server1";
        String ipAddress2 = "server3";
        Server serverForIp1 = loadBalancer.getServerForIpAddress(ipAddress1);
        Server serverForIp2 = loadBalancer.getServerForIpAddress(ipAddress2);
        if (serverForIp1 != null) {
            System.out.println("IP " + ipAddress1 + " is directed to server: " + serverForIp1.getUrl());
        } else {
            System.out.println("IP " + ipAddress1 + " could not be directed to any server.");
        }
        if (serverForIp2 != null) {
            System.out.println("IP " + ipAddress2 + " is directed to server: " + serverForIp2.getUrl());
        } else {
            System.out.println("IP " + ipAddress2 + " could not be directed to any server.");
        }
        // 在實(shí)際應(yīng)用中,可以使用HTTP客戶端發(fā)送請(qǐng)求到選定的服務(wù)器
    }
}
class Server {
    private String url;
    public Server(String url) {
        this.url = url;
    }
    public String getUrl() {
        return url;
    }
}

請(qǐng)注意getServerForIpAddress方法中我為了偷懶就這么寫(xiě)了,大概思路大家明白就行。

2.6. 源地址散列算法(Source Hashing)

根據(jù)請(qǐng)求來(lái)源地址進(jìn)行散列計(jì)算,將同一來(lái)源地址的請(qǐng)求路由到相同的服務(wù)器上,適用于需要保持會(huì)話的場(chǎng)景。

package com.eoi.cncc.util;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.zip.CRC32;
public class SourceHashingLoadBalancer {
    private final TreeMap<Integer, Server> hashRing;
    public SourceHashingLoadBalancer(List<Server> servers) {
        this.hashRing = new TreeMap<>();
        initializeHashRing(servers);
    }
    private void initializeHashRing(List<Server> servers) {
        for (Server server : servers) {
            for (int i = 0; i < server.getWeight(); i++) {
                int hash = hashServer(server.getUrl() + i);
                hashRing.put(hash, server);
            }
        }
    }
    public Server getServerForSourceAddress(String sourceAddress) {
        int hash = hashServer(sourceAddress);
        SortedMap<Integer, Server> tailMap = hashRing.tailMap(hash);
        if (tailMap.isEmpty()) {
            hash = hashRing.firstKey();
        } else {
            hash = tailMap.firstKey();
        }
        return hashRing.get(hash);
    }
    private int hashServer(String serverAddress) {
        CRC32 crc32 = new CRC32();
        crc32.update(serverAddress.getBytes());
        return (int) crc32.getValue();
    }
    public static void main(String[] args) {
        List<Server> serverList = new ArrayList<>();
        serverList.add(new Server("http://server1:8080", 1));
        serverList.add(new Server("http://server2:8080", 1));
        serverList.add(new Server("http://server3:8080", 1));
        SourceHashingLoadBalancer loadBalancer = new SourceHashingLoadBalancer(serverList);
        // 模擬不同來(lái)源地址的請(qǐng)求
        String sourceAddress1 = "192.168.1.100";
        String sourceAddress2 = "10.0.0.1";
        Server serverForSource1 = loadBalancer.getServerForSourceAddress(sourceAddress1);
        Server serverForSource2 = loadBalancer.getServerForSourceAddress(sourceAddress2);
        if (serverForSource1 != null) {
            System.out.println("Source Address " + sourceAddress1 + " is directed to server: " + serverForSource1.getUrl());
        } else {
            System.out.println("Source Address " + sourceAddress1 + " could not be directed to any server.");
        }
        if (serverForSource2 != null) {
            System.out.println("Source Address " + sourceAddress2 + " is directed to server: " + serverForSource2.getUrl());
        } else {
            System.out.println("Source Address " + sourceAddress2 + " could not be directed to any server.");
        }
        // 在實(shí)際應(yīng)用中,可以使用HTTP客戶端發(fā)送請(qǐng)求到選定的服務(wù)器
    }
}
class Server {
    private String url;
    private int weight;
    public Server(String url, int weight) {
        this.url = url;
        this.weight = weight;
    }
    public String getUrl() {
        return url;
    }
    public int getWeight() {
        return weight;
    }
}

上面的代碼只是實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的源地址散列算法,實(shí)際應(yīng)用中比這復(fù)雜很多。

當(dāng)使用源地址散列算法(Source Hashing)時(shí),需要考慮注意事項(xiàng):

  • 散列算法的一致性: 確保相同的源地址始終映射到相同的服務(wù)器。這是源地址散列算法的核心目標(biāo),以保持會(huì)話一致性或狀態(tài)一致性。
  • 服務(wù)器的動(dòng)態(tài)性: 服務(wù)器的上線、下線或動(dòng)態(tài)變化會(huì)影響到散列結(jié)果。在動(dòng)態(tài)環(huán)境下,添加或移除服務(wù)器可能導(dǎo)致請(qǐng)求被重新路由,這可能影響到客戶端的體驗(yàn)。
  • 負(fù)載分布不均: 在源地址散列算法中,如果源地址分布不均勻,可能導(dǎo)致某些服務(wù)器負(fù)載過(guò)重,而其他服務(wù)器負(fù)載較輕。這可能需要額外的措施來(lái)處理,如增加權(quán)重、使用虛擬節(jié)點(diǎn)等方法。
  • 源地址數(shù)量: 如果源地址數(shù)量較少,那么散列結(jié)果可能不夠均勻。因此,考慮到源地址數(shù)量和均勻性也是很重要的。
  • 散列碰撞和平衡問(wèn)題: 如果源地址散列出現(xiàn)碰撞,即多個(gè)源地址映射到同一個(gè)服務(wù)器,需要考慮解決方案。一些方法包括增加哈希位數(shù)、使用一致性哈希等。
  • 服務(wù)器失效處理: 處理服務(wù)器失效或不可用的情況至關(guān)重要。當(dāng)一個(gè)服務(wù)器不可用時(shí),需要有機(jī)制將其排除在散列算法之外,避免將請(qǐng)求發(fā)送到無(wú)法響應(yīng)的服務(wù)器。
  • 監(jiān)控和調(diào)整: 對(duì)源地址散列算法的性能和效果進(jìn)行監(jiān)控,并根據(jù)負(fù)載情況調(diào)整服務(wù)器列表或調(diào)整算法以優(yōu)化負(fù)載均衡效果。
  • 算法的復(fù)雜性和性能開(kāi)銷: 源地址散列算法可能會(huì)引入一定的復(fù)雜性和性能開(kāi)銷。評(píng)估算法的性能,并在必要時(shí)進(jìn)行調(diào)整,確保系統(tǒng)性能不受影響。

3. 負(fù)載均衡使用場(chǎng)景

負(fù)載均衡在計(jì)算機(jī)網(wǎng)絡(luò)和服務(wù)器架構(gòu)中被廣泛應(yīng)用,特別是在大型系統(tǒng)和高流量環(huán)境中。以下是一些負(fù)載均衡常見(jiàn)的應(yīng)用場(chǎng)景:

  • Web服務(wù)和應(yīng)用程序服務(wù)器: 在Web應(yīng)用程序和服務(wù)中,負(fù)載均衡可以將請(qǐng)求分發(fā)到多個(gè)服務(wù)器,以確保系統(tǒng)的穩(wěn)定性和性能。這包括網(wǎng)站、應(yīng)用程序和API等。
  • 數(shù)據(jù)庫(kù)服務(wù)器: 對(duì)于數(shù)據(jù)庫(kù)系統(tǒng),負(fù)載均衡可用于分發(fā)讀寫(xiě)請(qǐng)求到不同的數(shù)據(jù)庫(kù)節(jié)點(diǎn),以提高數(shù)據(jù)庫(kù)性能和可用性。同時(shí)也可以避免單個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)負(fù)載過(guò)重。
  • 內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN): CDN 通過(guò)在全球各地分布的緩存節(jié)點(diǎn)分發(fā)內(nèi)容,以提高內(nèi)容傳輸速度和減少延遲。負(fù)載均衡可用于在這些節(jié)點(diǎn)之間平衡流量負(fù)載。
  • 應(yīng)用程序?qū)迂?fù)載均衡: 在應(yīng)用程序內(nèi)部,比如微服務(wù)架構(gòu)中,負(fù)載均衡可用于在不同的微服務(wù)節(jié)點(diǎn)之間平衡請(qǐng)求,確保系統(tǒng)各部分的平衡負(fù)載。
  • 網(wǎng)絡(luò)流量負(fù)載均衡: 在網(wǎng)絡(luò)層面,負(fù)載均衡器可用于將網(wǎng)絡(luò)流量分發(fā)到不同的網(wǎng)絡(luò)鏈路或通道,以避免網(wǎng)絡(luò)擁塞和優(yōu)化帶寬利用率。
  • 服務(wù)器集群和集群計(jì)算: 在大規(guī)模服務(wù)器集群和集群計(jì)算中,負(fù)載均衡確保任務(wù)或計(jì)算工作在各個(gè)節(jié)點(diǎn)上均勻分布,提高整體的效率和性能。
  • 消息隊(duì)列系統(tǒng): 在消息隊(duì)列架構(gòu)中,負(fù)載均衡可用于將消息傳遞到不同的消費(fèi)者,確保消息隊(duì)列中的消息能夠高效處理。

負(fù)載均衡在許多不同的場(chǎng)景中都起著關(guān)鍵作用,它能夠提高系統(tǒng)的性能、可擴(kuò)展性和可用性,降低單點(diǎn)故障的風(fēng)險(xiǎn),從而更好地滿足用戶的需求。

4. 結(jié)語(yǔ)

希望通過(guò)本文中提到的各種負(fù)載均衡算法和實(shí)現(xiàn),大家可以更好地了解不同負(fù)載均衡技術(shù)的工作原理和適用場(chǎng)景。也可以根據(jù)特定的需求和系統(tǒng)架構(gòu)選擇適合的負(fù)載均衡策略,以優(yōu)化系統(tǒng)性能。

在使用負(fù)載均衡技術(shù)時(shí),請(qǐng)務(wù)必考慮系統(tǒng)的動(dòng)態(tài)性、監(jiān)控和調(diào)整、容錯(cuò)和故障處理等因素,以確保系統(tǒng)的穩(wěn)定性和可靠性。

到此這篇關(guān)于Java負(fù)載均衡策略的實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Java負(fù)載均衡策略內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合RocketMQ的方法詳解

    SpringBoot整合RocketMQ的方法詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合RocketMQ的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定幫助,感興趣的小伙伴可以了解一下
    2022-08-08
  • java8根據(jù)某一屬性過(guò)濾去重的實(shí)例

    java8根據(jù)某一屬性過(guò)濾去重的實(shí)例

    這篇文章主要介紹了java8根據(jù)某一屬性過(guò)濾去重的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 使用maven-assembly-plugin如何打包多模塊項(xiàng)目

    使用maven-assembly-plugin如何打包多模塊項(xiàng)目

    這篇文章主要介紹了使用maven-assembly-plugin如何打包多模塊項(xiàng)目,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • spring boot 默認(rèn)異常處理的實(shí)現(xiàn)

    spring boot 默認(rèn)異常處理的實(shí)現(xiàn)

    這篇文章主要介紹了spring boot 默認(rèn)異常處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JAVA下單接口優(yōu)化實(shí)戰(zhàn)TPS性能提高10倍

    JAVA下單接口優(yōu)化實(shí)戰(zhàn)TPS性能提高10倍

    今天小編就為大家分享一篇關(guān)于JAVA下單接口優(yōu)化實(shí)戰(zhàn)TPS性能提高10倍,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • springboot項(xiàng)目實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能

    springboot項(xiàng)目實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能

    這篇文章主要介紹了springboot項(xiàng)目實(shí)現(xiàn)斷點(diǎn)續(xù)傳,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • JavaSE?XML解析技術(shù)的使用方法詳解

    JavaSE?XML解析技術(shù)的使用方法詳解

    XML意為可擴(kuò)展標(biāo)記語(yǔ)言,被多數(shù)技術(shù)人員用以選擇作為數(shù)據(jù)傳輸?shù)妮d體,成為一種通用的數(shù)據(jù)交換格式,下面這篇文章主要給大家介紹了關(guān)于JavaSE?XML解析技術(shù)的使用方法,需要的朋友可以參考下
    2023-04-04
  • java boolean占用內(nèi)存大小說(shuō)明

    java boolean占用內(nèi)存大小說(shuō)明

    這篇文章主要介紹了java boolean占用內(nèi)存大小,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • MybatisPlus實(shí)現(xiàn)數(shù)據(jù)權(quán)限隔離的示例詳解

    MybatisPlus實(shí)現(xiàn)數(shù)據(jù)權(quán)限隔離的示例詳解

    Mybatis Plus對(duì)Mybatis做了無(wú)侵入的增強(qiáng),非常的好用,今天就給大家介紹它的其中一個(gè)實(shí)用功能:數(shù)據(jù)權(quán)限插件,感興趣的可以跟隨小編一起了解下
    2024-04-04
  • 使用maven構(gòu)建java9 service實(shí)例詳解

    使用maven構(gòu)建java9 service實(shí)例詳解

    本篇文章主要介紹了使用maven構(gòu)建java9 service實(shí)例詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02

最新評(píng)論

嘉黎县| 大田县| 政和县| 固阳县| 新密市| 边坝县| 资中县| 叙永县| 新乡市| 益阳市| 郓城县| 铁岭县| 定襄县| 乌鲁木齐县| 彩票| 巴里| 洪雅县| 桂林市| 肥东县| 右玉县| 裕民县| 隆德县| 盐亭县| 义乌市| 墨脱县| 鹰潭市| 密云县| 天门市| 库尔勒市| 沙洋县| 安泽县| 扶绥县| 四子王旗| 石柱| 钦州市| 曲周县| 凤凰县| 家居| 横峰县| 广宗县| 松溪县|