Files
springboot-scaffold/target/classes/com/example/scaffold/learning/AdvancedLearningController.class

46 lines
8.1 KiB
Plaintext
Raw Normal View History

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>=  8com/example/scaffold/learning/AdvancedLearningControllerdbDriverLjava/lang/String;h2
 java/lang/Stringcontains(Ljava/lang/CharSequence;)ZH2mysqlMySQL
postgresql
PostgreSQLUnknown 认证方案当前  !authType#可选%none | jwt | satoken'说明)none+无认证,开发测试用-jwt/$Spring Security + JWT标准方案1satoken3Sa-Token轻量级方案 567 89 java/util/Mapof}(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;; 缓存方案 = > cacheType@caffeine | redisBcaffeineD本地缓存,单机高性能FredisH分布式缓存,支持集群 5J 8KY(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;M 数据库OH2 | MySQL | PostgreSQLQ驱动SStringU$字符串,最基本的数据类型WHashY哈希,适合存储对象[List]列表,支持队列/栈操作_Seta!集合,去重、交并差运算c SortedSete有序集合,支持排名gBitmapi位图,海量布尔值存储k HyperLogLogm基数统计UV统计oGeoq地理位置,附近的人sStreamu流,消息队列 5w 8xU(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map; z {| cacheService)Lcom/example/scaffold/cache/CacheService; ~<00> <00><00>java/util/concurrent/TimeUnitSECONDSLjava/util/concurrent/TimeUnit;
<00><00><00> <00><00>'com/example/scaffold/cache/CacheService setStringG(Ljava/lang/String;Ljava/lang/String;JLjava/util/concurrent/TimeUnit;)V<00>操作<00>SET<00>key<00>value<00>ttl<00> <00><00>makeConcatWithConstants(J)Ljava/lang/String; 5<00> 8<00><00>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;
<00><00> <00><00> getString&(Ljava/lang/String;)Ljava/lang/String;<00>GET<00>存在
<00><00><00> <00><00>java/lang/BooleanvalueOf(Z)Ljava/lang/Boolean;<00> 缓存穿透<00>问题<00>3查询不存在的数据每次都打到数据库<00>解决<00>布隆过滤器 | 缓存空值<00>代码<00>$@Cacheable(unless="#result == null")<00> 缓存击穿<00>-热点key过期大量请求打到数据库<00>互斥锁 | 逻辑过期<00>#synchronized 或 Redis 分布式锁<00> 缓存雪崩<00>-大量key同时过期数据库压力激增<00>!随机过期时间 | 多级缓存<00>expire + random(60)<00> <00><00>
<00><00><00> <00><00>java/lang/Thread currentThread()Ljava/lang/Thread;
<00><00> <00><00>getName()Ljava/lang/String;
<00><00> <00><00>tryLockG(Ljava/lang/String;Ljava/lang/String;JLjava/util/concurrent/TimeUnit;)Z<03>
<00><00> <00><00>sleep(J)V<00>success<00>message<00>$获取锁成功,执行业务操作<00>resource<00>lockKey
<00><00> <00><00>unlock(Ljava/lang/String;)V<00>java/lang/InterruptedException
<00><00> <00><00> interrupt()V<00>error<00> 业务中断<00>!获取锁失败,资源被占用<00>Spring Security + JWT<00>优点<00>*标准方案、生态完善、社区活跃<00>缺点<00>-配置复杂、学习曲线陡、代码量大适用大型项目、企业级应用 复杂度⭐⭐⭐⭐⭐ Sa-Token 3轻量级、API简洁、功能丰富、文档友好 *相对较新、生态不如Spring Security中小型项目、快速开发⭐⭐ 选择建议 快速开发 企业级Spring Security 学习成本Sa-Token 更低 扩展性!Spring Security 更强
#$% &<00>java/lang/Object<init> ( )* redisTemplate9Lorg/springframework/data/redis/core/StringRedisTemplate;
,-. /0org/slf4j/LoggerFactory getLogger%(Ljava/lang/Class;)Lorg/slf4j/Logger; 2 34logLorg/slf4j/Logger;RuntimeVisibleAnnotations4Lorg/springframework/beans/factory/annotation/Value;${auth.type:none}${cache.type:caffeine}&${spring.datasource.driver-class-name} getConfig()Ljava/util/Map;CodeLineNumberTableLocalVariableTablethis:Lcom/example/scaffold/learning/AdvancedLearningController;dbType StackMapTable Signature7()Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;4Lorg/springframework/web/bind/annotation/GetMapping;/config
redisTypes /redis/types redisString6(Ljava/lang/String;Ljava/lang/String;J)Ljava/util/Map;JMethodParameters\(Ljava/lang/String;Ljava/lang/String;J)Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;5Lorg/springframework/web/bind/annotation/PostMapping; /redis/string"RuntimeVisibleParameterAnnotations6Lorg/springframework/web/bind/annotation/RequestParam; defaultValue60getRedisString#(Ljava/lang/String;)Ljava/util/Map;I(Ljava/lang/String;)Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>; cacheProblems/cache/problemsdistributedLock$(Ljava/lang/String;J)Ljava/util/Map;e Ljava/lang/InterruptedException; lockValuelockedZajava/lang/ThrowableJ(Ljava/lang/String;J)Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>; /redis/lock10 authCompare /auth/comparee(Lorg/springframework/data/redis/core/StringRedisTemplate;Lcom/example/scaffold/cache/CacheService;)V<clinit>
SourceFileAdvancedLearningController.java8Lorg/springframework/web/bind/annotation/RestController;8Lorg/springframework/web/bind/annotation/RequestMapping;/api/learning/advancedBootstrapMethodsprlock:t
uvw <00>x$java/lang/invoke/StringConcatFactory<00>(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; InnerClasses{%java/lang/invoke/MethodHandles$Lookup}java/lang/invoke/MethodHandlesLookup!#34)*{|!5 6<00>s7>5 6<00>s85 6<00>s9 :;<<00> <00>*<2A><07> <09><0F>'*<2A><11> <09><13>*<2A><15> <09><17>L*<2A>"$&(*,.02<>4<>4:*<2A><"?&ACEG<>I<>4L+"NP*<2A><01>4<>4<>=*
-."/61P5S2l>o;<00>C<00>1><00>?@6RAB A
CD5E<00>[sFG;<R(RTVXZ\^`bdfhjlnprt<>v<>=P> (?@CD5E<00>[sHIJ<o #*<2A>y+,!<21>}<7D><00><12><12><12>+<12>,<12>!<21><00><00><00><>=
d e>*#?@#<00>#<00>#<00>KL <00><00><00>CM5N<00>[sOPQQQRsSTU<<00>%*<2A>y+<2B><00>M<12><12><12>+<12>,<12>,<2C><04><03><00><><00><>=o pt!p> %?@%<00> <00>BM<02>








<EFBFBD>








L<00>CV5E<00>[sOPQW;<q 7<12><12><12><12><12><12><12><>4<12><12><12><12><12><12><12><>4<12><12><12><12><12><12>ĸ4<>4<>=}~<00>0<00>3}> 7?@CD5E<00>[sXYZ<<01>
<00>+<2B><00>:<04>ȶ<00>:*<2A>y <20>}<7D><00>6<06>\ָ<00><12><04><00><12><12><12>+<12><04><00>:*<2A>y<04><00><07>:<07>ȶ<00><12><03><00><12><12><>I:*<2A>y<04><00><08>: *<2A>y<04><00> <09><12><03><00><12><12><12>+<2B>4<>&BN<00>&BqNeqqsq=R<00><00><00>!<00>&<00>,<00>/<00>=<00>B<00>K<00>N<00>P<00>V<00>e<00>n<00>q<00>|<00><00><00><00><00><00>>HP![\<00>?@<00><00><00><00>K<00><00><00>]!o^_B<03>N


<00>b` L <00><00>Cb5N<00>[scPQQRsde;<<00> W<12><12><12><12><12><06><00><12>
<12> <10><00> <20><00><>4<>=<00><00>2<00>P<00>S<00>> W?@CD5E<00>[sf&g<M*<2A>"*+<2B>'*,<2C>y<>=> ?@)*{|L ){h<00><! <02>+<2B>1<>=ij5kl<00>[smnsosqy
z|~