摘自《Netty权威指南》 Java NIO是 JDK1.4 引入的,弥补了原来BIO的不足 概念缓冲区 Buffer在 NIO 库中,所有数据都是用缓冲区处理的,任何时候访问 NIO 中的数据,都是通过缓冲区进行操作的。 最常用的缓冲区是 ByteBuffer,提供了一组功能用于操作byte数组, ...
Java BIO编程和伪异步I/O编程
摘自《Netty权威指南》 BIOBIO通信模型: 问题显而易见:每个客户端都需要创建一个线程,并发访问量大时,系统会出现堆栈溢出、创建新线程失败等问题 代码演示功能:时间服务器 服务端:public class TimeServer { public static void ma ...
Nginx之Openresty最佳实践
我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者对其望而生畏。为了开发人员方便,所以接下来我们要介绍一种整合了Nginx和lua的框架,那就是OpenRe ...
Redis集群主从复制原理
复制的作用是把redis的数据复制多个副本部署在不同的服务器上,如果其中一台服务器出现故障,也能快速迁移到其它服务器上提供服务。 主从复制就是我们常见的master/slave模式,主redis可以进行读写操作,当写操作导致数据发生变化时,会讲数据同步到从reids,而一般情况下,从redis是只读 ...
Redis Cluster
即使是使用哨兵,此时的redis集群的每个数据库依然存有集群中的所有数据,从而导致集群的总数据存储量受限于可用存储内存最小的节点,形成木桶效应。因为redis是基于内存存储的,所以这个问题尤为突出。 在redis3.0之前,我们是通过在客户端去做分片,通过hash的方式对key进行分片存储。分片虽然 ...
Redis中字符串的二进制安全
什么是二进制安全 二进制安全是指,在传输数据时,保证二进制数据的信息安全,也就是不被篡改、破译等,如果被攻击,能够及时检测出来。 Redis中的二进制安全C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外,字符串里面不能包含空字符,否则最先被程序读入的空字符将被误认为是字 ...
单线程的Redis性能为什么这么快
Redis采用了一种非常简单的做法,单线程来处理来自所有客户端的并发请求,Redis把任务封闭在一个线程中从而避免了线程安全问题。 至于为什么是单线程的,官方的解释是,CPU并不是Redis的瓶颈所在,Redis的瓶颈主要在机器的内存和网络的带宽。 Redis采用的是基于内存的、单进程、单线程模型的 ...