- 博客(18)
- 问答 (1)
- 收藏
- 关注
原创 redis五种数据结构的使用场景
高版本的redis其实不止5中数据结构了,常见的有string,list,sort,set,zset。先聊Hash ,Hash结构使用场景 :存放购物车中订单 。一个用户,一个购物车,很多个商品。(1)。以用户id为key,(2)。商品id为field(3)。商品数量为value添加商品 : -- hset cart(key) :1001 1008(field) :1(value)删除商品: --hdel cart :1001 1008Hash的优缺点:优点:1. 同类数
2022-05-11 00:52:22 559
原创 ThreadLocalMap原理源码级讲解
1.7版本和1.8版本是不一样的。1.7版本:ThreadLocal里面维护一个TheradLocalMap,底层是Map,再底层是entry对象,(key,value)形式,key是Thread,value是需要隔离的变量。1.8版本 :每个Thread都维护了一个ThreadLocalMap,底层是Map,再底层是entry对象,entry中存储ThreadLocal是key,value是需要隔离的变量。1.8版本的好处 :1 .每个Map存储的Entry数量很少,因为1.7版本
2022-05-10 01:24:52 3447
原创 从CAP角度分析redis分布式锁和zookeeper锁区别
前言:在分布式系统中,一致性( c )意味着每次读取都会获取最新的写入数据或异常,可用性( a )意味着可以对每个请求得到非异常的响应,而不保证获取最新的写入数据。 分区容错( p )意味着即使节点之间的网络异常,系统也将继续操作。redis是AP架构,所谓牺牲的一致性,如果reid在主从同步锁的key时,出现挂机情况,那这样是会丢失锁的。出现主从架构锁是失效问题解决方案:RedLock (红锁方案已经被淘汰) : 底层实现手段和zookeeper类似,客户端发送setnx指令,同时向多..
2022-05-02 01:58:51 1761
原创 Java申请堆外内存之后,如何释放
因为Jvm无法管理堆外内存,所以如何回收呢?首先是堆外内存如何申请的呢?通过unsafe中的allocateMomory方法,参数为size(申请的堆外内存大小),并返回内存地址base;清除时,创建Cleaner对象,调用Cleaner.creat(this(当前堆外内存Buffer),内存释放器。)内存释放器Deallocator 的底层是有个run方法,调用unsafe.freeMemory去释放空间...
2022-04-29 00:11:01 990
原创 SpringMVC执行流程
一、首先,我们先来认识一下SpringMVC的主要组件前端控制器(DisatcherServlet):接收请求,响应结果,返回可以是json,String等数据类型,也可以是页面(Model)。处理器映射器(HandlerMapping):根据URL去查找处理器,一般通过xml配置或者注解进行查找。处理器(Handler):就是我们常说的controller控制器啦,由程序员编写。处理器适配器(HandlerAdapter):可以将处理器包装成适配器,这样就可以支持多种类型的处理器。视图解析器(V
2022-04-26 22:37:21 3894
原创 Mysql和redis数据同步解决方案
mysql集群1 主从复制 解决单机故障问题2 高可用 对外提供一个主节点,投票选举机制.3 cluster集群,多个主节点怎么优化单个主节点的处理能力?从主从复制出发主节点 master 写操作,数据变更,binlog记录。会有一个dump线程和从节点的I/O线程交互,dump将binglog中具体数据传给IO线程。从节点,slave 开启I/O线程,从主节点读取binglog,将其写入 relay log (中继日志),再通过sql线程,读取relay log ,写入从库。
2022-04-24 23:36:17 5322 2
原创 JVM调优
jdk1.8默认的PS+PO回收器;ParallelGC 默认的是 Parallel Scavenge(新生代)+ Parallel Old(老年代)。什么是调优:1 .根据需求进行JVM规划和预调优2 .优化运行JVM运行环境(慢,卡顿)3. 解决JVM运行过程中出现的各种问题.linux指令top 查看那个进程的CPU占用比较高左边第一列是进程号。top -Hp 进程号 查看进程中具体哪个线程占用的CPU高左边第一列是线程号,将线程号转成16进制,去jstac
2022-04-24 01:42:20 121
原创 redis的过期键删除策略
Redis 中 key 的过期删除策略Redis 中提供了三种过期删除的策略1、定时删除在设置某个 key 的过期时间同时,我们创建一个定时器,让定时器在该过期时间到来时,立即执行对其进行删除的操作。优点:通过使用定时器,可以保证过期 key 可以被尽快的删除,并且释放过期 key 所占用的内存缺点:对 CPU 是不友好的,当过期键比较多的时候,删除过期 key 会占用相当一部分的 CPU 资源,对服务器的响应时间和吞吐量造
2022-04-23 23:50:15 5491
原创 GC的演化
随着内存大小的不断增长而迭代:- Serial 和Serial Old单线程 STW (stop the world)年轻代和老年代都是单线程回收,回收期间,其他线程(业务线程)全部停止,不准创建对象,垃圾等。- parallel 并行多线程,多线程回收垃圾,但是回收期间,其他线程依旧是等待。- Concurrent GC 包括(CMS,ParNew等): GC线程和业务线程可以同时运行。ParNew:工作在年轻代的垃圾回收线程。ParNew收集器就是Serial收集器的多线程版本,它也是一
2022-04-23 23:48:48 275
原创 常见的负载均衡算法
1.轮询法轮询法即逐个请求,对于每一个请求,则在地址列表中依次选择一个地址,因此在请求数目上的分配相对比较均衡。2.随机法随机法则是随机分配给地址列表中的任一服务器。这个例子则通过随机生成列表长度内的一个整数,然后获取其地址来实现的。3.源地址哈希法 该方法通过对发送请求的客户端的ip地址进行求hash值,并对服务地址列表长度取余,选择结果对应的服务器。该方法保证了同一客户端ip地址会被映射到相同的后端服务器上,直到后端服务器列表发生了改变。根据这个特性,可以在服务消费者和...
2022-04-16 12:13:06 1764
原创 Spring事务失效场景
Spring事务的原理是AOP,进行了切面增强,那么失效的根本原因是这个AOP不起作用了。1.发生自调用,类里面使用this调用本类的方法,此时这个this对象不是代理类,(不是Autowried注入进来的spring代理对象)。2.方法不是public的,如果非要用在非public上,开启Aspect代理模式。包括final和static修饰方法,也都会事务失效。3.数据库是否支持事务,4。异常被捕获,没有抛出,事务不会回滚。5 没有被spring容器管理,我们通过@Control
2022-04-16 10:57:30 727
原创 Spring事务的传播机制
For Example:方法A是一个事务方法,A执行过程中调用了B方法,那B方法有无事务,以及对事务的处理方式不同,都会对A的事务造成影响。同时A的事务也会对B的事务产生影响。所有的参数都是修饰被调用方(B)1. required (默认) : 如果当前(调用方A)没有事务,则自己(被调用方B)新建一个事务,如果当前存在事务,则加入事务。解释: 如果A有事务,A调用B,则B会新建事务。 如果A没有事务,B有事务,那么A就会加入B事务。2. support : A调用B, 如果当前存在事.
2022-04-16 10:47:40 390
原创 redis的持久化
RDB和AOF持久化RDB是redis的默认选择,启动redis --> 定时任务(默认60s,一万条数据等作为阈值,触发线程)(把内存数据写入磁盘)-->产生持久化文件 -->关机(内存数据丢失)-->开机会读取磁盘回到内存。 大概流程RDB持久化原理:redis会单独创建一个fork子进程,它与当前进程一模一样(所有数据,变量,环境变量,程序计数器等)都和原进程一样,会先把数据写到临时文件(dump.rdb),待持久化行为结束,再将新的临时文件替换上次的旧持久
2022-04-15 23:33:40 689
原创 InnoDB和MyISAM的区别
1.InnoDB默认是支持事务的,另一个 不支持事务。 这是被淘汰的最重要原因吧,2.InnoDB支持外键,另一个不支持。3. InnoDB是聚集索引,另一个是非聚集索引。4.InnoDB不保存表的具体行数,select count(*)需要全表扫描, 而MyISAM有个函数,读取一下就知道了5.InnoDB最小的锁粒度是行锁,MYSAM最小的是表锁,性能不太行。6.读写修改频繁,用InnoDB,仅仅查询用MyISAM,效率更高。取决于业务......
2022-04-15 20:50:14 144 1
原创 Sync锁详解
实际上1.6之前的Sync锁是性能不太好的,是非常重的锁(重量级锁)。重量级锁 :只有一个线程能获取锁,其他线程被迫进入阻塞队列,空等,消耗cpu资源。实际业务中 : 虽然为了保证安全必须加锁,但是并不一定会使用很多线程 ,所以引入了偏向锁的概念: 让下一次锁资源竞争时,更容易把锁分配给上一次抢到资源的锁 (example:给上次的线程加个id,下次去抢线程时直接报上姓名,让锁能识别这个线程,ok,再分给它资源)这样可以解决很多只有一个线程的业务,增加效率。如果很多个线程开始抢资源,ok,这
2022-04-15 00:37:18 1089
原创 CAS底层
CAS解决原子性问题:底层通过unsafe类,是native关键字修饰的,Java调用本地操作系统,openJdk里面能看到,C++写的,x86结构(inter的CPU),底层是用lock锁(多核CPU的情况下,cmpxchgq (应该叫compare And exchange))来保证原子性的。CAS解决ABA问题:通过原子类引用 AtomicStampedReference等等 ,给资源加上版本号(version),保证安全...
2022-04-14 23:58:35 778
原创 Mysql三种日志 (转载)
日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志。binlogbinlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog是mysql的逻辑日志,并且由Server层进行记录,使用任何存储...
2022-04-14 21:46:57 1029
空空如也
flickr的那个Api文档,woeid怎么获取的呀
2021-11-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人