hunkier

学习笔记,开源代码,技术分享

CentOS 7 安装 Redis

CentOS 7 安装Redis

参照官网描述(https://redis.io/download),linux下redis安装步骤如下:

所有工具和依赖一起安装

1
yum install -y tcl gcc-c++
1
2
3
4
5
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar -zxvf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ mkdir -p /data1/databases/redis /var/log/redis/
$ make && make install PREFIX=/data1/databases/redis

上述流程依次代表,下载redis –> 解压 –> 进入解压目录 –> 编译源码

多数情况下,执行make时,可能会出现如下错误:

异常一:

1
make[2]: cc: Command not found

异常原因:没有安装gcc

解决方案:yum install gcc-c++

异常二:

1
zmalloc.h:51:31: error: jemalloc/jemalloc.h: No such file or directory

异常原因:一些编译依赖或原来编译遗留出现的问题

解决方案:make distclean。清理一下,然后再make

在make成功以后,需要make test。在make test出现异常。

异常一:

1
couldn't execute "tclsh8.5": no such file or directory

异常原因:没有安装tcl

解决方案:yum install -y tcl

到此,redis安装完成。

若是通过:make install PREFIX=安装目录, 完成安装的,会在安装目录下生成一个bin目录,bin目录下包含如下可执行文件:

redis-benchmark : 用于测试redis的性能。

redis-check-aof : 当aof备份文件被损坏,可通过该工具对aof文件进行修复,使用方式:redis-check-aof --fix 要修复的aof文件

redis-check-rdb : 修复损坏的rdb备份文件。

redis-cli : redis客户端,用于连接服务端。

redis-server : redis服务器端,用于启动redis服务器。

redis-sentinel : 哨兵模式(实际使用较多) 在master-slave模式下(slave默认不支持写),当master出现异常时,自动在slave中选择一台作为master。

连接上redis服务器后,可通过指令“info”查看redis服务器信息,也可查看服务器知道内容信息,例如:info replication 查看主从相关信息

下面介绍几个redis常用配置项(redis.cnf配置文件中配置)
1、bind 127.0.0.1 配置redis服务器接受链接的网卡(非客户端ip,而是服务器端ip,服务器可能包含多个网卡)

2、protected-mode yes redis以保护模式运行,只接受本地链接,不能外网访问

3、port 6379 redis接受链接端口

4、daemonize no redis是否后台运行,若为yes,客户端窗口将被锁定
重要配置项
5、maxmemory redis最大使用内存
6、maxmemory-policy 内存达到最大值时的驱逐策略

redis数据持久化支持两种模式:RDB和AOF
RDB:rdb方式的持久化是通过快照完成的,当符合一定条件时redis会自动将内存中的所有数据执行快照操作并存储到硬盘上。默认存储在redis根目录的dump.rdb文件中。(文件名在配置文件中dbfilename)

 redis进行快照的时机(在配置文件redis.conf中)

1
2
3
4
5
save 900 1:表示900秒内至少一个键被更改则进行快照。
save 300 10
save 60 10000
dbfilename dump.rdb 快照保存文件名
dir ./ 快照保存地址

也可通过redis客服端执行命令save或者bgsave保存快照:

 两个命令的区别在于,save是由主进程进行快照操作,会阻塞其它请求。bgsave是由redis执行fork函数复制出一个子进程来进行快照操作。

文件修复:redis-check-dump

rdb的优缺点

优点:由于存储的有数据快照文件,恢复数据很方便。

缺点:会丢失最后一次快照以后更改的所有数据。

AOF:aof方式的持久化是通过日志文件的方式,记录下redis服务器的每一条修改指令。默认情况下redis没有开启aof,可以通过参数appendonly参数开启。

1
appendonly yes

aof文件的保存位置和rdb文件的位置相同,都是dir参数设置的,默认的文件名是appendonly.aof,可以通过 appendfilename参数修改

1
appendfilename appendonly.aof

redis写命令同步的时机:

1
2
3
appendfsync always 每次都会执行
appendfsync everysec 默认 每秒执行一次同步操作(推荐,默认)
appendfsync no不主动进行同步,由操作系统来做,30秒一次

redis服务器启动时会读取appendonly.aof中的指令,进行执行,这样便保证了重启后数据不会丢失。

注意:当redis启动时,如果rdb持久化和aof持久化都打开了,那么程序会优先使用aof方式来恢复数据集,因为aof方式所保存的数据通常是最完整的。

最后记录下redis服务器的启动与关闭指令:

1
2
[root@localhost src]# ./redis-server ../redis.conf                启动redis
[root@localhost src]# ./redis-cli shutdown 关闭redis

Redis 加入系统服务

新建文件

1
vi /etc/rc.d/init.d/redis 

文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/sh
# chkconfig: 2345 80 90
#
# 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

REDISPORT=6379
EXEC=/data1/databases/redis/bin/redis-server
CLIEXEC=/data1/databases/redis/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

function check_pid() {
if [ -f $PIDFILE ];then
pid=`cat $PIDFILE`
if [ -n $pid ]; then
running=`ps -p $pid|grep -v "PID TTY" |wc -l`
return $running
fi
fi
return 0
}
function start() {
check_pid
running=$?
if [ $running -gt 0 ];then
echo -n "Redis server now is running, pid="
cat $PIDFILE
else
echo "Starting Redis server..."
$EXEC $CONF &
echo $! > $PIDFILE
echo "Redis started..., pid=$!"
fi
return 0
}

function stop() {
check_pid
running=$?
if [ $running -gt 0 ];then
echo "Stopping ..."
PID=$(cat $PIDFILE)
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
fi
echo "Redis stopped"
return 0
}


function status() {
check_pid
running=$?
if [ $running -gt 0 ];then
echo -n "Redis server now is running, pid="
cat $PIDFILE
else
echo "Redis server is stoped"
fi
return 0
}



case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo "Please use start / stop / status / restart as first argument"
;;
esac

修改文件权限

1
chmod 755 /etc/rc.d/init.d/redis

设置开机启动

1
chkconfig redis on

启动、停止命令

1
service redis start/stop

centos 7 加入系统服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# cat /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/data/redis/bin/redis-server /etc/redis/6379.conf --supervised systemd
#ExecStop=/usr/libexec/redis-shutdown
ExecStop=kill -9 $(ps -ef|grep /data/redis/bin/redis-server | grep 6379 |awk '{print $2}')
Type=notify
#User=redis
#Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

设置开机启动

1
systemctl enable redis 

启动、停止、状态命令

1
systemctl start/stop/status  redis 
谢谢你请我喝牛奶

欢迎关注我的其它发布渠道