比较知名的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。这是关于框架的通用性。要是你做的时候能熟练就好了。这里我想说一句话,《倚天屠龙记》中张三丰对张无极说的一段对话:
张三丰:莫格里,认清楚
张无忌:认可
张三峰:不记得
张无忌:我已经忘记了大半
张三丰:现在呢
张无忌:我都忘了,我忘得干干净净
张三峰:不对不对,这么快就忘了读
内核也一样,多读代码,写多,你会发现共性。我们会发现,无论是内核,还是应用,它们的设计模式,框架都有太多的相似之处。区别在于业务。当你这样做时,业务是要了解。这样可以快速上手。
最后,我们
从小看了十几年书,还记得多少,肯定不多。他对我们思维方式的影响是微妙的。
最后,有兴趣的同学可以添加以下兴趣交流群: