redis源码编译是什么-Windows Redis 集群构建 (1)。Redis

比较知名的nosql,可以作为数据也可以作为缓存,因为他支持的数据类型比memcache多,这时缓存也不错,既然涉及到缓存,大数据需要做集群处理,目前Redis也支持,但还没有发布发布版本(目前稳定版是2.8.19), Redis 集群目前处于 alpha 测试阶段,所以想要用他的集群版本,需要自己编译处理,Linux 下的编译比较简单,Windows 比较冗长,这里简单介绍一下。

本文第一篇文章主要介绍 Redis 在 Windows 平台下的编译。

cygwin是Posix系统模拟环境在Windows平台上,具体版本,请遵循您当前系统的版本,我的系统是Windows 7 64位。

单击此处下载最新信息:设置x86_64.exe

天鹅座官方网站:

Redis版本是根据我们自己的需求而来的,因为我们想建集群,所以下载3.0.0测试版

cygwin的安装网络上有很多图解(slamming:图解教程),下一步就好了,重点是注意选择你需要的包,如下图

你会看到Dvel下有很多仓库,其中只需要安装5个:

gcc: C complier upgrade helper     gcc-core:C 编译器 gcc-g++:    C++ 编译器 gdb:GNU 调试器     make:"make" 实用程序的 GNU 版本

具体怎么安装,自己百度脑补,就不多说了,这个安装时间比较长,可以做点别的。

$ gcc -v  使用内建 specs。  COLLECT_GCC=gcc  COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/lto-wrapper.exe  目标:x86_64-pc-cygwin  线程模型:posix  gcc 版本 4.8.3 (GCC)    $ make -v  GNU Make 4.0  Built for x86_64-pc-cygwin

在cygwin的控制端,看到GCC和MAKE已成功安装。

Redis 源码处理redis源码编译是什么,编译前先去 Redis src 目录,在第一个 #define 前下沉以下代码。

/* Cygwin Fix */     #ifdef __CYGWIN__     #ifndef SA_ONSTACK     #define SA_ONSTACK 0x08000000     #endif     #endif

我们先来看看 redis 源代码的目录:

在这里,先编译依赖包:

$ cd deps  $ make lua hiredis linenoise

编译源代码:

cd ..  make && make install  ...此处省略一万字(祈祷吧)

如果佛陀祈求成功,你将编译成功,并启动 Redis 服务尝试

$ redis-server.exe  [3232] 30 Dec 15:40:05.171 # Warning: no config file specified, using the defaul                           t config. In order to specify a config file use redis-server /path/to/redis.conf  [3232] 30 Dec 15:40:05.202 # Unable to set the max number of files limit to 1003                           2 (Too many open files), setting the max clients configuration to 3088.                  _._             _.-``__ ''-._        _.-``    `.  `_.  ''-._           Redis 2.9.50 (00000000/0) 64 bit    .-`` .-```.  ```/    _.,_ ''-._   (    '      ,       .-`  | `,    )     Running in stand alone mode   |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379   |    `-._   `._    /     _.-'    |     PID: 3232    `-._    `-._  `-./  _.-'    _.-'   |`-._`-._    `-.__.-'    _.-'_.-'|   |    `-._`-._        _.-'_.-'    |           http://redis.io    `-._    `-._`-.__.-'_.-'    _.-'   |`-._`-._    `-.__.-'    _.-'_.-'|   |    `-._`-._        _.-'_.-'    |    `-._    `-._`-.__.-'_.-'    _.-'        `-._    `-.__.-'    _.-'            `-._        _.-'                `-.__.-'    [3232] 30 Dec 15:40:05.222 # Server started, Redis version 2.9.50  [3232] 30 Dec 15:40:05.222 * The server is now ready to accept connections on po                           rt 6379

以上就可以了,默认端口:6379

执行文件的位置:

$ cd /usr/local/bin    wier@wier-PC /usr/local/bin  $ ls -al  总用量 3380  drwxr-xr-x+ 1 wier None       0 十二 30 15:37 .  drwxr-xr-x+ 1 wier None       0 十二 26 18:39 ..  -rwxr-xr-x  1 wier None  350267 十二 30 15:37 redis-benchmark.exe  -rwxr-xr-x  1 wier None   88725 十二 30 15:37 redis-check-aof.exe  -rwxr-xr-x  1 wier None  118232 十二 30 15:37 redis-check-dump.exe  -rwxr-xr-x  1 wier None  441669 十二 30 15:37 redis-cli.exe  -rwxr-xr-x  1 wier None 2449805 十二 30 15:37 redis-server.exe

cygwin1.dll文件的位置:

$ cd /bin  $ find . -maxdepth 1 -name "cygwin1.dll"  ./cygwin1.dll

目前在cygwin下运行,我们将把它放下来并在Windows下运行它。

进入天鹅座控制端口

$ cd e:  $ mkdir redis3.0  $ cp -r /usr/local/bin/* e:/redis3.0  $  cp -r /bin/cygwin1.dll e:/redis3.0

以上就是单步进入E盘,创建Redis 3.0目录redis源码编译是什么,将编译后的文件复制到Redis 3.0目录下。

可以在Windows下看到

这样就可以在 Windows 下执行了,现在可以将源码下的配置文件 redis.conf 复制到当前文件夹,这样就可以随便构建自己的配置了。

Redis 命令:

#启动  redis-server.exe redis.conf  #本地客户端进入  redis-cli.exe -h 127.0.0.1 -p 6379

从:

为什么要共享内核的目录结构,因为内核太大

了,第一次接触内核,经常因为内核太大而叹息,从进入到放弃。自 Linus 在 1991 年发布第一个版本的 Linux 以来,已经过去了 30 年。全世界无数的开源贡献者为 Linux 做出了贡献,Linux 代码的数量从最初的 10,000 行增长到今天的数千万行。而一个人可以同时理解的代码量约为 10,000 行。因此,不可能在每个细节中理解如此多的代码。如果您以正确的顺序和技能阅读源代码,您将事半功倍。本文描述了 Linux 的目录结构linux源码编译部分,将有助于初学者阅读 Linux 源代码。阅读时,可以抓住关键点,从而逐步上手,找到自己的路。

一、内核目录结构

一般我们下载一份 Linux 源码,解压源码,目录结构如下:

.├── arch//该目录下的代码和芯片架构相关,比如x86,mips,arm,arm64├── block//块设备相关的一些common代码,驱动在drivers目录下├── certs//加密标签相关的一些代码├── crypto//加密相关的一些代码├── Documentation//内核参考文档├── drivers//该目录应该是最大的,也是裁剪最多的,各种驱动子系统和驱动代码├── firmware//忽略├── fs//各种文件系统的框架部分代码,驱动在drivers目录下├── include//按照功能分类的系统的一些头文件,├── init//系统初始化的common部分代码├── ipc//消息队列,系统调用,信号量等的common部分代码├── kernel//内核里面最核心的base代码├── lib//从名字可以看出来,是其他地方会使用到的一些公共代码├── mm//内存管理部分的common代码├── net//网络协议栈的公共代码,重点在协议,网卡驱动在drivers目录下├── samples//各个子系统的使用例子代码,初学者可以做参看├── scripts//编译内核的时候会用到一些辅助工具和脚本,在该目录下,以及反汇编调试内核工具├── security//系统安全相关的一些代码├── sound//声卡相关的代码alsa等├── tools//内核提供的一些小工具,主要是操作内核提供的节点之类的比如/dev/xxx├── ubuntu//ubuntu用到的部分代码├── usr//内核编译用到的一个工具的代码└── virt///kvm用到的部分代码

里面的目录是内核解压后的完整目录,每个目录下不超过一个级别。对于那些不熟悉 Linux 的人,您可以关注以下目录

1)、arch:根据硬件平台,只关注 arch 下的一个目录,比如 arm 或者 x86

2)、驱动:某个驱动在目录中linux源码编译部分,这个一般是产品上面的驱动在这里

驱动程序目录中的base,bus下的一些目录是内核驱动模型的框架代码驱动程序目录

下的其他目录一般按照驱动程序进行分类,例如input,gpio等

3)、init:内核最初独立于芯片架构启动的通用代码,入口start_kernel

至于拱门下这个特定的架构是谁叫start_kernel,初学者可以先注意一下

将此用作内核的入口。

4)、示例:子系统套接字计数器示例,不是内核代码,而是驱动程序套接字计数器示例

5)、文档:此目录中有许多参考文档

6)、mm:内存管理相关的代码,初学者也可以不用仔细看,等系统视图搭建好再看

7)、lib:其他目录下常用的一些代码。您也可以在不仔细观察的情况下使用它

8)、脚本:一些编译内核依赖的脚本有 shell、python、perl 等语言的各种辅助工具脚本,有助于

编译输出内核,但也有助于调试内核的某些脚本。

对于初学者来说,certs/crypto/net/security/sound/tools/ubuntu/usr/virt 可以忽略。

二、如何读取内核源代码

Linux内核里的文件太多了,一些子系统的核心代码,一个文件就是几万行代码。初学者应该从那里开始。首先,这个前提是要在C语言中有一个良好的基础。

1. 从特定的驱动程序开始,例如手头的开发板、笔记本等。编译系统以在平台上运行的第一件事是找到一个现成的系统来做。之后,板上的硬件资源都是驱动程序。您可以找到一个简单的驱动程序来开始使用

2.不要从文件系统、网络子系统、USB、显示器、声音等开始,从最简单的如触摸屏、鼠标、键盘、并行端口、GPIO等开始。这样的驱动程序代码通常是几百行。并且这数百行代码中涉及许多子系统,例如输入子系统,GPIO子系统,中断注册,工作队列使用等。

3、通过这个驱动你知道系统是如何注册一个最简单的模块,然后使用每个子系统的套接字。你不知道为什么。例如,获取输入子系统,查看如何处理输入风暴,查看如何注册和管理中断,并查看工作队列是什么。不一定一下子就明白,就像画画一样,一开始是画,是不清楚的。别担心,您可以随心所欲地阅读

4、大致看完一个子系统后,会略有了解,这时候可以从start_kernel入手看看驱动是如何注册的,module_init/fs_init优先级等等,布局的编译部分。之后,了解如何启动初始化过程。

5. 熟悉一些简单的 linux 命令,在 shell 下应用,看看你的应用程序是如何操作你的驱动程序的,比如 gpio、输入节点等。

通过前面的基本上可以看作是开始,接下来就是继续深入,用为什么去寻找答案。

比如如何操作到驱动,系统调用的原则。驱动器中使用的各种子系统的原理跟踪。系统驱动模型的工作原理以及如何管理驱动器。如何管理视频内存和任务。你会发现,虽然它们都是子系统。这就是共性。子系统是相互依存的。弱耦合。有一定的顺序关系。

三、充分利用互联网

在自学的同时,不要充分利用网络资源,如果不了解,可以直接百度、CSDN等,还可以添加一些技术交流群。向他人提出更多问题。

尽管有时互联网上其他人的解释可能是错误的。而在不断的试错和理解纠偏中,也有自己的理解。

有这么多的内核代码,不可能特别深入地理解每一行代码。我们不断与各种子系统保持联系。旁边肯定会忘记。这完全没问题。更多的是一种方式,对学习的把握更重要。这不是关于记住一个命令,而是关于记住一个API。这是关于框架的通用性。要是你做的时候能熟练就好了。这里我想说一句话,《倚天屠龙记》中张三丰对张无极说的一段对话:

张三丰:莫格里,认清楚

张无忌:认可

张三峰:不记得

张无忌:我已经忘记了大半

张三丰:现在呢

张无忌:我都忘了,我忘得干干净净

张三峰:不对不对,这么快就忘了读

内核也一样,多读代码,写多,你会发现共性。我们会发现,无论是内核,还是应用,它们的设计模式,框架都有太多的相似之处。区别在于业务。当你这样做时,业务是要了解。这样可以快速上手。

最后,我们

从小看了十几年书,还记得多少,肯定不多。他对我们思维方式的影响是微妙的。

最后,有兴趣的同学可以添加以下兴趣交流群:

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 redis源码编译是什么-Windows Redis 集群构建 (1)。Redis https://www.wkzy.net/game/130199.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务