- 博客(16)
- 资源 (6)
- 收藏
- 关注
原创 线程
代码里如何实现读写分离 Spring提供了AbstractRoutingDataSource类用于数据源的路由,重写其determineCurrentLookupKey方法,返回路由key,key对应就是数据源bean对象id 实现切换数据源的方式有多种,本质上都是操作AbstractRoutingDataSource.determineCurrentLookupKey的返回值 AOP切面,切入所有service层,加入判断,如当前调用方法类是在XXX包下则是主库,设置路由方法的返回值 重写Mybat
2020-09-06 18:03:36
168
原创 杂
redis hash大key怎么优化?怎么查找大key 大key有两种情况,一种是hash结构key下面挂了很多的fileld和value,另一种是单纯的key很多 这种属于分散操作 第一种情况: 用key的fileId的哈希值对一个容量取模,得到一个0到容量的数,然后再加拼接上key,得到新的key,并以新key设置,获取时候同样要先用fileld的哈希值取模 newKey = key + hash(field) % 10000; hset(newKey, field, value); hget(newK
2020-09-06 18:02:20
275
原创 Aop
Spring AOP AOP相关所涉及到的概念 连接点 程序执行过程中全部可植入逻辑的点,spring仅支持方法级别的连接点,所以连接点就指方法 切点 切点用来选择连接点 通知 具体执行逻辑 切面 抽象概念,是连接点、切点、通知的包装 织入 织入是个动作,就是在切点的引导下,将通知逻辑加到连接点上 以XML配置形式为例,在配置<aop:config>标签时,已经包含了以上除"织入"外的所有信息! Spring初始化时,会将以上信息加载
2020-08-30 17:02:30
192
原创 redis事务、队列
Redis消息队列 生产者/消费者模式(PUSH/POP) 基于阻塞队列实现 BRPOP key [key …] timeout 超时时间内,从队列右侧阻塞式弹出元素 BLPOP key [key …] timeout (可先生产再消费,也可消费者先阻塞获取等待生产者入队) 入队 127.0.0.1:6379>RPUSH my_list “Spark” “hadoop”"hive" (integer) 3 127.0.0.1:6379>LRANGE my_list 0 -1 1)“Spar
2020-08-30 16:57:58
322
原创 REDIS分布式锁
####锁的基本实现 单Redis节点分布式锁 加锁: 使用 SET key value [EX seconds ][PX milliseconds][NX|XX] 命令 EX second :设置键的过期时间为 second 秒。 SET key value EX second 。 PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 。 NX :只在键不存在时,才对键进行设置操作。 SET key va
2020-08-30 16:56:59
168
原创 REDIS
###缓存穿透 指查询一个一定不存在的数据,缓存不命中走DB,大量请求落到DB上把数据库压垮 解决方式 上游限流,如网关限流,接口调用次数限制 RateLimiter(guava令牌桶限流) 可用在网关上,可用在获取缓存的公共方法上 public static T cacheHelper(String key, Supplier supplier) 缓存空对象,这样可以请求不落DB,但业务层需要加上相应空值判断 布隆过滤器,内部存储不存在的key,但是在新加key时要去除布隆过滤器里相应的
2020-08-30 16:56:26
455
原创 kafka
消息以主题(Topic)来分类,主题数据由多个Partition分区共同存储,根据分区策略写入不同的分区,分区以文件追加形式顺序写入,单个Parition内是保证消息有序。 主题以消费组形式消费,一个主题可以被多个消费组消费,并且只会被组内某一个消费者消费,本质上是一个topic下的一个Partition只会被一个消费者消费,即分区是和消费组里的某个消费者绑定的! 所以,当组内消费者数量大于分区数时,多出来那个就不会收到任何消息,消费者数量的增减、分区数的增减都会触发重新绑定(Reblance) 同步策略
2020-08-30 16:47:51
222
原创 JVM
.class文件什么情况下会被加载? JVM启动进程后,会寻找程序入口,包含Main方法的类,Main方法执行过程里用到哪些类就加载哪些类 正常的war程序如何加载的? Tomcat本身是一个java程序,Web程序只是他下面的子程序,目前不知道他的加载机制,Tomcat搞一个Main方法作为程序入口也不是不可以 .class文件加载的过程 加载主要分成3个部分 加载 将静态文件数据加载到方法区,同时在堆内存生成一个代表对应类的Class对象 链接 验证 确保Class文件内容符合java规范
2020-08-30 16:47:05
184
原创 dubbo
dubbo协议 dubbo负载均衡策略及实现方式 Random 随机 RoundRobin 轮循 平均分布,但是存在请求累积的问题 LeastActive 最少活跃,处理能力慢的服务接收更少的请求 每个服务维护一个int类型活跃数计数器,开始处理时+1处理完成时-1。当A服务开始处理请求,计数器加1,此时A还未处理完成。而B服务接受到请求后很快处理完毕。那么A、B的活跃数分别是1、0。当又产生了一个新的请求,则选择B服务(B活跃数最小),减少慢服务收的请求 ConstantHash 一
2020-08-30 16:44:24
168
原创 Disruptor
高性能内存队列-Disruptor Disruptor是基于环形数组的内存消息队列,相比JDK提供的阻塞队列 效率更高 应用场景更多,除基本的发布订阅/点对点模式外,还可实现消费者间依赖,实现更复杂业务 一、为什么高效 无锁化,普通阻塞队列ArrayBlockingQueue(为了防止生产者速度过快导致内存溢出,只能选择有界队列,同时为提高读取效率,JDK内只有它适合做队列),使用的是重量级锁Lock,生产者消费者put/take间是互斥关系,头尾指针竞争激烈,竞争将导致线程经常挂起,效率很低。D
2020-08-30 16:43:01
347
原创 职业理念
教育观 素质教育的内涵 素质教育以提高国民素质为根本宗旨 素质教育是面向全体社会成员的,不仅适用于基础教育而且适用于高等教育、社会教育、终身教育 素质教育是面向全体学生的教育 素质教育观强调在教育中每个人都得到发展,而不是只注重一部分人,要求教师做到教育公正 通过集体讨论的方式,分析表达观点,使每一位学生都认识到了自己的优缺点 赵老师没有因某某原因就放弃问题儿童,反而对他格外关注,帮助他在各方面得到提升 素质教育是促进学生全面发展的教育 实施素质教育就是通过德智体美劳(五育)的有机融合,来实
2020-07-12 20:19:43
365
原创 杂七杂八
----------httpclient----------- ```java package util; import java.util.List; import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import org.apache...
2019-10-20 10:28:58
206
原创 多级权限菜单遍历
单节点多级子节点 public class Test { static List<Menu> menus = Arrays.asList( new Menu(1, null, "一级菜单"), new Menu(2, 1, "二级菜单_1"), new Menu(3, 1, "二级菜单_2"), new Menu(4, 3, "三级菜单_1"), ne...
2019-10-20 10:18:20
513
原创 ES API基础
ES基本使用 package com.paic; import java.net.InetAddress; import java.text.MessageFormat; import java.util.Date; import java.util.Iterator; import java.util.Map; import org.elasticsearch.action.admin.in...
2019-10-07 18:56:21
361
1
java NIO 视频教程
2017-09-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅