安装redis-尊龙官方平台

安装redis-4.0.1以及hiredis库

el/2024/3/25 16:56:43

安装redis-4.0.1以及hiredis库

redis是一个开源的使用ansi c语言编写、遵守bsd协议、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api。


install redis-4.0.1

一、新建账户

[root@localhost ~]# useradd -d /home/redis -m redis
[root@localhost ~]# passwd redis
[root@localhost ~]# su - redis
[redis@localhost ~]$

二、上传安装包&&解压缩

[redis@localhost ~]$ ll
total 1672
-rw-r--r--. 1 redis redis 1711660 mar  4 17:11 redis-4.0.1.tar.gz
[redis@localhost ~]$ tar zxf redis-4.0.1.tar.gz 
[redis@localhost ~]$ ll
total 1676
drwxrwxr-x. 6 redis redis    4096 jul 24  2017 redis-4.0.1
-rw-r--r--. 1 redis redis 1711660 mar  4 17:11 redis-4.0.1.tar.gz

三、编译源文件

[redis@localhost ~]$ cd redis-4.0.1/src/
[redis@localhost src]$ make

这时可看到redis-cli、redis-server等可执行文件已存在于src目录下。

[redis@localhost src]$ ll redis-cli
-rwxrwxr-x. 1 redis redis 5730574 mar 12 13:22 redis-cli
[redis@localhost src]$ ll redis-server 
-rwxrwxr-x. 1 redis redis 8309843 mar 12 13:22 redis-server

ps.

关于make编译源文件

通常开源代码可以在src下通过以下两条命令来完成编译&&安装:

make
make install

其中:
1)make是使用src下的makefile来完成对源文件的编译,生成可执行文件(或动态库)到当前(src)目录下;
2)make install是将src下的可执行文件copy到/usr/local、/usr/bin等目录中;

明确下,所谓的“安装”,通常是binary可执行文件的copy过程。

四、创建redis目录结构

[redis@localhost ~]$ mkdir redis
[redis@localhost ~]$ mkdir redis/bin
[redis@localhost ~]$ mkdir redis/etc
[redis@localhost ~]$ mkdir redis/lib
[redis@localhost ~]$ mkdir redis/log
[redis@localhost ~]$ mkdir redis/include
[redis@localhost ~]$ mkdir redis/redis-run

五、安装redis以及配置

安装redis && copy配置文件

[redis@localhost ~]$ cp redis-4.0.1/src/redis-cli redis/bin
[redis@localhost ~]$ cp redis-4.0.1/src/redis-server redis/bin[redis@localhost ~]$ cp redis-4.0.1/redis.conf redis/etc/

配置redis(在redis.conf末尾添加配置项key-value)

[redis@localhost ~]$ cd redis/etc/
[redis@localhost etc]$ echo "port 12001" >> redis.conf
[redis@localhost etc]$ echo "dir $home/redis/redis-run" >> redis.conf
[redis@localhost etc]$ echo "logfile $home/redis/log/redis.log" >> redis.conf
[redis@localhost etc]$ echo "pidfile $home/redis/redis-run/redis.pid" >> redis.conf
[redis@localhost etc]$ echo "loglevel verbose" >> redis.conf

将redis可执行文件加入到path中:

[redis@localhost ~]$ echo 'export path=$path:$home/redis/bin' >> ~/.bash_profile

退出当前终端,重新登陆,使.bash_profile生效。

[redis@localhost ~]$ which redis-server
~/redis/bin/redis-server

六、启动redis

执行以下命令:

[redis@localhost ~]$ redis-server $home/redis/etc/redis.conf &
[1] 7789

check:

[root@localhost ~]# netstat -lntp | grep 12001
tcp        0      0 127.0.0.1:12001             0.0.0.0:*                   listen      7789/redis-server 1

尝试使用redis-cli去接入服务端:

[redis@localhost ~]$ redis-cli -h 127.0.0.1 -p 12001
127.0.0.1:12001> quit

查看redis版本:

[redis@localhost ~]$ redis-cli --version
redis-cli 4.0.1
[redis@localhost ~]$ redis-server --version
redis server v=4.0.1 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=bd34ae9555e58482

至此,redis-4.0.1已安装完毕并启动成功。


install hiredis lib

一、编译生成hiredis库

[redis@localhost ~]$ cd redis-4.0.1/deps/hiredis && make
cc -std=c99 -pedantic -c -o3 -fpic  -wall -w -wstrict-prototypes -wwrite-strings -g -ggdb  net.c
cc -std=c99 -pedantic -c -o3 -fpic  -wall -w -wstrict-prototypes -wwrite-strings -g -ggdb  hiredis.c
cc -std=c99 -pedantic -c -o3 -fpic  -wall -w -wstrict-prototypes -wwrite-strings -g -ggdb  sds.c
cc -std=c99 -pedantic -c -o3 -fpic  -wall -w -wstrict-prototypes -wwrite-strings -g -ggdb  async.c
cc -std=c99 -pedantic -c -o3 -fpic  -wall -w -wstrict-prototypes -wwrite-strings -g -ggdb  read.c
cc -shared -wl,-soname,libhiredis.so.0.13 -o libhiredis.so  net.o hiredis.o sds.o async.o read.o
ar rcs libhiredis.a net.o hiredis.o sds.o async.o read.o
cc -std=c99 -pedantic -c -o3 -fpic  -wall -w -wstrict-prototypes -wwrite-strings -g -ggdb  test.c
cc -o3 -fpic  -wall -w -wstrict-prototypes -wwrite-strings -g -ggdb  -o hiredis-test   test.o libhiredis.a
generating hiredis.pc for pkgconfig...

check:

[redis@localhost hiredis]$ ll libhiredis.*
-rw-rw-r--. 1 redis redis 332022 mar 12 13:52 libhiredis.a
-rwxrwxr-x. 1 redis redis 227229 mar 12 13:52 libhiredis.so

二、安装hiredis

copy 头文件:

[redis@localhost ~]$ cp redis-4.0.1/deps/hiredis/*.h $home/redis/include

设置gcc编译器头文件查找路径:

[redis@localhost ~]$ echo 'export c_include_path=$c_include_path:$home/redis/include' >> $home/.bash_profile

编译器在缺失头文件时,会额外地从c_include_path包含的目录中查找是否有缺失的头文件。

注:
与c_include_path相关的,还有cplus_include_path。

copy动态、静态库:

[redis@localhost ~]$ cp redis-4.0.1/deps/hiredis/libhiredis.* $home/redis/lib

设置ld_library_path:

[redis@localhost ~]$ echo 'export ld_library_path=$ld_library_path:$home/redis/lib' >> $home/.bash_profile

在进程启动时,ld从/usr/lib等默认的地方找不到hiredis库时,还会去ld_library_path包含的目录中搜索动态库。

退出当前终端,重新登陆,使得相关环境变量生效

[redis@localhost ~]$ echo $c_include_path
:/home/redis/redis/include:/home/redis/redis/include
[redis@localhost ~]$ echo $ld_library_path
:/home/redis/redis/lib

写个小程序,编译下看看?

#include 
#include 
#include int main()
{return 0;
}
[redis@localhost ~]$ gcc -o main main.c -lhiredis -l$home/redis/lib
[redis@localhost ~]$ ldd mainlinux-vdso.so.1 =>  (0x00007ffee1ddb000)libhiredis.so.0.13 => not foundlibc.so.6 => /lib64/libc.so.6 (0x0000003f8c000000)/lib64/ld-linux-x86-64.so.2 (0x0000003f8b800000)

not found?

好吧,做个软链接。

[redis@localhost ~]$ ln -s $home/redis/lib/libhiredis.so $home/redis/lib/libhiredis.so.0.13

check:

[redis@localhost ~]$ ldd mainlinux-vdso.so.1 =>  (0x00007fff3f1e2000)libhiredis.so.0.13 => /home/redis/redis/lib/libhiredis.so.0.13 (0x00007feb15502000)libc.so.6 => /lib64/libc.so.6 (0x0000003f8c000000)/lib64/ld-linux-x86-64.so.2 (0x0000003f8b800000)
[redis@localhost ~]$ ./main

至此,redis的c api:hiredis库已安装完毕。


http://www.ngui.cc/el/5127119.html

相关文章

工作中写文档的一些经验总结

工作中写文档的一些经验总结 在工作中,有很多时间是在写设计文档、配置说明、升级部署等文档。 有时候真的很烦写文档,但是写文档又是必不可少的重要工作内容。 如何写好文档? 我个人在工作中有一丢丢的经验总结: 一、尽可能…

redis:使用set命令实现简单的高可用(ha)

##redis:使用set命令实现简单的高可用(ha) 我们的需求: 假设有多个相同的进程实例分别在多个主机上运行,但是逻辑上同一时刻至多只能有一个进程实例在“工作”。 只有当在“工作”的那个进程实例由于某种异常原因宕…

压力测试模拟程序(c实现)

压力测试模拟程序(c实现) 最近在做一个功能模块,目前功能上已经实现,但是性能暂时没有做过测试。 我的功能主要是接收udp消息,并将udp消息进行封装处理,发送到后端处理模块进行处理。 简单写一个小的udp…

udp socket接收缓冲区与netstat recv-q

udp socket接收缓冲区与netstat recv-q 我们通常使用netstat查看网络的诸多状态,其中包含send-q与recv-q。 我们知道: 每一个socket对象在系统中都被映射为一个socket文件; 每一个socket对象在系统中都关联有两个内核缓冲区:一…

udp:socket缓冲区大小修改与系统设置

udp:socket缓冲区大小修改与系统设置 每个socket在linux中都映射为一个文件,并与内核中两个缓冲区(读缓冲区、写缓冲区)相关联。 或者说,每个socket拥有两个内核缓冲区。 有时,我们需要修改缓冲区的内核…

udp数据包接收逻辑的优化修改以及对性能的影响

udp数据包接收逻辑的优化修改以及对性能的影响 #include #include #include #include #include #include #include #include #in…

ipv6:ip地址鉴权(比较两个ip地址是否相等)

ipv6:ip地址鉴权(比较两个ip地址是否相等) ipv4地址长度为32bit(4b),只有点分十进制一种表示形式。 ipv4地址的点分十进制形式,最长为: ddd.ddd.ddd.ddd 共计15字节,…

tcp ipv4 客户端 服务端 程序简例

tcpipv4 客户端 & 服务端 程序简例 本文给出基于ipv4的tcp客户端以及服务端程序样例。 服务端: #include #include #include #include #include #include

tcp ipv6 客户端 服务端 程序简例

tcpipv6 客户端 & 服务端 程序简例 本文给出基于ipv6的tcp客户端以及服务端程序样例。 可以参考《tcpipv4 客户端 & 服务端 程序简例》进行对比。 服务端: #include #include #include #include <…

c:判断主机字节序(大端be小端le)

c:判断主机字节序(大端be小端le) 通过简单的c程序可以判断当前主机字节序是大端(big-endian:be)或小端(little endian:le)。 code: #include
网站地图