摘要:TCP粘包、拆包问题 熟悉tcp编程的可能知道,无论是服务端还是客户端,当我们读取或者发送数据的时候,都需要考虑TCP底层的粘包个拆包机制。 tcp是一个“流”协议,所谓流就是没有界限的传输数据,在业务上,一个完整的包可能会被TCP分成多个包进行发送,也可能把多个小包封装成一个大的数据包发送出去,这
阅读全文
摘要:1、使用netty需要使用到下面的java包 netty-all-5.0.0.Alpha2.jar 我们来看下面具体的代码 1. 创建一个ServerBootstrap实例 2. 创建一个EventLoopGroup来处理各种事件,如处理链接请求,发送接收数据等。 3. 定义本地InetSocket
阅读全文
摘要:redis的事务是支持很简单,基本没有啥用我们来看下面的列子 我们开启一个事务,在事务中执行了age 加1,set a4 ,还有对一个字符串进行加一,对字符串加1导致了事务失败,按道理incr age在事务操作中会失败,但是这里age的值已经加上了,所以redis的事务是不可靠的,当成了解 redi
阅读全文
摘要:redis的哨兵模式 现在我们在从服务器1.222上让该从服务器作为哨兵 首先将redis安装包文件下的sentinel.conf文件复制到/usr/local/redis/etc目录下 然后修改sentinel.conf文件 mymaster是名称可以顺便, 192.168.1.121是主服务器的
阅读全文
摘要:主服务负责数据的写,从服务器负责客户端的高并发来读 创建主从复制 clone不能让上面的mac地址不能重复,IP地址也不能重复 122和123是从服务器,我们修改二者的配置文件 其中 192.168.1.121是主服务器的IP地址,6379是端口 这样启动三个服务器就可以了,主服务器用于写,从服务器
阅读全文
摘要:设置name的过期时间是20秒 redis默认是16个数据库,默认是将数据存储在第0个数据库中 因为默认是0,当你选择其他数据的时候,是没有值的
阅读全文
摘要:set集合是无序的,不能存在重复元素 bbb吃重复元素,是不能添加成功的 2 接下来分析zset,是有序的,你在添加的时候要指定元素的序列号 上面的 3 4 5 6 就是指定的元素的序列号 withscores就是将元素的序列号显示出来,按照序号的大小进行显示
阅读全文
摘要:1、lpush的使用方法 2、rpsuh的使用方法 3、删除元素 lrem中2值的是删除2个集合中的“b”元素 4、 通过上面的分析,redis中的list比较类型java的qunue队列
阅读全文
摘要:上面usr就是hash的名字,usr这个hash中存储了key 为id、name和age的值 一个hash相当于一个数据对象,里面可以存储key为id name age的值 2、批量插入一个hash数据
阅读全文
摘要:2、修改redis.conf的配置文件有两个地方 a、将daemonize设置成true支持后台启动 b、将redis的数据库文件保存到 下面的目录 3、启动redis服务器 4、操作redis ,给redis添加数据,首先要进行redis的客户端才能操作redis,执行下面的命令,进行redis客
阅读全文
摘要:1、首先类的实例化、static、父类构造函数执行顺序 我们来看下面的程序代码: 程序的运行结果是: main app run..I`m a static {} from class A..I`m a static {} from class B..top of A() a1=8 a2= a3=9g
阅读全文
摘要:堆放实例对象,栈放实例对象的引用,方法区存储创建类的信息 上面堆和垃圾回收的关系,垃圾回收回收的是堆内存的数据,s0和s1区域, 例如现在我们要清除s0中的堆对象,将s0中正在运行的对象从s0区域移动到s1区域中,然后将s0中要被清除的堆对象清除,现在对象都存储在s1中,s0中为空,即下来要清除s1
阅读全文
摘要:1 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣服,自己亲自干这件事,别的事干不了。 2 异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(异步的特点就是通知) 告诉朋友自己合适衣服的尺寸,大小,颜色,让
阅读全文
摘要:AsynchronousServerSocketChannel assc.accept(this, new ServerCompletionHandler()); 第一个参数是服务器的处理类,第二个参数当服务接受到客户端的连接之后,用来处理客户端的连接 这里accept并不是一直阻塞的,会继续向下面
阅读全文
摘要:记住NIO在jdk1.7版本之前是同步非阻塞的,以前的inputsream是同步阻塞的,上面学习完成了Buffer现在我们来学习channel channel书双向的,以前阻塞的io的inputstream都是单向的 channel有四种连接状态 connect accept read write
阅读全文
摘要:在NIO同步非阻塞的场景中和原来同步阻塞最大的却别就是引入了上面的Buffer对象,现在我们来学校上面的BUffer对象 我们来看看程序的代码: 程序的输出结果是: 使用flip复位:java.nio.HeapIntBuffer[pos=0 lim=3 cap=10]容量为: 10限制为: 3获取下
阅读全文
摘要:在上面一节中,服务端收到客户端的连接之后,都是new一个新的线程来处理客户端发送的请求,每次new 一个线程比较耗费系统资源,如果100万个客户端,我们就要创建100万个线程,相当的 耗费系统的资源,服务器是没有办法支持这样多的客户端进行连接的 我们可以采用线程池的方式来实现:提高 阻塞模式:列如客
阅读全文
摘要:客户端的代码: 我们来对上面的功能进行总结:
阅读全文
摘要:1、首先介绍下那个时候使用RingBuffer,那个时候使用disruptor ringBuffer比较适合场景比较简单的业务,disruptor比较适合场景较为复杂的业务,很多复杂的结果必须使用disruptor 我们来看看多消费者多生产者的情况 程序运行的效果是: 当前消费者: c1,消费信息:
阅读全文
摘要:先c1和c2并行消费生产者产生的数据,然后c3再消费该数据 我们来使用代码实现:我们可以使用Disruptor实例来实现,也可以不用产生Disruptor实例,直接调用RingBuffer的api来实现,不清楚看上一节使用的api函数workpool和BatchEventProcess来辅助实现消费
阅读全文