自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Redis源码阅读笔记(七)robj对象数据类型

从第七篇开始,基本将重心放在了《redis设计与实现》这本书上,以下是参照书本描述并且对应源码所写,可以算是读书笔记,而不再是阅读源码笔记。

2018-08-03 14:48:19 469

转载 Redis源码阅读笔记(六)skiplist跳跃表结构

- 跳跃表简介在介绍redis的skiplist之前先对跳跃表这一数据结构要有一个了解,跳跃表本质上就是一种查找结构,用于解决算法中的查找问题,即根据给定的key,快速查找到对应的value,它的效率可以比拟平衡二叉树,在插入和删除效率上甚至优于平衡树。但是跳跃表的实现缺要简单很多。以下为跳跃表的一个示例: 从图中可以看出跳跃表主要有以下几个部分构成:1、 表头head:负责维护跳...

2018-08-03 13:04:38 284

转载 Redis源码阅读笔记(五)ziplist压缩列表结构

- ziplist压缩列表简介ziplist同intset一样是Redis独有的,主要是为了节约内存,提高存储效率而产生出来的,经过了特殊编码的双向链表。但是与双向链表不同的是,ziplist是一块连续的内存,在这块连续的内存中不同的节点可以是字符串也可以是整数。同时对整数的存储也是使用了变长编码的方式,以此来更进一步的节约内存。存储模式是小端模式。没有用自定义的struct之类的来表达,...

2018-08-01 19:13:23 639

转载 Redis源码阅读笔记(四)intset整数有序集合结构

- intset整数有序集合简介Redis中intset可以用来存储无重复的整数有序集合, 并且可以根据元素的值来选择使用什么整数类型来进行保存,可选择的包括int16_t,int32_t,int64_t,分别为2/4/8字节的整数类型。同时因为经常涉及到不同整数类型之间的转换,所以通常存取都是按单字节来进行的,这里就会涉及到一个大端小端模式的问题。Redis中intset的整数类型只能进...

2018-07-31 13:52:14 338

转载 Redis源码阅读笔记(三)dict字典结构

- dict字典简介Redis中的dict字典简单来说就是key-value键值对数据,存储 方式是通过哈希表来实现的,哈希表是通过桶bucket来实现的,实现步骤是:首先规定一个哈希表大小size,然后将key通过哈希函数h=hash(key)得到的哈希值h通过h&(size-1)映射到哈希表索引中去,当两个h值映射成一个索引值时通过链表解决冲突。每次从表头插入数据。dict字典...

2018-07-30 20:15:11 230

转载 Redis源码阅读笔记(二)list双向链表结构

- list简介相对于sds来说,list并没有太多新的想法和机制,就和自己实现一个双向链表差不多,主要有节点结构、链表结构和迭代器结构三个部分。 只有一个比较新奇的想法是,因为在存储节点的值时,使用的是一个void * 指针,而对void * 里面的数据则可以自己定义一些节点值的复制、释放和比较函数。但是就C语言来说结构体是不具有成员函数的,为了让节点值操作函数能够和链表绑定,在链表结构...

2018-07-25 23:17:39 441

转载 Redis源码阅读笔记(一) sds动态字符串

初看源码做一个记录,打算按照如何阅读redis源码这里的结构慢慢看下去。有兴趣的初学者也可以先看看这篇文章。 - sds简介sds是redis中最基础的也是最简单的一个数据类型,字符串数据类型。该数据类型的所有函数API都以C字符指针操作为基础,但是由于封装了长度和剩余可用长度,使得和单纯的char*相比,具有以下几点好处:1.对于频繁的获取字符串长度操作,可以在O(1)时间内完成...

2018-07-25 22:21:52 196

原创 Linux自己添加删除命令delete/恢复命令recover,代替rm完成删除任务

最近一段时间学习了一些Linux的基本操作,对bash和shell脚本也有了一些了解,同时在使用linux命令行时,也碰到了一个常见的问题,就是使用rm误删文件之后很难恢复,于是就想着自己重写一个delete命令来代替rm工作。正好也是用shell来练练手自己写个小脚本。主要工作流程1.delete内部实际上还是调用了rm来做实际的删除工作,因此使用方法和rm完全一样 2.在使用dele...

2018-07-17 21:21:23 2476

转载 webbench源码分析 学习笔记(转载)

一、简介Web Bench是一个网站压力测试的工具。其最后更新时间是2004年,已经十年多了。其源代码总共才500多行,全部使用C语言编写,最多可以模拟上万个并发连接。其下载主页为webbench 。我自己下载的时候碰到了一个问题,虽然后缀是tar.gz但是似乎并没有用gzip压缩,建议改名将.gz去掉,然后不要添加-z参数,直接用tar解压即可。源码阅读起来也非常简单,很适合作为刚刚...

2018-07-16 15:01:22 284

原创 二维数组作为参数传递给函数的一些方法

因为自己做算法题的时候遇到过,最开始的时候比较苦恼,查到的方法又比较乱,这里总结了三种方法,并分别给出了函数声明的写法,即形参的写法,和传递实参时的写法。显示传递一个二维数组,但是第二维必须固定。第一维可以不写,可以固定,可以比原数组小,会截断。将实参的数组名强转为int*型,这样传递的就相当于一维数组名,函数形参要进一步传入行列的大小,以手工寻址将实参的数组名强转为int**型,那么函数形参可以...

2018-06-29 15:31:54 1857

原创 原码、补码反码问题

通常一个有符号数的表示,最高位为符号位,0代表正数,1代表负数,也就是说若是用8位二进制来表示,那么只能表示-2^7~2^7,即通常来说是-127(11111111)到127(01111111),前面是原码,若用补码表示则可以表示-128到127,具体原因后面再详细说。对于正数来说,原码反码补码完全一样;对于负数来说,反码为原码取反(不包括符号位),补码为反码+1;对原码取反+1得到补码,对补码再...

2018-06-29 15:18:25 541

原创 虚拟机创建共享文件夹后没有/mnt/hgfs的问题

1.选中你要使用的虚拟机,右键设置->选项->共享文件夹  ,选择启用,然后添加一个windows下的路径,即使用来共享的windows下的文件夹。2.此时重启虚拟机,如果有/mnt/hgfs/xxx这个文件夹,即为虚拟机上共享文件夹位置。3.如果没有,则可能是因为没有安装vm-tools,参照网上教程即可这里给出安装vmtools,一个比较详细的安装教程针对该教程,解释一个关于/mn...

2018-06-20 23:14:12 16746 1

空空如也

空空如也

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

TA关注的人

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