自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 redis哨兵模式

背景:redis是主从集群模式,如果主库挂了 读操作的话还可以进行,但是写操作就没法进行,所以需要一个新主库,那么哨兵模式的这个哨兵就是需要负责监控,选主和通知。哨兵的

2021-05-06 09:54:12 113

原创 redis的高可靠性

redis的高可用性保障措施: 增加副本的冗余量。redis提供了主从库模式,保证数据副本的一致性,主从库采用的是读写分离的方式。redis的主从库模式:读操作:主库和从库都可以接受请求 写操作:首先主库进行写操作,然后主库将写操作同步到从库。主从库第一次进行数据同步:数据同步对主库带来影响:1.fork子线程这个过程会阻塞主线程处理正常请求,生成RBD文件,2传输rdb文件,会给主线程的宽带资源带来压力。解决方式:可以通过‘主 - 从 -从’ 这种级联方式将主.

2021-05-04 17:34:16 764

原创 redis关于rdb

背景:因为aof的进行故障恢复的时候 需要执行每一行的命令行,如果操作日志非常多的话,redis就会恢复的很缓慢,就会影响到正常的redis使用。这不是理想的结果。所以在redis的文件恢复操作过程中会有另一种文件产生就是RDB,与AOF文件相比,RDB记录的某一个时刻的redis数据快照,而不是操作记录。当redis宕机的时候 可以直接把RDB文件读入到内存中去。生成RDB的方法有两种方式可以生成RDB1 save 在主线程生成RDB快照,会造成阻塞2 bgsave:创建一个子线.

2021-04-03 20:06:22 214

原创 Redis的AOF日志

背景:redis的数据是在内存中来完成的,但是一旦redis的服务器重启,数据就会丢失。所以需要一种数据恢复机制。redis的数据恢复机制有两种,一种通过AOF(Append only file)文件,另一种是通过RDB快照的方式。...

2021-03-29 09:59:35 357

原创 redis的多路复用连接机制

以上图是redis的处理流程。阻塞机制:以 Get 请求为例,SimpleKV 为了处理一个 Get 请求,需要监听客户端请求(bind/listen),和客户端建立连接(accept),从 socket 中读取请求(recv),解析客户端发送请求(parse),根据请求类型读取键值数据(get),最后给客户端返回结果,即向 socket 中写回数据(send)。下图显示了这一过程,其中,bind/listen、accept、recv、parse 和 send 属于网络 IO 处理,而 get ..

2021-03-28 20:22:52 419

原创 redis为什么采用单线程

Redis的单线程任务: redis的单线程指的是 redis的网络IO和键值对的读写是由一个现成来完成的,这也是redis对外提供服务的主流程。但是redis的其他功能,比如持久化,异步删除,集群数据同步等都是由额外的线程来完成的。Redis为什么用单线程 在我们采用多线程的情况下,如果没有良好的系统设计,得到的效果其实并不好。在redis的场景下,会存在共享同一个数据结构的场景,当多个线程共享同一个数据结构的时候,为了保证共享资源的正确性,就需要额外的机制来保障,...

2021-03-28 14:05:45 271

原创 redis的快速列表

redis使用快速列表的背景:早起redis的list的存储结构是ziplist和linkedlist,也就是说元素少的时候用的是ziplist,元素多的时候用linkedlist。使用链表带来的问题是prev和next就要占据16个字节,(64位系统中的指针是8个字节), 每个节点的内存都是单独分配的,这样做的话 会加剧内存的碎片化。...

2021-03-27 16:56:54 93

原创 redis中的压缩列表

使用场景: 为了节约内存空间,在zset和hash容器对象比较少的时候,会采用压缩列表(ziplist)来储存。使用条件:有序集合保存的对象数量小于128个 有序集合保存的所有元素的成员都小于64字节压缩列表的数据结构: zltail_offset 表示最一个元素距离压缩列表启始位置的偏移量,是为了能够列表可以进行双向便利,从后往前遍历。比如说倒数第二个的元素就可以拿ztail_offset - 最后一个元素的prevlen的值。entry的数据结构:...

2021-03-27 15:59:44 947

原创 redis中的跳跃表

背景 因为redis中的有序列表的查询时间复杂度是O(n),并且跳跃表支持平均O(logn)和最坏O(N)的时间复杂度的节点查找,并且在大部分情况下,跳表的查询效率可以和平衡树媲美,并且跳表的实现比平衡书要来的更加简单。...

2021-03-04 10:08:59 150 1

原创 redis数据结构-String

简述: redis的内部并没有使用c语言传统的字符串表示,而是使用了redis自己定义的sds(simple dynamic string) 的抽象类型,并且将sds用作redis的默认字符串。SDS的定义:对于上图中sds的解释:free属性的值是0,表示这个sds分配的字节数组没有未被使用 len属性的值是5 表示sds保存了一个5字节长的字符串 buf的属性是一个char类型的数组,结尾则保持了c语言的特性 用'\0' 结束...

2020-12-11 09:57:53 59

原创 final关键字

1. Final 三种应用场合:数据,方法,类 1.1. Final 数据 常数final  数据类型必须属于 基本数据类型 且被 初始化,用final关键字修饰。无论是static还是final字段,都只能存储一 个数据,且不得改变,变量名字必须全部大写;句柄final  final会将句柄变成一个常数。声明时,必须将句柄初始化一个具体对象。且永远不能指向另一个对象。然而,对象是可以修改的; 空...

2018-03-22 09:26:53 160

原创 对象的共享

概要:在访问共享的可变状态是需要正确的管理。可以通过同步来避免多个线程在统一时刻访问相同的数据。再加上学会如何共享和发布对象,从而使它们能够安全地由多个线程同时访问。——》形成了构建线程安全类。1,可见性:当主线程首先写入一个值以后,然后在没有同步的情况下写入另一个值,那么读程序看到的顺序可能与写入的顺序完全相反。在没有同步的情况下,编译器,处理器以及运行时都可能对操作的执行顺序进行一些想不到的调...

2018-03-22 09:25:21 153

原创 关于volatile的详解

volatile是一种稍弱的同步机制,用来确保变量的更新操作通知到其他线程。当变量声明为volatile类型后的好处是:1,编译器与运行时会注意到这个变量是共享的,不会将该变量上的操作与其他内存操作一起重排序。2,该变量不会魂村在寄存器或者其他处理器不可见的地方,因此在读取volatile类型的变量是总会返回最新写入的值。从内存的角度来看:写入volatile变量相当于退出同步代码块,读取vola...

2018-03-22 09:24:36 235

原创 Class类型信息之类型转换前检查

在java类型转换的时候经常会遇到类型转换。例如Circle是Shape的子类(Circle extends Shape)。那么Circle的对象转换成Shape的对象则是向上转换。那么Shape类型向Circle类型转换则为向下转换。a, 在java中类型转换中向上类型转换是可以被接受的。拿上面的例子中来说,由于编译器知道Circle肯定是一个Shape,所以编译器允许自由的做向上类型的赋值操作...

2018-03-22 09:22:02 522

原创 JAVA反射原理

反射的概念: 反射,一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。java反射使得我们可以在程序运行时动态加载一个类,动态获取类的基本信息和定义的方法,构造函数,域等。除了检阅类信息外,还可以动态创建类的实例,执行类实例的方法,获取类实例的域值。反射使java这种静态语言有了动态的特性。(此段纯属copy,写的不错).a : java反射机制是围绕Class类...

2018-03-22 09:20:54 334

原创 ReflectionData属性详解

a, 为了提高反射的性能,缓存显然是必须的。class类内部提供了一个ReflectionData内部类用来存放反射数据的缓存,并声明了一个reflectionData域,由于稍后进行按需延迟加载并缓存,所以这个域并没有指向一个实例化的ReflectionData对象。在Class类的代码中可以看出来:private static void checkInitted() { if (init...

2018-03-22 09:20:13 1423

原创 类型信息入门

jvm使用ClassLoader将字节码文件(class文件)加载到方法区内存中:Class c = ClassLoader.getSystemClassLoader().loadClass("com.mypackage.MyClass");关于ClassLoader会有一篇文章来详细介绍的。可见ClassLoader根据类的完全限定名加载类并返回了一个Class对象,而java反射的所有起源都是...

2018-03-22 09:18:43 562

转载 关于ClassLoader分析

2018-03-22 09:16:40 119

原创 散列与散列码

首先要理解equals方法需要满足的几个条件:自反性 x.equals(x) 一定返回true对称性 x.equals(y)返回true,则y.equals(x) 也返回true传递性 x.equals(y)返回true,y.equals(z)返回true,则x.equals(y)返回true一致性 如果对象中的信息没有改变,x.equals(y)要么一直返回true,要么一直返回false对任何...

2018-03-22 09:10:52 1007

原创 HashMap分析

在打开HashMap类的源码的时候我们可以先看:HashMap的变量transient Node<K,V>[] table; HashMap存储对象的实际实体,由Key,value,hash,next组成。 Node类其实就是hashmap的内部类,一般 情况下内部类用于定于这个类的属性的。transient Set<Map.Entry<K,V>>...

2018-03-22 00:43:21 193

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除