原创 MongoTemplate 操作 mongodb
1. 增加依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boo
原创 模擬mybatis動態生成Mapper實例的實現
動態代理常用的有兩種實現方式,一是java自帶的方式,一種是cglib提供的 mybatis使用cglib的動態代理生成mapper實例 這裏模擬一下兩種實現 常用的mybatis操作數據庫的方式如下: 定義一下接口,裏面的每個方式對應 *
原创 stream之flatMap實踐
1.權限分配案例 需求: 公司的管理系統定義了若干個角色 公司的每個部門領導對每個角色分配自己部門的若干權限 現在需要綜合每個角色的所有權限 @Data @AllArgsConstructor @NoArgsCon
原创 DoubleCache
DoubleCache 指的是本地+redis兩份緩存模式 本地緩存過期之後從redis讀取新數據 redis緩存過期時,從業務裏讀取新數據. 設計原理: 利用 loadingCache的過期刷新來實現異步線程自動刷新,而不阻塞當前數據返回
原创 redis的hmset樂觀鎖的實現
1.lua腳本(集成實現了樂觀鎖,hmset ,expire等) local key=KEYS[1]; local oldVerion=tonumber(ARGV[1]); local seconds=ARGV[2]; local
原创 根據配置RedisProperties自動獲取RedisConnectionFactory
#單點配置 spring.redis.host=192.168.1.1 spring.redis.port=6379 #哨兵配置 #spring.redis.sentinel.master=common #spring.re
原创 redis限流器的設計
1.定義註解 import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.R
原创 使用HystrixCommand封裝http請求
1.引入依賴 要排除hystrix-core裏的archaius-core,否則報錯 <dependency> <groupId>com.netflix.hystrix</groupId>
原创 自定義的最簡單的可回調的線程任務CallbackableFeatureTask(模仿google的ListenableFutureTask)
1.使該Task繼承Callable,Runable import java.util.concurrent.Callable; import java.util.function.Consumer; public class C
原创 通用的規則匹配算法(原創)(java+.net)
1.java裏可以使用Spring的 Spel或者Google的Aviator 如果使用 Aviator 則添加以下依賴 <dependency> <groupId>com.googlecode.avia
原创 redis緩存切面實現(支持緩存key的spel表達式)
1.定義註解 package com.g2.order.server.annotation; import java.lang.annotation.ElementType; import java.lang.annotation
原创 使用join和CountDownLatch來等待線程結束
1.join方法的實現 join只能在start()之後調用, 調用線程會等待子線程結束後再運行 public class ThreadJoinTest { public static void main(String[]
原创 使用Unsafe來實現自定義鎖
1.使用Unsafe類 import sun.misc.Unsafe; class UnsafePackage { private static Unsafe unsafe; static {
原创 rabbitMQ實現推遲隊列
一. 使用原生Api 1.RabbitMQ 相關 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-clie
原创 簡單分佈式鎖的實現
1. 定義接口 public interface RedisLock { String OK_CODE = "OK"; String OK_MULTI_CODE = "+OK"; /** *