Redis 设计与实现读书笔记——第四章 字典
Redis 设计与实现读书笔记——第四章 字典字典在Redis中应用很广泛,Redis的数据库就是用字典作为底层实现的,对数据库的增删改查操作也是构建在对字典的操作之上的。 简介作用: 数据库底层实现 哈希键底层实现 哈希键包含的键值对比较多,或者键值对中的元素都是比较长的字符串时,使用字典来实现。 其他功能 4.1 字典的实现字典使用哈希表实现,一个哈希表里面可以有多个哈希表节点,一个哈希表节点就保存了字典中的一个键值对。(python的dict也是使用哈希表实现的)。 哈希的本质就是预留内存空间,将需要存储的元素计算索引值(通过哈希函数)来确定对应的存储位置。当需要访问的时候可以通过哈希函数直接获得对应的地址。(编译器将变量名与地址做了映射,变量名是地址的别名,哈希则是将键与地址做了映射(通过哈希函数),大大提高了访问的效率。访问任何元素都是O(1),感觉是两个层面的映射,有点相似的感觉)。 4.1.1 哈希表Redis使用的哈希表由dict.h/dictht 结构定义。 1234567891011typedef struct dictht { //...
使用Travis-CI自动部署博客
使用Travis-CI自动部署博客因为在github上面存储的是编译好的html代码,不是hexo博客中的博客源文件,所以如果没有备份源文件的话,丢失了源文件(包括md,一堆配置文件)后就不能继续更新博客了,而且也不能多端部署Hexo。网上看到可以使用Travis-CI来自动部署,同时解决了博客源文件的备份问题。 新建hexo分支来保存源文件新建分支直接在对应的github.io项目上的branch 按钮处点击新建分支 hexo。 官方文档https://help.github.com/en/articles/setting-the-default-branch 12# 克隆项目到本地> git clone https://github.com/BraveY/BraveY.github.io.git 设置默认分支参照官方文档设置https://help.github.com/en/articles/setting-the-default-branch 修改推送hexo分支现将原来的文件BraveY.github.io 修改为Bra...
Redis源码阅读——SDS
Redis源码阅读——SDS参考Redis设计与实现 以及网上博客阅读Redis源码。 SDS相关知识点见读书笔记。 创建和销毁为了能够对sds进行相关API的测试,因此把sds模块单独提出来。阅读Redis的Makefile发现,编译sds模块需要的源文件包括sds.c, sds.h zmalloc.c 123test-sds: sds.c sds.h $(REDIS_CC) sds.c zmalloc.c -DSDS_TEST_MAIN $(FINAL_LIBS) -o /tmp/sds_test /tmp/sds_test 但是实际编译后会发现会报很多函数未定义的错。原因是redis源码里面sds的内存分配、释放、重分配这些函数是封装成zmalloc,zfee这些函数的,只单纯的把zmalloc.c提取出来是远远不够的。后面发现redis的作者已经把sds给单独提出来了。包括三个源文件sds.c,sds.h,sdsalloc.h 因此执行如下操作即可单独把redis的sds模块提取出来。 提取sds模块...
内存分配的字节对齐
C语言内存分配的字节对齐阅读Redis源码时出现了__attribute__ ((__packed__)) 语句作用是取消字节对齐,而使分配的内存连续。忘记了相关知识。记录下。 简单记录:??? 对齐参数。参数满足两个特性: 1.必须是2的幂 2.必须是(void )的整数倍 (void 的大小就是字长,是CPU可以一次读取的字节数) 根据这个原理,在32位和64位的对齐单位分别为8字节和16字节 参考资料https://www.cnblogs.com/Creator/archive/2012/04/05/2433386.html
Redis设计与实现读书笔记——第二章SDS
Redis设计与实现读书笔记——第二章为了做Redis相关实验,在网上粗略看了Redis设计与实现的电子版,感觉收获很多,但是因为是旧版,所以买了第二版,重读第二次。 第二章 简单动态字符串简介 字符串值的键值对在底层都是由SDS实现的。 sds的功能: 存储字符串值 用作缓冲区 AOF模块缓冲区 客户端状态的输入缓冲区 2.1 SDS的定义文件:sds.h/sdshdr 结构体 书中的为3.0版本,4.0版本有较大改动。 version: redis-4.02 参考:https://www.cnblogs.com/chenpingzhao/p/7292182.html https://www.codesheep.cn/2018/08/09/Redis%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%B1%BB%E5%9E%8B%E5%86%85%E9%83%A8%E7%BC%96%E7%A0%81%E5%89%96%E6%9E%90/ 123456789101112131415161718192021222324252627282930313233t...
ping 无法连接外网
ping 无法连接外网 问题ping外网ping不通 1234yky@hw076:~/tmux> ping www.baidu.comping: unknown host www.baidu.comyky@hw076:~/tmux> ping 8.8.8.8connect: Network is unreachable ping内网可以ping通 1234567891011hw076:~ # ping 172.18.11.114PING 172.18.11.114 (172.18.11.114) 56(84) bytes of data.64 bytes from 172.18.11.114: icmp_seq=1 ttl=64 time=0.193 ms64 bytes from 172.18.11.114: icmp_seq=2 ttl=64 time=0.216 ms64 bytes from 172.18.11.114: icmp_seq=3 ttl=64 ti...
shell 脚本遍历redis数据库
使用shell脚本遍历redis数据库中的所有kv对记录下如何使用shell通过redis-cli 命令来操作redis数据库,因为直接在命令行中输入 redis-cli command 的话command必须是单个单词,不能像是KEYS * 这种. 123456789101112#!/bin/bashfilename='redis'`date +%Y-%m-%d_%H:%M`work_path=$(dirname "$0") echo "实例化redis数据文件为:$work_path/$filename"echo "keys *" | redis-cli > key_db.txtecho "将所有key保存到:$work_path/key_db.txt"for line in `cat key_db.txt`do echo "key:$line " ...
使用YCSB 评测redis性能
使用YCSB 评测redis性能YCSB是雅虎推出的可以评测许多主流数据库性能的基准测试,其中包括Redis。 安装YCSB 安装java和maven 机子已经有了java,所以只用安装maven Ubuntu安装命令为: sudo apt-get install maven 安装YCSB 123git clone http://github.com/brianfrankcooper/YCSB.gitcd YCSBmvn -pl com.yahoo.ycsb:redis-binding -am clean package 必须是gitclone的源码包才能执行mvn 命令。wget或者curl下来包是已经编译好了的无需执行mvn命令。 mvn -pl com.yahoo.ycsb:redis-binding -am clean package 报错: 123456789[INFO] Scanning for projects...[ERROR] [ERROR] Could not find the selected proje...
apt-get install失败
apt-get install失败 第一阶段 使用perf 报错 内核无法找到perf 12345678910root@hw103:/home/yky/redis-5.0.3# perf WARNING: perf not found for kernel 4.15.0-45 You may need to install the following packages for this specific kernel: linux-tools-4.15.0-45-generic linux-cloud-tools-4.15.0-45-generic You may also want to install one of the following packages to keep up to date: linux-tools-generic linux-cloud-tools-generic 安装此内核的通用工具时错误 1234567891011root@hw103:/home/yky/...
Make学习
make学习开始阅读redis源码,都说redis很简单,源码不多。但是源码包下载下来后却发现不知道从何处入手,有那么多文件和源码。后面查找资料才发现阅读源码的第一步就是阅读Makefile,项目如何构建和源码间的关联都写在了Makefile文件中。之前没有接触过Makefile,记录下Make的学习。 makefile的格式 概述 makefile 文件由一系列rules组成 rules的格式为: 12<target> : <prerequisites> [tab] <commands> “目标”是必需的,不可省略;”前置条件”和”命令”都是可选的,但是两者之中必须至少存在一个。 每条规则就明确两件事:构建目标的前置条件是什么,以及如何构建。 target 一个目标(target)就构成一条规则。目标通常是文件名,指明Make命令所要构建的对象,比如上文的 a.txt 目标可以是一个文件名,也可以是多个文件名,之间用空格分隔。(make的时候指定文件名从而对该文件进行构建build) 除了文件名,目标还可以是...











