Redis协议(RESP)

通信协议(protocol) Redis 协议在以下三个目标之间进行折中: * 易于实现 * 可以高效地被计算机分析(parse) * 可以很容易地被人类读懂 网络层 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾。 请求 Redis 服务器接受命令以及命令的参数。服务器会在接到命令之后,对命令进 … 继续阅读

Redis的类型系统

Redis 对象系统 Redis 的每一种数据类型,比如字符串、列表、有序集, 它们都拥有不只一种底层实现(Redis 内部称之为编码,encoding), 这说明, 每当对某种数据类型的键进行操作时, 程序都必须根据键所采取的编码, 进行不同的操作。 redisObject 是 Redis 类型系统的核心, 数据库中的每个键、值,以及 Redis 本身处理的参数, 都表示为这种数据类型。 red … 继续阅读

MySQL行锁和表锁

MySQL储存引擎 MyISAM不支持事务,InnoDB支持事务。 只有InnoDB支持行锁,三个存储引擎都支持表锁。只有BDB支持页锁。 存储引擎 行锁 表锁 页锁 InnnoDB 支持 支持 不支持 MyISAM 不支持 支持 不支持 BDB 不支持 支持 支持 MySQL行锁 总结:InnoDB的行锁是针对索引加的锁,不是针对记录加的锁。并且该索引不能失效,否则都会从行锁升级为表锁。 行锁的 … 继续阅读

Netty中的零拷贝

最近看了一些netty的文章,对操作系统零拷贝和netty的零拷贝起了点兴趣,于是整理了相关的知识。 操作系统的零拷贝 传统的零拷贝指的是数据传输过程中,不需要CPU进行数据的拷贝。主要是数据在用户空间与内核中间之间的拷贝。 操作系统的零拷贝,这种方式需要四次数据拷贝和四次上下文切换: 1. 数据从磁盘读取到内核的read buffer 2. 数据从内核缓冲区拷贝到用户缓冲区 3. 数据从用户缓冲 … 继续阅读

零拷贝

什么是零拷贝 零拷贝主要的任务就是避免CPU将数据从一块存储拷贝到另外一块存储,主要就是利用各种零拷贝技术,避免让CPU做大量的数据拷贝任务,减少不必要的拷贝,或者让别的组件来做这一类简单的数据传输任务,让CPU解脱出来专注于别的任务。这样就可以让系统资源的利用更加有效。 操作系统的零拷贝 非零拷贝的拷贝过程: 零拷贝的拷贝过程: 如何减少数据拷贝的次数呢?一个很明显的着力点就是减少数据在内核空间 … 继续阅读

awk命令

最近上服务器看东西,看到有几个shell脚本都有awk命令,对这个命令不是很熟悉,于是整理了一下这个命令的用法。 Linux awk 命令 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 语法 1.命令行方式 … 继续阅读