文章目录
前言
本教程主要总结网络各教程综合而成,相关参考链接见本文最后,本教程主要用于Windows、Linux(Ubuntu)安装Redis服务、后续参数配置、Redis自启动设置、以及QT程序支持。通过本教程可以方便的实现在Windows、Linux Ubuntu环境下配置Redis环境以及QT程序支持。
软件版本说明:
Windows系统:Windows10,QT 5.9.9 ,VS2015,cmake(3.29.0-rc4)
Linux系统:Ubuntu 16.04.7 LTS ,QT 5.9.9,cmake(3.5.1)
一、Linux下Redis安装于QT支持
1.1 Redis源码下载及安装
1.1.1 Redis最新版本源码下载
Redis下载网站https://redis.io/download/
1.1.2 解压缩及编译安装
将上述下载好的Redis压缩包拷贝到/usr/local下,然后解压
cd /usr/local
tar -zxvf redis-7.2.4.tar.gz
mv redis-7.2.4 redis/
执行编译和安装命令
#切换到 redis目录
cd redis/
# 编译
make
# 安装
make install PREFIX=/usr/local/redis
此过程耗时较长,请耐心等待。
编译过程中可能会初选 error: jemalloc/jemalloc.h: No such file or directory异常
解决办法:依次执行如下命令
make MALLOC=libc
cd src && make install
安装完毕后,可以查看安装目录/usr/local/redis/bin
各个功能模块介绍
模块名称 | 模块功能介绍 |
---|---|
redis-server | Redis服务器 |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis性能测试 |
redis-check-aof | AOF文件修复工具 |
redis-check-rdb | RDB文件修复工具 |
redis-sentinel | Sentinel服务器(2.8以后),Redis集群使用 |
1.1.3 Redis开机自启动
redis的启动分为两种方式:前台启动和后台启动。
由于前台启动后,命令行界面不能再执行其他操作,且命令行界面关闭后,redis也会随即关闭,所以不推荐使用。
本教程以下内容均为后台启动的步骤:
1.1.3.1 配置文件修改
(1)修改配置文件
cd /usr/local/redis
cp redis.conf redis.conf.bak
sudo gedit redis.conf
(2) 修改配置文件支持后台启动
打开redis.conf 将daemonize no改为daemonize yes即可
(3)支持远程连接
bind 127.0.0.1 -::1注释掉
把protected-mode yes改为protected-mode no即可
(4)设置Redis连接密码
注释:# requirepass foobared
新增requirepass 123456
1.1.3.2 配置开机启动
(1)在/etc目录下新建redis目录
cd /etc/
mkdir redis
(2)复制配置文件
cp /usr/local/redis/redis.conf /etc/redis/6379.conf
(3)复制\修改启动脚本
cp /usr/local/redis/utils/redis_init_script /etc/init.d/redis
sudo gedit /etc/init.d/redis
按照如下示意修改
(4)执行自启命令
cd /etc/init.d/
chkconfig redis on
chkconfig命令若没有安装,则参考如下教程: https://blog.csdn.net/wildwolf_001/article/details/115250102
如果运行结果提示: service redisd does not support chkconfig, 解决方法:
使用vim编辑redisd文件,在第一行加入如下两行注释,保存退出,再次执行自启命令即可
注释 # chkconfig: 2345 90 10
注释# description: Redis is a persistent key-value database 注释的意思是,redis服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。
(5)检查或启动Redis
# 打开redis命令:
service redis start
# 关闭redis命令:
service redis stop
若手动启动时,出现The TCP backlog setting of 511 cannot be enforced 告警问题,则需要按照如下方案解决
编辑/etc/sysctl.conf文件,添加net.core.somaxconn = 1024
然后执行sysctl -p命令查看是否添加成功,之后重启Redis服务即可
(6) 测试连接
1.1.3.3 手动配置Redis启动或自动关闭
参考如上教程时,容易存在关机时redis进程杀不死,然后关机卡柱的问题,可使用如下解决方案
(1)Redis启动脚本编制
参考如下redis.sh脚本:
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: redis_6379
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Redis data structure server
# Description: Redis data structure server. See https://redis.io
### END INIT INFO
ProgName="redis-server"
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
pro=$(ps -ef | grep ${ProgName}| grep -v grep | grep -v "$0")
if [ -z "$pro" ]
then
echo "Starting Redis server..."
$EXEC $CONF
else
echo "Redis PID:$pro"
echo "process is already running"
fi
;;
stop)
pro=$(ps -ef | grep ${ProgName} | grep -v grep | grep -v "$0")
echo "Redis PID:$pro"
if [ -z "$pro" ]
then
echo "Redis process does not exist, process is not running"
else
echo "Stopping ..."
#$CLIEXEC -p $REDISPORT -a 123456 shutdown
echo "Waiting for Redis to shutdown ..."
sleep 1
pro=$(ps -ef | grep ${ProgName} | grep -v grep | grep -v "$0")
if [ -z "$pro" ]
then
echo "Redis Server stopped"
else
ps -ef | grep ${ProgName} | grep -v grep | awk '{print $2}' | xargs kill -9
echo "Redis Server stopped"
fi
fi
;;
*)
echo "Please use 'start' or 'stop' key words as first argument"
;;
esac
(2)全局启动配置
将上述脚本复制到/usr/local/bin后即可全局实现脚本调用
cp redis.sh /usr/local/bin
- 手动启动Redis:
redis.sh start
- 手动关闭Redis:
redis.sh stop
(3)设置关机时自动关闭Redis
此步骤可以防止Redis不关闭的话,导致的关机关不上的问题
编写Redis关闭脚本stopredis.sh
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: redis_6379
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Redis data structure server
# Description: Redis data structure server. See https://redis.io
### END INIT INFO
ProgName="redis-server"
pro=$(ps -ef | grep ${ProgName} | grep -v grep | grep -v "$0")
echo "Redis PID:$pro"
if [ -z "$pro" ]
then
echo "Redis process does not exist, process is not running"
else
echo "Stopping ..."
#$CLIEXEC -p $REDISPORT -a 123456 shutdown
echo "Waiting for Redis to shutdown ..."
sleep 1
pro=$(ps -ef | grep ${ProgName} | grep -v grep | grep -v "$0")
if [ -z "$pro" ]
then
echo "Redis Server stopped"
else
ps -ef | grep ${ProgName} | grep -v grep | awk '{print $2}' | xargs kill -9
echo "Redis Server stopped"
fi
fi
将stopredis.sh脚本同样拷贝至/usr/local/bin目录下,然后创建systemd 服务
vi /usr/lib/systemd/system/shutdown-redis.service
插入内容如下:
[Unit]
Description=close services before reboot and shutdown
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
#Before=network.target iscsi.service iscsid.service shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be executed before the
# target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/stopredis.sh
[Install]
WantedBy=halt.target reboot.target shutdown.target
启动服务:
cd /usr/lib/systemd/system/
chmod 777 shutdown-redis.service
systemctl enable shutdown-redis.service
这样设置后,系统在关机或者重启时会自动关闭Redis服务。
1.2.安装hiredis以及QT程序支持
C++调用redis需要配合hiredis一起使用,因此需要事先安装hiredis。
1.2.1 hiredis下载安装
git clone https://github.com/redis/hiredis
make
sudo make install
1.2.2 QT程序支持
(1)新建项目,并在pro文件中添加:
INCLUDEPATH += /home/安装路径/Redis/hiredis
LIBS += -L /usr/local/lib -lhiredis
HEADERS += /home/安装路径/Redis/hiredis/adapters/qt.h
INCLUDEPATH += 中这个地址写入你前面下载hiredis的安装包位置
LIBS +=这个地方写入hiredis安装位置
HEADERS += 这个将qt.h加入
(2)测试代码
#include <QCoreApplication>
#include <adapters/qt.h>
#include <QDebug>
void getCallback(redisAsyncContext *ctx, void *r, void *privdata){
qDebug() << "getCallback called";
redisReply *reply = static_cast<redisReply*>(r);
if(reply == nullptr){
qDebug() << "The reply is nullptr";
return;
}
qDebug() << "result: ";
for(int i = 0; i < reply->elements; i++){
qDebug() << "key: " << reply->element[i]->str;
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
redisAsyncContext *ctx = redisAsyncConnect("127.0.0.1", 6379);
RedisQtAdapter adapter;
if(ctx->err){
qDebug()<< "error: " << ctx->errstr;
redisAsyncFree(ctx);
return 0;
}
adapter.setContext(ctx);
redisAsyncCommand(ctx, nullptr, nullptr, "auth 123456");
redisAsyncCommand(ctx, getCallback, nullptr, "keys test");
qDebug() << "over";
return a.exec();
}
程序运行后,代表运行成功
(3)常见错误解决
若出现:error while loading shared libraries libhiredis.so等错误
则需要如下解决方案: 确保你的/etc/ld.so.conf里面有 /usr/local/lib 这一行,没有的话vi编辑在尾行加上
然后执行:
sudo ldconfig
二、Windows下Redis安装及QT支持
2.1 Redis安装与编译
下载地址:https://github.com/microsoftarchive/redis
得到redis-3.0.zip。解压后,进入./redis-3.0/msvs,然后用vs打开RedisServer.sln项目,编译全部程序。
Release版本生成如下文件,见下图所示:
模块名称 | 用途 |
---|---|
redis-server | Redis服务器的daemon启动程序 |
redis-cli | Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作 |
redis-benchmark | Redis性能测试工具,测试Redis在当前系统下的读写性能 |
redis-check-aof | 数据修复 |
redis-check-dump | 检查导出工具 |
可以测试启动Server及Client端。
2.2 hiredis安装与编译
下载地址:https://github.com/redis/hiredis
得到hiredis-master.zip,解压后,得到hiredis-master目录,可以看到CMakeLists.txt。
执行cmake编译命令
若Windows上没有cmake,则需要下载安装https://cmake.org/download/
选择 cmake-3.29.0-windows-x86_64.msi
注意:安装过程中记得在安装选项中为所有用户添加路径到环境变量
#查看CMake版本号
cmake --version
#进入hiredis-master目录
cd D:\MyCode\OwnCode\redis\test\tools\redis\hiredis-master
#创建build目录
mkdir build
#进入build目录
cd build
#运行cmake命令进行解析,检查依赖项(需要安装VS Build Tools),我本机安装了VS 2015
cmake ..
#运行编译命令即可自动开始编译,这里的Target与vcxproj后缀的文件保持同名
cmake --build . --target hiredis --config Release
最后会在./hiredis-master/build/Release目录下,生成hiredis.dll。
2.3 QT程序支持
将上述步骤中hiredis-master文件夹放置在固定路径,或者复制到QT的pro工程目录下:
(1)对于hiredis-master固定路径,例如D:\hiredis-master,则配置如下
LIBS += -LD:\hiredis-master\build\Release -lhiredis
INCLUDEPATH += D:\hiredis-master
DEPENDPATH += D:\hiredis-master
(2)若复制在pro工程目录下,则在QT的pro工程文件中,添加如下内容
LIBS += -L$$PWD\hiredis-master\build\Release -lhiredis
INCLUDEPATH += $$PWD\hiredis-master
DEPENDPATH += $$PWD\hiredis-master
配置后即可使用Redis
三.参考文档
https://developer.aliyun.com/article/789869
https://www.cnblogs.com/darknebula/p/10523129.html
https://blog.csdn.net/weixin_41868104/article/details/125384809
https://blog.csdn.net/qq_45434780/article/details/115375309
https://blog.csdn.net/github_38647413/article/details/124106927
https://blog.csdn.net/qq_35699473/article/details/124891764