|
|
在 CentOS 8.5 上从源代码安装 Redis 涉及多个步骤,包括安装依赖项、编译和安装 Redis。下面是一个详细的指南:) P% N7 z8 _# J/ f. U
Z- a7 Z/ e9 l- I7 l" I
步骤 1: 安装依赖项
. V* [9 W, G0 ?% H$ T$ Q+ w首先,你需要安装编译 Redis 所需的依赖项。打开终端并运行以下命令:
" W6 c' q& N1 b1 m
2 k5 o1 W+ X% B[root@asset ~]# dnf install -y gcc make tcl
/ a* I5 o7 h' b+ p4 A& M( Q7 [& E8 p7 u5 d! S
# dnf install -y systemd-devel gcc make
/ C; t/ g4 O# C0 F" P+ I, [$ Z" {, h
步骤 2: 下载 Redis 源码
, Q6 c" h8 b8 N$ g1 n你可以从 Redis 的官方网站或 GitHub 仓库下载最新的源码。使用以下命令下载最新版本的源码:
/ o/ {$ t/ b" l. `. Y4 Y; ]1 I$ f, Q( A" ?. T
7 c9 S+ n+ N. W- d' k
wget https://download.redis.io/releases/redis-8.2.2.tar.gz! s$ ~1 E( r0 G }+ e( q( j
或者使用 curl:
Y; p) s: i0 x6 Q% J f, l" w0 u9 c$ i/ b/ J
curl -O https://download.redis.io/releases/redis-8.2.2.tar.gz. i& b+ h) Y0 a7 w* }/ {6 H' z5 ^
步骤 3: 解压源码包
" }+ }4 }$ T5 |5 F- b% W) v6 q下载完成后,解压源码包:
4 ~! x7 I6 Z% R/ I. y* k
f4 c( O# r; ~, D+ j+ P* d) Tbash
1 y9 F+ i/ p6 F- e# tar -zxvf redis-8.2.2.tar.gz- {. h3 i# }/ P( k
( t# T* X1 {, i6 S Q+ Ocd redis-8.2.2/
- F# z2 o, `, S4 t+ s4 g, b( [# h% s/ ]* v9 Y$ _! `
步骤 4: 编译 Redis* U8 ~1 J0 k/ s; l! T# T% g8 b
在源码目录中,运行以下命令来编译 Redis:
4 h# x* Y% Q4 {
; u2 ~* r, W- d$ O& Y& u[root@asset redis-8.2.2]# make PREFIX=/usr/local/redis install & [0 M! _5 m& a) Q* y0 z& F/ O5 ?
make USE_SYSTEMD=yes PREFIX=/usr/local/redis install# y, b! x6 d0 G
步骤 5: 安装 Redis
$ k* j5 p$ G) Z% n8 ~编译完成后,使用以下命令安装 Redis:: v: c: P1 J5 g$ Q# d- M
. @+ B' Q( G l& c
" j9 K, a7 s! jsudo make install 以上即可安装成功,这步可以不做。 只有上面只执行了make 需要做。/ \- C2 A- b. U1 ~: T4 y; d
步骤 6: 创建 Redis 用户(可选)
) o, ]% H1 C% `9 j为了安全起见,你可以创建一个专门用于运行 Redis 的用户。执行以下命令:
3 s4 n$ @- v" B: n2 P- c7 D L, T- D0 c( S7 o$ p+ X1 C. `& W8 d$ A
useradd -r -s /sbin/nologin -M redis; R% A$ W/ I7 j* J3 j; e
步骤 7: 配置 Redis(可选)
8 ?1 i. x- M2 [3 N+ `+ f& M/ s你可以通过编辑 /etc/redis/redis.conf 来配置 Redis。如果这个文件不存在,你可以从 /usr/local/bin 中复制一个示例配置文件:, [" u, w2 y; q: G
1 Y. I( B" G7 Q; M# k/ N做软连接,让系统可以调用redis服务: l" [7 V" v7 A: V9 {9 _
5 B3 v; n% |; w* h/ q- }) J" |+ K) K0 {8 y
[root@asset ~]# ln -s /usr/local/redis/bin/redis-server /usr/bin/: p4 {: g& Z/ A( m* d0 k! x" w
" g( [: J& a# K3 H. N
[root@asset ~]# ln -s /usr/local/redis/bin/redis-cli /usr/bin/# Y" A8 c: e% d; |* A
! m5 o5 }- \/ Y& M
验证命令:
+ y! D" B0 t+ V1 f[root@asset ~]# redis-server # j! c5 v, S6 Q" B4 d
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. J* f) B/ W% G% M; v o0 m
1720147:C 20 Mar 2026 20:53:29.549 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo3 z1 } m0 ]# j% n
1720147:C 20 Mar 2026 20:53:29.549 * Redis version=8.2.2, bits=64, commit=00000000, modified=0, pid=1720147, just started
d# A2 x+ T. J1 N1720147: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
* e8 c; S4 ~$ m1720147:M 20 Mar 2026 20:53:29.550 * Increased maximum number of open files to 10032 (it was originally set to 1024).9 F$ e3 F8 }6 R) i. E7 \4 `7 f
1720147:M 20 Mar 2026 20:53:29.550 * monotonic clock: POSIX clock_gettime
$ x$ ^5 @1 T; F, N7 w _._
- A$ w3 @0 P* ]) \: x2 l" \3 l _.-``__ ''-._ ! {1 ^! d# q3 x% w+ P
_.-`` `. `_. ''-._ Redis Open Source |; Y2 q4 Q6 X) i3 ~/ @- `
.-`` .-```. ```\/ _.,_ ''-._ 8.2.2 (00000000/0) 64 bit9 W3 j) v% U0 _: ?1 h
( ' , .-` | `, ) Running in standalone mode
X* w, ^' i" j& N% c$ x |`-._`-...-` __...-.``-._|'` _.-'| Port: 63795 ~( u8 ]) U) f F- m
| `-._ `._ / _.-' | PID: 1720147
) g$ z7 N6 A+ V0 B2 r `-._ `-._ `-./ _.-' _.-' 0 I# h- m9 Y1 v! f# ^
|`-._`-._ `-.__.-' _.-'_.-'| - X/ w! j- `' @5 Z' E$ z
| `-._`-._ _.-'_.-' | https://redis.io % l: b0 h) I3 R _
`-._ `-._`-.__.-'_.-' _.-'
- \4 G" D9 k9 ~ |`-._`-._ `-.__.-' _.-'_.-'|
$ c) m+ G9 O2 G1 V: Y& Y; z, c | `-._`-._ _.-'_.-' | ; j3 o3 w4 X. N( G4 E
`-._ `-._`-.__.-'_.-' _.-'
# `% h6 F5 @) r$ O$ f& x+ q `-._ `-.__.-' _.-'
- e; t! Q2 e# S) W+ [ `-._ _.-' ) y0 P: p# j6 K- h$ N
`-.__.-'
: e; {; S+ L% ^. P
# H3 ?3 [# A" S2 l. i9 B1720147: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.: V/ N' q% G% v0 p5 G4 v
1720147:M 20 Mar 2026 20:53:29.551 * Server initialized
" s& D. D3 }% G8 l& V6 G1720147:M 20 Mar 2026 20:53:29.551 * Ready to accept connections tcp
- g4 Q& h" p" P- u) c; Z$ ~^C1720147:signal-handler (1774011210) Received SIGINT scheduling shutdown...
* A. G& f2 x `: H1720147:M 20 Mar 2026 20:53:30.962 * User requested shutdown...
$ \" |5 S' {% y {1720147:M 20 Mar 2026 20:53:30.962 * Saving the final RDB snapshot before exiting.4 k8 R6 X5 a+ B
1720147:M 20 Mar 2026 20:53:30.964 * DB saved on disk
2 E- g. u1 e7 L" m/ p1720147:M 20 Mar 2026 20:53:30.964 # Redis is now ready to exit, bye bye...5 Y# h1 y. @! A9 ^( E# @# B: c' M: Q
[root@asset ~]# redis-cli
. x: `3 d, g* w0 v( n; uCould not connect to Redis at 127.0.0.1:6379: Connection refused
4 x2 ?* E9 ?3 H |not connected> quit
- \3 A2 }1 X B* O* M& c. c6 h8 b; Q1 a( t" @8 P
. ?: O- e! w* b% Y+ V, q9 S- d3 P, ~
3 o/ K2 Z: y4 N7 ]
新建redis的目录:
* N5 m. V& M' _# G
e7 A1 K0 G& w hmkdir /etc/redis/" w1 E3 i; a# ~* z; v
3 {/ _ c- E8 @/ O/ e
cp /usr/src/redis-8.2.2/redis.conf /etc/redis/6 r& z7 c. X4 ^2 A: h
ls -al /etc/redis/redis.conf 2 |* r9 [: P8 t6 N: g: C7 ]
-rw-r--r-- 1 root root 111227 3月 20 20:56 /etc/redis/redis.conf' A$ W8 b. |6 p: _2 x/ D$ t+ m
" p0 j8 o/ l% U4 s* Z
4 ^& h! z/ w7 V% V( a$ r
7 x' H; ]) J, `! {; c: Z2 N" f9 v+ D chown redis:redis /etc/redis/redis.conf
& N) }. h) z* x; t$ ], v9 x6 S1 d" v9 o0 s' f9 ~
步骤 8: 启动 Redis 服务(可选)6 F" x; f6 I7 X3 N2 z
你可以使用以下命令手动启动 Redis 服务:4 P! l9 { e0 ]7 e Q# \
/ L& N3 |' v9 |( K
redis-server /etc/redis/redis.conf
# k+ U: U' B8 b0 J) y, ~0 n8 V
M5 ], b2 x6 v+ n8 O或者,你也可以编写一个 systemd 服务单元来管理 Redis 服务。( T Y' E" n9 U5 j0 l' Y
! j2 a& S# g6 M* O( D创建一个新的 systemd 服务文件:
5 y' H. m" |2 }2 ?" v
; x$ r- W2 z7 R* z0 `/ b0 K* d8 {( ^% u6 e! u+ Q+ u! u
vim /etc/systemd/system/redis.service
: _" u' x: ~0 \8 v$ T5 I在文件中添加以下内容:* \- M' v7 V9 r* B
+ T! A+ y+ p! E R( @$ t6 e4 Z; o' I8 ]/ F, i
[Unit]; {- ~3 e, n( m8 {& b) k2 J
Description=Redis In-Memory Data Store6 Q7 {3 @* m2 v8 V3 r& ^2 E N) g
After=network.target$ o5 \" p" ^2 y$ A* e D
2 |& i4 O/ t, P/ N8 @[Service] X! z% W. Q6 A ~* p* S4 U6 n& ~% `
User=redis
( p- m) o& J1 a [Group=redis4 w. }" z0 F. S7 J9 U8 q' R
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf4 W$ s7 ~2 N! X$ ? c8 v
ExecStop=/bin/kill -s TERM $MAINPID
, J# E% d% p$ y+ D$ b+ K. G' vRestart=on-failure
9 q' D# T" w2 [) R9 ^, m |( W8 z8 pType=notify
|0 ? b9 k3 uPIDFile=/var/run/redis_6379.pid # 根据需要修改端口号和PID文件位置/ t6 V( x- c* k/ D7 G4 `4 b1 y% n
PermissionsStartOnly=true5 `' s) r* ^7 T q2 w. n! i# Q# J
Restart=always% _. P! ^) h; P3 N/ `; q
LimitNOFILE=65535 # 根据需要调整文件描述符限制,默认是10240,Redis可能需要更多。* r2 Z0 \: l1 ?" O
LimitCORE=infinity # 让Redis可以产生core dump,以便于调试。根据需要调整。+ Q3 G4 V# F- k6 P* P" A+ m
TimeoutStopSec=0 # 不等待正常停止,直接杀掉进程。根据需要调整。! |: P$ q2 n' D6 v
PrivateTmp=true # 使用临时目录。根据需要调整。
( h! r# M" Z6 J% u( b* b$ sPrivateDevices=yes # 不允许访问设备文件。根据需要调整。- [3 w( D: D& w" F+ H, G [% Z
ProtectHome=true # 不允许访问home目录。根据需要调整。
1 B/ F* `" T& I. v) K6 M' `% _3 XProtectSystem=full # 不允许访问系统目录。根据需要调整。& V7 V7 z' s0 Q+ d: i
ProtectControlGroups=true # 不允许访问控制组。根据需要调整。
- { L6 W. A/ A6 PProtectKernelTunables=yes # 不允许修改内核参数。根据需要调整。/ l0 U# p: o; ~3 Y; U2 p- f
ProtectKernelModules=yes # 不允许装载内核模块。根据需要调整。
+ \8 |" ]3 \8 D7 ^% T8 r0 dProtectKernelLogs=yes # 不允许访问内核日志。根据需要调整。8 a) m, y* T7 U4 M6 ]% u& ^
NoNewPrivileges=yes # 不允许提升权限。根据需要调整。
/ C9 b( a0 @) x7 i. NReadWriteDirectories=-/var/lib/redis -/var/log/redis # 设置可读写的目录。根据需要调整。7 Z! l/ n4 w" X. n
ReadOnlyDirectories=-/etc/redis # 设置只读的目录。根据需要调整。 # 设置
3 K4 l( r) a' C _/ m
0 c. h; }, x# e8 o( o. ]: p+ Z* k& E7 d6 M! Y
2 B1 Y3 k" G0 ^4 X3 U4 P" z* L. ~/ A6 Y
最终的:; {9 `% V+ t& P+ ?$ Q _- a
! h; H: }7 \3 Z+ W4 z% O$ Z- l* W/etc/systemd/system/redis.service. p) ]" H. k, G) X0 S
+ j* N R$ W4 {- u$ t& O l# C+ i: ]7 K cat /etc/systemd/system/redis.service
+ z# f$ J0 j6 r; b5 N4 I6 Nini 8 c6 O5 y- D/ _ y/ T1 \
[Unit]
1 I* {4 E! ?" C7 \) f* r1 }Description=Redis In-Memory Data Store: D M# m2 k3 r, J) b
After=network.target
z4 F+ C% P g9 c& r- b) P
7 y, {& U& j4 s, {9 a% r[Service]
# j' [; y C: ^# `) nUser=redis
' F5 h% q6 V. J! }" A6 pGroup=redis
8 {9 R2 R( O5 C" l0 |2 V' ?9 }! oExecStart=/usr/bin/redis-server /etc/redis/redis.conf
6 }/ N5 t4 r/ E! Z1 R1 V; V. ]ExecStop=/bin/kill -s TERM $MAINPID
( X8 Y+ U" Y2 [ J/ `9 E/ [2 lRestart=on-failure. k8 c1 j( l& ^$ U( a
Type=notify
- e: s" H6 _9 [) x- NPIDFile=/var/run/redis/redis_6379.pid % z3 p2 F5 u# Y" p. P N I
#PermissionsStartOnly=true+ y4 Y! g- ?+ Y! w
Restart=always3 `' \- s5 }5 ]7 S" N7 Z* b
LimitNOFILE=65535
8 ~7 h& j/ J3 s! a6 J: [- }, }LimitCORE=infinity
7 \4 `* R, Q- z4 D O, [TimeoutStopSec=0 5 |& r( K- Q1 z8 j
PrivateTmp=true 5 p4 ]8 F3 Z( q# A: ]0 J
PrivateDevices=yes
" n' |" b* ^% a; ]' XProtectHome=true
& T0 w# \3 Z2 m- C+ l- @ProtectSystem=full
) \& M. q: x1 E: EProtectControlGroups=true ; { m. E, r* w! K6 ]: W4 B
ProtectKernelTunables=yes
1 f" i0 `7 H6 l! Y/ K6 aProtectKernelModules=yes 0 I9 ?2 ?! v3 v1 d! |2 [
NoNewPrivileges=yes ) r! R3 ^* v' l% l; ?1 b. `
ReadWritePaths=-/var/lib/redis -/var/log/redis
( X5 i0 s7 k% P/ I" rReadOnlyPaths=-/etc/redis* L9 C: A+ v2 Z
! m. P8 B$ j8 B+ e9 Y7 _
* u9 K2 B- k# g8 a+ {) \7 ~5 h
7 L6 e# J/ x( V0 G0 @: H- T3 c+ r, i! T! e
, `# ~: H7 N" R9 P9 n" o4 O# ^" @# C. K
|
|