redis源码安装过程
安装环境:win101909 wsl2 ubuntu20.04
ubuntu发行版软件仓库提供的redis安装版本是稳定版,且一般落后于最新版的redis,所以不从软件仓库安装,而是下载源码编译安装
从发行版仓库安装命令
1 | $sudo apt-get update |
运行redis
1 | redis-server #服务端 |
clone工程
使用了github的镜像加速方式获取的地址
1 | git clone https://github.com.cnpmjs.org/redis/redis.git |
切换分支
clone下来的当前分支为unstable分支,切换到最新的稳定分支,也就是latest release所在分支
92bde12是commit的sha1值缩写
1 | git checkout 92bde12 |
make
执行make命令会编译生成redis的二进制可执行文件
BUILD_TLS=yess是为了支持TLS,这需要系统预先安装过OpenSSL
1 | make BUILD_TLS=yes |
如果没有OpenSSL,运行下面命令安装
1 | sudo apt-get install openssl |
安装过程还有许多可以自定义的参数,参见工程根目录下的README.md
make install
把redis的二进制文件安装到 /usr/local/bin,如果到其他目录,运行
1 | make PREFIX=/some/other/directory install |
没有这一步要运行redis,需要在命令行输入redis-server执行文件的绝对路径
安装过程错误解决
如下错误是缺少了OpenSSL的开发包,安装就行了
错误
安装libssl-dev
1 | sudo apt-get install libssl-dev |
重新运行make BUILD_TLS=yes还是报安装错误
解决办法是运行清理
注意 应该用**make distclean && make BUILD_TLS=yes
**,make distclean是清理残存文件,make是编译
1 | make distclean && make |
清理完成后在执行make BUILD_TLS=yes
运行测试
1 | make test |
下面是缺少tcl库,因为redis test的脚本是tcl文件
安装tcl
1 | sudo apt-get install tcl |
然后再执行make test,可能出现下面的错误
搜索错误
1 | pending querybuf: check size of pending_querybuf after set a big value in tests/unit/pendingquerybuf.tcl |
这个错误可以通过反复运行make test解决,参见issue5463 ,测试全部pass,也就安装完成了。
运行redis server
cd到src目录下,运行 ./redis-server
从截图可以看到如下信息,pid是redis-server这个程序的进程id,默认运行在6379端口。
由于./redis-server
这条命令没有设置为后台运行,所以不能关闭当前的shell会话,否则会终止redis server
1 | Redis version=6.2.1, bits=64, commit=92bde124, modified=0, pid=28642, just started |
运行redis client
cd到src目录,执行redis-cli,如图显示server运行在本机的6379端口
通过这个命令行的client可以访问数据库,如
set key-value, get key-value
gdb调试正在运行的redis server
前面的sever pid为28642,
1 | gdb attach pid |
gdb下输入命令查看进程的线程
1 | info threads |
通过redis-cli下输入命令下传递消息给server,来调试server
hiredis安装
redis提供了多种语言的client和API,hiredis是c语言的API和client
1 | git clone https://github.com.cnpmjs.org/redis/hiredis.git |
如下为安装过程截图
wsl在vscode里使用hiredis API
1 | #include "hiredis/hiredis.h" |
调用hiredis API写一段代码,并命名为con.cpp,运行 g++ con.cpp -lhiredis 编译,-lhiredis表示链接
hiredis的库文件
编译成功后出现执行出现如下错误
1 | error while loading shared libraries: libhiredis.so.1.0.1-dev: cannot open shared object file: No such file or directory |
这是由于hiredis动态库libhiredis.so.1.0.1-dev 的默认安装路径为/usr/local/lib目录,系统找不到,在/etc/ld.so.conf文件里添加/usr/local/lib就行,执行sudo /sbin/ldconfig
更新配置
编写代码向数据库写入键值对后,可以回到redis-cli下或者key-value
ps:objdump -tT xxx.so可以查看库文件导出的函数接口
redis-cli常用命令
keys * 获取所有的键
redis默认数据为
redis地址
redis日志
我的redis安装目录为/home/hcf/redis,cd到这个目录下 cat redis.conf |grep logfile
logfile后面的path就是log路径,如果为空,redis的日志会写到标准输出
loglevel用来设置日志的等级
redis的配置文件为installdir/redis.conf