一、编译安装
Redis官网地址:redis官网,官网可能会打不开,可以在github的发布页中下载:Release-redis。
当前最新版6.0-rc1,下载redis:
https://github.com/antirez/redis/archive/6.0-rc1.tar.gz
编译redis6.0需要GCC5以上版本,低版本会报错,如果GCC版本低于5,只能使用redis5.x版本。
解压源码文件编译:
tar -zxvf 6.0-rc1.tar.gz && mv 6.0-rc1 redis-6.0-rc1
cd redis-6.0-rc1
make MALLOC=libc
注意make的时候要添加MALLOC=libc
参数,否则可能出现以下报错:
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
#include <jemalloc/jemalloc.h>
^
compilation terminated.
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/usr/local/redis-5.0.5/src'
make: *** [all] Error 2
这个参数的用处是指定redis使用的malloc函数为libc中的,默认情况下redis使用的是jmalloc
,大部分系统默认没有安装,会报错。
编译完成后,安装redis到/usr/local/redis-6.0-rc1
:
sudo make PREFIX=/usr/local/redis-6.0-rc1 install
给安装目录创建软链接并添加到PATH路径下:
sudo ln -s /usr/local/redis-6.0-rc1/ /usr/local/redis
# 添加路径到PATH环境变量中
REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/bin
执行完成后,直接运行redis-server
就能启动redis了,可以加上--port
参数指定运行端口。
二、服务配置
默认的配置文件在安装目录下:redis.conf
,复制到/etc/redis/
目录下:
mkdir /etc/redis
cp redis.conf /etc/redis/6379.conf
6379是redis的默认监听端口,根据不同端口来命名配置文件可以使主机同时运行多个redis实例,方便管理。
配置文件中的一些参数说明:
port 6379 # 默认的端口
dir ./ # 持久化文件存放路径
daemonize no # 是否以守护进程启动
pidfile /var/run/redis_6379.pid # pid文件路径
logfile "" # 日志文件路径
添加redis用户:
useradd -M -s /sbin/nologin redis
设置目录权限:
chown redis.redis -R /usr/local/redis
三、添加服务
3.1 services服务
安装目录下的utils
默认有一个redis_init_script
脚本,复制到/etc/ini.d
目录下:
cp utils/redis_init_script /etc/init.d/redis_6379 # 6379是redis监听的端口号
里面需要修改的内容:
REDISPORT=6379 # 默认监听端口6379
EXEC=/usr/local/redis/bin/redis-server # 服务端程序路径
CLIEXEC=/usr/local/redis/bin/redis-cli # 客户端程序路径
PIDFILE=/var/run/redis_${REDISPORT}.pid # pid文件路径
CONF="/etc/redis/${REDISPORT}.conf" # 配置文件路径
启动和关闭redis:
/etc/init.d/redis_6379 start # 启动
/etc/init.d/redis_6379 stop # 关闭
3.2 systemd服务
使用systemd服务时,注意redis不能以守护进程启动:
daemonize no
复制以下内容到/etc/systemd/system/redis_6379.service
:
[Unit]
Description=The redis-server Process Manager
After=syslog.target network.target
[Service]
Type=simple
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/redis-server /etc/redis/redis_6379.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
然后执行systemctl start redis_6379
即可启动服务。
3.2 luanchd服务
luanchd服务是mac系统下的后台管理程序,把以下配置保存到文件homebrew.mxcl.redis.plist
,然后放到~/Library/LaunchAgents/路径下(注意修改程序和日志文件路径):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>homebrew.mxcl.redis</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/redis/bin/redis-server</string>
<string>/etc/redis/redis.conf</string>
</array>
<key>RunAtLoad</key>
<false/>
<key>WorkingDirectory</key>
<string>/usr/local/redis</string>
<key>StandardErrorPath</key>
<string>/appdata/redis/redis.log</string>
<key>StandardOutPath</key>
<string>/appdata/redis/redis.log</string>
</dict>
</plist>
编辑完成后,载入redis服务:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
启动和关闭redis:
launchctl start ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
launchctl stop ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
上面的配置中没有设置开机自启,如果希望开机自启,要把18行的<false/>
改成<true>
。
四、其他
4.1 低版本GCC编译redis-6.x报错问题
使用GCC4编译redis-6.0,会报错:
cd src && make all
make[1]: 进入目录“/data/software/redis-6.0-rc1/src”
CC server.o
In file included from server.c:30:0:
server.h:1022:5: 错误:expected specifier-qualifier-list before ‘_Atomic’
_Atomic unsigned int lruclock; /* Clock for LRU eviction */
^
server.c: 在函数‘serverLogRaw’中:
server.c:1020:31: 错误:‘struct redisServer’没有名为‘logfile’的成员
int log_to_stdout = server.logfile[0] == '\0';
问题原因:
In old gcc version like 4.7/8, there is a bug that miss the macro like [STDC_NO_ATOMICS]
低版本的GCC例如4.7和4.8,有一个缺少类似[STDC_NO_ATOMICS]宏定义的BUG。
可参考fix: old gcc without atomic support compile failed
解决方案是升级GCC5或以上
此处评论已关闭