|
|
在 CentOS 8.5 上从源代码安装 Redis 涉及多个步骤,包括安装依赖项、编译和安装 Redis。下面是一个详细的指南:
* g8 Q$ H0 I, ]: @% H
+ ~1 \) b3 D A: ~# Q步骤 1: 安装依赖项% a% M! Q5 v( T
首先,你需要安装编译 Redis 所需的依赖项。打开终端并运行以下命令:0 b0 O ?% Q8 x0 k! S
6 m7 P* \. e+ c" t. k \9 o, O5 {[root@asset ~]# dnf install -y gcc make tcl
. S1 Q$ p9 K3 q2 s9 O% N5 N" }, l/ s% }9 Q+ m$ z
# dnf install -y systemd-devel gcc make
- P1 x% _" v% Y# j3 }; A# [2 N0 H6 ^& `5 S# l5 d9 K, i. W
步骤 2: 下载 Redis 源码
+ b; r) E- L5 P2 E, B6 G你可以从 Redis 的官方网站或 GitHub 仓库下载最新的源码。使用以下命令下载最新版本的源码:
- C0 w. D" e& ]
+ d7 V* f0 z* H! f( `7 X6 o& Z- u# [4 |: U" o
wget https://download.redis.io/releases/redis-8.2.2.tar.gz
$ p4 H# s b* G B; p或者使用 curl:
' ~0 @! {1 a7 s
- ^) D2 v: h# o0 [# r1 `curl -O https://download.redis.io/releases/redis-8.2.2.tar.gz
, L4 U( v1 x* G* K2 G步骤 3: 解压源码包
! E0 p( h$ y7 ?& s7 t! r下载完成后,解压源码包:4 Q: \9 U, N# P
; Y. A$ y+ f- s# S; F/ tbash
) b l1 A* r, p+ S( Y- r# tar -zxvf redis-8.2.2.tar.gz
9 K ]% M( t- i. V2 N. R$ A5 l* ?6 C2 \4 |6 [
cd redis-8.2.2/5 `5 @ q \& i
$ z) u" c, S: q- `7 r, x
步骤 4: 编译 Redis
8 [0 ?1 Q& a( y* F在源码目录中,运行以下命令来编译 Redis:
% b$ | W( @* y; F* P& m% _2 H3 Y% K
: k4 \, b# M; j3 W& U[root@asset redis-8.2.2]# make PREFIX=/usr/local/redis install $ \5 d& v7 v9 S" m$ m* u9 V
make USE_SYSTEMD=yes PREFIX=/usr/local/redis install% s# c) ^2 C0 n* X! G( F( v
步骤 5: 安装 Redis$ z+ T# b, B* F. O
编译完成后,使用以下命令安装 Redis:; j3 ]& N; E4 b& e
4 N+ F+ N' t$ u# f2 Y
4 @# V2 a( E% K, _. R
sudo make install 以上即可安装成功,这步可以不做。 只有上面只执行了make 需要做。
0 x. S. V4 b8 K. k# H z$ X, ?; ~" Y步骤 6: 创建 Redis 用户(可选)
2 X3 e5 B+ A- d2 }- u为了安全起见,你可以创建一个专门用于运行 Redis 的用户。执行以下命令:
9 W# N6 X* C" a6 x$ t7 s4 u' e# N+ p6 _9 A* k3 l
useradd -r -s /sbin/nologin -M redis
# H+ e) L, W6 J$ ^& D! v( L步骤 7: 配置 Redis(可选)
) a9 H: }; z, b+ X5 z8 p! c5 _你可以通过编辑 /etc/redis/redis.conf 来配置 Redis。如果这个文件不存在,你可以从 /usr/local/bin 中复制一个示例配置文件:) a1 |6 y" t% C
1 S: _+ b6 t% y1 L) \" R
做软连接,让系统可以调用redis服务:
, p% k' [/ e8 V" q- K6 ~* w" \/ z1 ?0 y6 r* W
# l4 W; g; I T6 o7 W
[root@asset ~]# ln -s /usr/local/redis/bin/redis-server /usr/bin/
; U: d; _+ L/ {2 ^% @. K p
3 o9 Y8 s: b/ n: r. X[root@asset ~]# ln -s /usr/local/redis/bin/redis-cli /usr/bin/
+ s! e8 @: k) k' R
2 C$ n6 B3 \ r验证命令:
n( x* M7 }) d9 e[root@asset ~]# redis-server I8 u% R% ?- `% M
1720147:C 20 Mar 2026 20:53:29.549 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.2 P1 X/ z' w5 z, q6 l& W
1720147:C 20 Mar 2026 20:53:29.549 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8 Y- T; Y* X& k+ S3 M1720147:C 20 Mar 2026 20:53:29.549 * Redis version=8.2.2, bits=64, commit=00000000, modified=0, pid=1720147, just started g* a/ [$ S, y
1720147:C 20 Mar 2026 20:53:29.549 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf- a1 f q% X0 Z8 A- x( a
1720147:M 20 Mar 2026 20:53:29.550 * Increased maximum number of open files to 10032 (it was originally set to 1024).. z) K. X) J2 u G7 Q
1720147:M 20 Mar 2026 20:53:29.550 * monotonic clock: POSIX clock_gettime1 U/ Y# d+ o, P2 h6 |+ Q, j7 i% N# _/ G
_._ 2 ~: w7 y: b* G4 H
_.-``__ ''-._ 2 G- B$ `( q0 \' a
_.-`` `. `_. ''-._ Redis Open Source
4 |( J( u; K) G5 r- m. r4 ~ .-`` .-```. ```\/ _.,_ ''-._ 8.2.2 (00000000/0) 64 bit, F0 N7 {: c, X
( ' , .-` | `, ) Running in standalone mode
* S7 F0 i8 \. G# B9 Q) n9 c |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379* W9 v: c2 ~$ `" {
| `-._ `._ / _.-' | PID: 17201479 L: L* C0 R# X) ~6 n( W7 U
`-._ `-._ `-./ _.-' _.-'
. r9 y; r2 V# X/ ]; S |`-._`-._ `-.__.-' _.-'_.-'|
& X2 C# }( F( L; [3 D8 a, F | `-._`-._ _.-'_.-' | https://redis.io , u3 H5 w5 q/ a
`-._ `-._`-.__.-'_.-' _.-'
" V0 R* y/ p: a3 t: I |`-._`-._ `-.__.-' _.-'_.-'| 1 ^9 W3 M) K# M
| `-._`-._ _.-'_.-' |
6 A$ D* o* @0 i- s# Q `-._ `-._`-.__.-'_.-' _.-'
& ?' r) r7 L Y8 n7 U `-._ `-.__.-' _.-' ) c$ X) w$ p& R
`-._ _.-' 9 o( }" S. I% m q0 L# v
`-.__.-' 3 z: f$ `$ j. Q. i. C! _6 G
; B7 I" [0 l8 R3 n2 H" p1720147:M 20 Mar 2026 20:53:29.551 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.+ B$ D" M1 T" h) N5 y4 E
1720147:M 20 Mar 2026 20:53:29.551 * Server initialized
: p$ Y/ k6 j! Q1720147:M 20 Mar 2026 20:53:29.551 * Ready to accept connections tcp
$ [' I+ q- v* n7 ?& v6 U" t4 e^C1720147:signal-handler (1774011210) Received SIGINT scheduling shutdown...- N1 @0 k+ r4 }/ K
1720147:M 20 Mar 2026 20:53:30.962 * User requested shutdown...
8 w: O/ a1 u( @) y, u1720147:M 20 Mar 2026 20:53:30.962 * Saving the final RDB snapshot before exiting.
$ \4 f7 }" V! W" b' i" }7 v; V; L1720147:M 20 Mar 2026 20:53:30.964 * DB saved on disk1 @" ^* |/ r+ o( c
1720147:M 20 Mar 2026 20:53:30.964 # Redis is now ready to exit, bye bye...0 E6 d, {6 B/ a( q {% e$ j8 @
[root@asset ~]# redis-cli
' S t6 r& _7 eCould not connect to Redis at 127.0.0.1:6379: Connection refused$ |+ n, t, D. i7 G
not connected> quit) K; b) G1 Y) Y' c6 y: O
$ l3 s$ C. V( g$ l* J8 h; Z- h' T9 i/ B9 q) P6 Q
! y/ V) d# o' P4 j( P$ Z* Q
新建redis的目录:
. o5 t) \( X/ e2 z4 i6 n/ x* P# o! C" B4 r* C
mkdir /etc/redis/
* G, H- d- o/ v: r# T6 k5 i" c$ I* z7 n# e, s1 c6 t
cp /usr/src/redis-8.2.2/redis.conf /etc/redis/$ p& K7 H& D' R ]
ls -al /etc/redis/redis.conf 9 J8 W* ?0 @: ^4 M! u
-rw-r--r-- 1 root root 111227 3月 20 20:56 /etc/redis/redis.conf# C T* U+ }$ R- ~, u" q0 w$ P
+ J& \" \5 ?7 d8 B; E
) o1 ?! Q! f {! `
( K, n7 z1 ~2 l chown redis:redis /etc/redis/redis.conf7 p* u* f& ^# W4 k% T
& t6 p' y; |3 Q2 ^
步骤 8: 启动 Redis 服务(可选)7 E0 W% o; w9 y$ g
你可以使用以下命令手动启动 Redis 服务: V+ k& k# e& d: ~& [ O
: [7 E9 R3 V2 ]+ {" T" N9 f; E0 |
redis-server /etc/redis/redis.conf8 K8 A" i" `" W5 z
3 p, `# v1 S, e/ |2 {或者,你也可以编写一个 systemd 服务单元来管理 Redis 服务。
( e. A% _, r9 _! k
`0 \7 l' X6 b V: ^创建一个新的 systemd 服务文件:. z+ R8 B0 D: w& l. a2 i
$ p$ x% ^0 N$ q
3 z, v! P9 C, ` vim /etc/systemd/system/redis.service+ x: F5 @% E7 [3 O& B8 f" O" f2 G. t
在文件中添加以下内容:
# J1 I0 H% K0 @! M3 O o3 C5 j2 Q6 H
5 R. M$ G5 D( z[Unit]/ i/ l; W; [# J% R/ g
Description=Redis In-Memory Data Store
; n! }0 L3 `2 x$ m+ zAfter=network.target
& L5 ^ ?) R( f9 F* h1 ^3 i8 ?. l- l9 F/ ?' J# ]/ Y
[Service]
1 J# E8 D/ e" ^$ \( RUser=redis7 Z$ P2 X: {) \3 h
Group=redis( ?) v' N& C0 c2 f
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf- A6 F7 |- q1 y. |1 c
ExecStop=/bin/kill -s TERM $MAINPID" J- D$ t+ c9 F) }
Restart=on-failure7 T* }6 Z& f% X6 E0 S# H# C2 `2 o
Type=notify/ m0 o8 T3 ]2 e& v* c+ e% ?" _1 i8 }
PIDFile=/var/run/redis_6379.pid # 根据需要修改端口号和PID文件位置# R) O, k# q9 k4 x/ y; Y% v' }) x" G2 j
PermissionsStartOnly=true5 x# m' U. m0 C
Restart=always# h2 S0 U, @5 M: h5 h, R/ W: O
LimitNOFILE=65535 # 根据需要调整文件描述符限制,默认是10240,Redis可能需要更多。
+ c# b0 c P% H' _! xLimitCORE=infinity # 让Redis可以产生core dump,以便于调试。根据需要调整。& q" L/ v- A7 K" x0 I/ n1 [: e
TimeoutStopSec=0 # 不等待正常停止,直接杀掉进程。根据需要调整。
' ^ F4 L: }8 E- K/ bPrivateTmp=true # 使用临时目录。根据需要调整。* ^3 T" `6 ?, ^0 E+ F3 M
PrivateDevices=yes # 不允许访问设备文件。根据需要调整。
/ N* w1 z8 m v) wProtectHome=true # 不允许访问home目录。根据需要调整。6 F9 f: r# z2 }" C3 L
ProtectSystem=full # 不允许访问系统目录。根据需要调整。
8 C8 H$ ^4 m5 T* g/ w7 BProtectControlGroups=true # 不允许访问控制组。根据需要调整。/ a2 ~0 I+ Y1 m. G% ~3 o
ProtectKernelTunables=yes # 不允许修改内核参数。根据需要调整。
- x8 Q1 j& `2 h2 ?ProtectKernelModules=yes # 不允许装载内核模块。根据需要调整。! @: z; T& q1 v) z0 O
ProtectKernelLogs=yes # 不允许访问内核日志。根据需要调整。- \; H: r8 J% |& e
NoNewPrivileges=yes # 不允许提升权限。根据需要调整。
& s2 K5 Y. V2 s% D, O$ m& h4 I3 I9 ~3 T# HReadWriteDirectories=-/var/lib/redis -/var/log/redis # 设置可读写的目录。根据需要调整。
9 N# q E( G1 a) jReadOnlyDirectories=-/etc/redis # 设置只读的目录。根据需要调整。 # 设置
0 ~& q+ a" N1 w7 K& F
( z6 g' U; z& o3 I2 x0 o
9 V- r% n0 A) |4 r6 P8 s' G/ j5 ^+ A& @' M9 B2 E; k
# T! z( t0 j2 ~0 |. [最终的:2 y: k/ o H7 @; T+ k2 G& u6 k
9 X7 ^. E. C) b; M4 {/etc/systemd/system/redis.service) G n; j; D7 F; `# }) }
6 r h( s! `& w& o- j
cat /etc/systemd/system/redis.service u% B. m4 {- @( ^
ini
( S2 R7 g+ ~2 ], \) T7 v[Unit]4 V& |7 E. ?' M/ y1 b, B l
Description=Redis In-Memory Data Store s& _3 g9 N& K$ q
After=network.target2 E& I3 b( Q% I" g9 G+ S2 C9 \
. P% r. o A* s. c* O
[Service]/ i4 o4 Q( ^# L1 B n
User=redis
) B; }8 I7 g/ ?: dGroup=redis% f' [* t& C9 L8 x. K# {
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
4 |9 h% e- \) m# _) w7 X0 i' q) rExecStop=/bin/kill -s TERM $MAINPID
4 O) v& u5 Z. O3 u. {Restart=on-failure
& g7 q* W2 \: t+ m8 r* m9 kType=notify
' d- b9 H$ X' tPIDFile=/var/run/redis/redis_6379.pid
1 @) u, Z. w8 f#PermissionsStartOnly=true
0 R7 c' ]8 b9 u2 I2 G7 m2 ~# ]Restart=always4 L: B- V# o; l# K6 b
LimitNOFILE=65535 Y* w; M9 i& V, `% E
LimitCORE=infinity - y1 O( Q/ j X) S$ o R/ Y4 S
TimeoutStopSec=0
6 A& T* {5 y) i% L' sPrivateTmp=true
/ {4 K, C$ s( N8 w# jPrivateDevices=yes
2 V5 e7 ]" ] D2 y3 Q% oProtectHome=true
+ x8 g. W. l# {7 f& [5 o0 PProtectSystem=full " U/ L5 S' M+ }& u: q7 i
ProtectControlGroups=true , i$ n6 n/ g' i# z
ProtectKernelTunables=yes ( D; \. z j" V
ProtectKernelModules=yes 6 ?' w. N1 w. b! Q$ p
NoNewPrivileges=yes - g6 b" S6 Z- i8 u7 U4 x
ReadWritePaths=-/var/lib/redis -/var/log/redis w" A1 p3 ~ ~" P7 _$ }
ReadOnlyPaths=-/etc/redis
; b& K1 s. d0 s+ F& I3 |; _) |1 `% a- a# @
/ J( A- l3 b7 n; A# ^4 O
# b. i! b) k5 @( s9 N- t" i3 M* E3 J' g9 p5 ~$ i: H* [7 C0 v
/ d: y+ c( x, A, ~, p3 t6 s j7 m, _; {
|
|