原创 [原創]通過切面與分佈式鎖實現合併相同請求

在微服務裏經常有併發相同的請求過來,當未命中緩存時,可能多條請求一起穿透緩存到DB,這就導致DB壓力的增大 本文使用redis的分佈式鎖來合併相同的請求 當兩個以上相同的請求來請求時, 通過競爭實現將相同的請求線性化.   假設緩存失效,也

原创 IP地址轉換爲Int

1.轉換類 import com.google.common.base.Strings; import java.security.InvalidParameterException; import java.util.Arrays;

原创 java無符號Byte

1.無符號byte, 實現了將byte(-128~127) 轉換爲 (0~255) class UnsignedByte { private short value; private byte rawValue;

原创 可配置的用戶行爲攔截原型

1.引用 aviator <dependency> <groupId>com.googlecode.aviator</groupId> <artifactId>aviator</artifact

原创 CountDownLatch的簡單實現

1.   @Data public abstract class BaseLatch { private int limit; protected int running; BaseLatch(int limit

原创 jackson構建複雜Map的序列化

1.序列化複雜的Map時,可能需要下面的方式 import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapp

原创 .NET熔斷之Polly

1. Net Core 中有一個被.Net 基金會認可的庫 Polly,可以用來簡化熔斷降級的處理。主要功能:重試(Retry);斷路器(Circuit-breaker);超時檢測(Timeout);緩存(Cache);降級(FallBac

原创 smtp自動發送郵件demo

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.

原创 RSAUtils非對稱加密

import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.util.encoders.Base64; import org.spr

原创 java並行之parallelStream與CompletableFuture比較

1. import java.util.Arrays; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.conc

原创 計算日期之間的時間差

long daysDiff = ChronoUnit.DAYS.between(startDate, endDate);  

原创 面向註解的切面實現

1. package com.g2.order.server.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retent

原创 多個切面執行同一個方法

1.建立日誌切面 import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lan

原创 spring切面攔截實現

1.建立業務類(英雄戰鬥實現類) package com.g2.api; public interface Weapon { int attack(); String getName(); }   package

原创 日誌過濾器的實現

1.建立RequestWrapper類 import com.g2.order.server.utils.HttpHelper; import java.io.BufferedReader; import java.io.ByteArra