Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

Redis 客户端与服务端通信协议

Redis 客户端与服务端通信协议

背景在跟踪REDIS服务端处理命令流程的时候,发现在服务端processInputBuffer里收到的字符串并非是在客户端输入的,而是进行了某种编码。比如,客户端输入get a,实际服务端打印出来的是buf= *2$3get$1a最开始认为是在服务端某段代码对客户端送过来的字符串进行处理,可能是出于某些考虑,后来发现从SOCKET读取过来就已经转换过了,所以就应该是客户端和服务端的通信协议,我对这个就开始产生了很浓厚的兴趣,*和$符号必定是有特殊意义的。客...
Map对象用JSON反序列化的方法

Map对象用JSON反序列化的方法

我们项目组的A系统依靠B系统写入Redis中的数据对象工作。这个对象是一个Map对象,Map对象写入Redis很简单,先JSON化,然后Set入Redis即可。但是用JSON提供的反解析方法的时候,得到的是Map<String, JSONObject> 类型,而我希望得到的是Map<String, DDRouteRuleEntry>类型。也就是DDRouteRuleEntry类型并没有被正确的解析。只好顺应这个结果进行反序列化,然后...
Go语言内存分配器设计

Go语言内存分配器设计

Go语言的整个内存管理子系统主要由两部分组成——内存分配器和垃圾收集器(gc)。十一小长假期为了避开我泱泱大国的人流高峰,于是在家宅了3天把Go语言的内存分配器部分的代码给研究了一番,总的来说还是非常酷的,自己也学到了不少的东西,就此记录分享一下。整个内存分配器完全是基于Google自家的tcmalloc的设计重新实现了一遍,因此,想看看Go语言的内存分配器实现的话,强烈建议先读一读tcmalloc的介绍文档,然后看看Go runt...
Go语言内存分配器-FixAlloc

Go语言内存分配器-FixAlloc

前面写了一篇Go语言内存分配器设计,记录了一下内存分配器的大体结构。在介绍内存分配器的核心实现前,本文先介绍一下内存分配器中一个工具组件——FixAlloc。FixAlloc称不上是核心组件,只是辅助实现整个内存分配器核心的一个基础工具罢了,由此可以看出FixAlloc还是一个比较重要的组件。引入FixAlloc的目的只是用来分配MCache和MSpan两个特定的对象,所以内存分配器中有spanalloc和cachealloc两个组...
Go语言内存分配器-MSpan

Go语言内存分配器-MSpan

MSpan和FixAlloc一样,都是内存分配器的基础工具组件,但和FixAlloc没太大的交集,各自发挥功效而已。span(MSpan简称span)是用来管理一组组page对象,先解释一下page,page就是一个4k大小的内存块而已。span就是将这一个个连续的page给管理起来,注意是连续的page,不是东一个西一个的乱摆设的page。为了直观形象的感受一下span,还是得画个图吧,图形是最好的交流语言。MSpan结构定义在malloc.h头文件中,...
Go语言内存分配器的实现

Go语言内存分配器的实现

前面断断续续的写了3篇关于Go语言内存分配器的文章,分别是Go语言内存分配器设计、Go语言内存分配器-FixAlloc、Go语言内存分配器-MSpan,这3篇主要是本文的前戏,其实所有的内容本可以在一篇里写完的,但内容实在太多了,没精力一口气搞定。本文将把整个内存分配器的架构以及核心组件给详细的介绍一下,当然亲自对照着翻看一下代码才是王道。内存布局结构图我把整个核心代码的逻辑给抽象绘制出了这个内存布局图,它基本展示了Go语言内存分配器的整体结构以及部分细节...
Python 的 Magic Methods 指南

Python 的 Magic Methods 指南

介绍本指南是数月博客的总结。主题是魔术方法。什么是魔术方法呢?它们是面向对象Python语言中的一切。它们是你可以自定义并添加“魔法”到类中的特殊方法。它们被双下划线环绕(比如__init__或__lt__)。它们的文档也不像它所需要的那么齐备。Python的所有魔术方法都在Python文档的同一区域,但它们的使用分散,组织松散。而且文档的这部分区域中几乎没有一个示例(这很有可能是设计好的,因为在语法参考里它们都很详尽,但伴随的是枯...
<< 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 >>