# 安装 redis

# 下载 redis

最新版下载地址 (opens new window) 本例假设将安装文件下载到 /usr/app/soft 目录。
本例安装到 /usr/app/redis 目录。

# 安装 redis

export soft_dir="/usr/app/soft"
cd $soft_dir
rm -rf redis-6.2.6
tar zxvf $soft_dir/redis-6.2.6.tar.gz
cd $soft_dir/redis-6.2.6
make PREFIX=/usr/app/redis install
mkdir /usr/app/redis/conf
mkdir /usr/app/redis/logs
mkdir /usr/app/redis/dump
1
2
3
4
5
6
7
8
9

# 配置 redis

vi /usr/app/redis/conf/redis.conf
1
点击查看redis.conf样例
################## 基础 #################################
#开启守护进程模式,将进程pid号写入至redis.conf选项pidfile设置的文件中
daemonize yes

pidfile /usr/app/redis/redis.pid
port 6379

#如果服务器caps很高,需要把这个参数改大些。
tcp-backlog 511

#指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求,绑定多个IP用空格
# bind 127.0.0.1 172.18.39.34 172.18.39.35

#客户端连接的超时时间,单位为秒,超时后会关闭连接,0是关闭此设置,永不超时
timeout 0

#检测挂掉的连接,单位s,0禁止
tcp-keepalive 60

#日志记录等级,4个可选值 debug(调试) > verbose(精简) >notice(适量) > warning(警告)
loglevel notice

#日志文件路径
logfile "/usr/app/redis/logs/redis.log"

databases 8

################## EVENT NOTIFICATION ########################
notify-keyspace-events Ex

################## RDB快照 #################################
#900秒(15分钟)之后,且至少1次变更频率不要太高,RDB快照代价比较高
save 900 1
#300秒(5分钟)之后,且至少10次变更频率不要太高,RDB快照代价比较高
save 300 10
save 60 10000

#save失败(快照)是否停止写操作,如果有监控机制可以no
stop-writes-on-bgsave-error yes

# 存储至本地数据库时(持久化到 rdb 文件)是否压缩数据
rdbcompression yes

#生成和加载的时候是否开启CRC64检查,开启后性能消耗大概10%,但更加安全
rdbchecksum yes

#快照名
dbfilename dump.rdb

#快照文件路径
dir /usr/app/redis/dump/

################## 安全 #################################
#设置密码
requirepass XIONGSOFT11911

#################### 限制 ####################################
#限制客户端的连接数
maxclients 1000

#最大内存最好不要超过空闲内存的3/5,超过32GB会自动进入64位世界,指针长度*2,20%的空间会被指针消耗,性能略有影响
maxmemory 24gb

#4种策略volatile-lru、allkeys-lru、volatile-random、allkeys-random、noeviction根据 LRU 算法移除内存中所有的 key
maxmemory-policy allkeys-lru

#五个key然后取最旧的那个,LRU和最小TTL算法的优化
maxmemory-samples 5

#一个Lua脚本最长的执行时间为5000毫秒,0或负数表示无限执行时间
lua-time-limit 5000

################# APPEND ONLY MODE (AOF)###############################
#开启AOF,redis会把所接收到的每一次写操作请求都追加到 appendonly.aof 文件,当 redis 重新启动时,会从该文件恢复出之前的状态。
appendonly yes

#AOF文件名
appendfilename "appendonly.aof"

#每秒写入性能:no(不立即同步,由操作系统决定,速度最快) >everysec(每秒写一次) > always(每次立马写入,速度最慢)
appendfsync no

#写AOF的时候放弃同步主进程的变化,可能会丢日志,但是在高并发的时候不会出现一卡一卡的现象
no-appendfsync-on-rewrite no

#AOF文件体积扩大100%的时候重写该日志
auto-aof-rewrite-percentage 100

#除了百分比,再加体积限制
auto-aof-rewrite-min-size 64mb

#redis在启动时可以加载被截断的AOF文件
aof-load-truncated yes

#当修改AOF文件时,该设置为yes,则每生成32MB的数据,就进行同步
aof-rewrite-incremental-fsync yes

################## 慢查日志 ###################################
#记录超过1秒的操作
#slowlog-log-slower-than 1000000

#记录50个
#slowlog-max-len 50

################## LATENCY MONITOR ###########################
#用LATENCY打印redis实例在跑命令时的耗时图表,监视频率,0为不监视
latency-monitor-threshold 0

################高级配置###############################
#配置最大元素数,当超过该配置数据时,redis采用特殊hash算法
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-entries 512
list-max-ziplist-value 64

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

#配置超重对数基数,CPU比较牛的情况下可以上10000
hll-sparse-max-bytes 3000

#哈希刷新,如果你不太在意延迟而希望尽快释放内存的话就设置
activerehashing yes

#对客户端输出缓冲进行限制可以强迫那些就不从服务器读取数据的客户端断开连接。对于normalclient,第一个0表示取消hardlimit,第二个0和第三个0表示取消soft limit,normalclient默认取消限制,因为如果没有寻问,他们是不会接收数据的
client-output-buffer-limit normal 0 0 0

#对于slaveclient和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接。
client-output-buffer-limit slave 256mb 64mb 60

#对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接。
client-output-buffer-limit pubsub 32mb 8mb 60

#redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率
hz 20
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138

# 设置自启动 redis 服务脚本

vi /etc/rc.d/init.d/redis
1
点击查看redis.conf样例
#!/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.

REDISPORT=6379
EXEC=/usr/app/redis/bin/redis-server
CLIEXEC=/usr/app/redis/bin/redis-cli

PIDFILE=/usr/app/redis/redis.pid
CONF="/usr/app/redis/conf/redis.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF &
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -a XIONGSOFT11911 -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac
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

# 设置为自启动 redis 服务

chmod +x /etc/rc.d/init.d/redis
chkconfig --add redis
chkconfig redis on
echo "export PATH=\$PATH:/usr/app/redis/bin" >> /etc/profile

service redis start
lsof -i:6379
1
2
3
4
5
6
7

# redis 性能调优

#表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
1
2

提示

redis 性能调优后需重新启动服务器才能生效。