系统环境

标题 版本 备注
系统版本 ubuntu 22.04.3 LTS (Jammy Jellyfish) -
内核版本 5.15.0-88-generic #98-Ubuntu SMP Mon Oct 2 15:18:56 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux -
Redis v6.2.8 -

Redis 简介

Redis 官方站点: https://redis.io/downloads/

Redis(Remote Dictionary Server)是一个开源的内存数据库(也可以持久化到磁盘),常用作缓存、消息队列、会话管理等用途。它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等,并提供了丰富的功能和特性,如事务支持、发布与订阅、持久化、主从复制等。

Redis的主要特点包括:

  1. 性能高:Redis 将数据存储在内存中,因此具有极高的读写性能。此外,Redis 使用单线程模型,避免了多线程竞争的开销,提高了并发能力。

  2. 支持丰富的数据结构:除了基本的字符串外,Redis 还支持哈希表、列表、集合、有序集合等数据结构,使其更适用于不同的应用场景。

  3. 持久化支持:Redis 提供了两种持久化方式,分别是快照(Snapshot)和日志追加(Append-Only File, AOF),保证了数据在断电等异常情况下不丢失。

  4. 分布式支持:Redis 支持数据分片和主从复制,可以构建分布式系统,提高了系统的可用性和可扩展性。

  5. 丰富的功能:Redis 提供了丰富的功能和命令,如事务支持、发布与订阅、Lua 脚本执行等,可以满足不同场景下的需求。

由于其高性能、丰富的功能和易用性,Redis 在互联网应用中被广泛应用于缓存、会话管理、计数器、消息队列等场景,成为了当今最流行的内存数据库之一。

Redis 安装

1.将系统 shell 环境设置为 bash, 而不是默认的 dash

1
$ dpkg-reconfigure dash

如图:

2.在 /usr/local/sbin 目录下新建 redis 安装脚本 redis.sh ,内容如下:

  • redis 版本号可以从官方给出的归档列表地址:https://download.redis.io/releases 获取;
  • 该脚本可以反复执行,每执行一次就等于重新安装一次 redis;
  • 实现了在同一个服务器上安装不同版本的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
#!/usr/bin/env bash

# 安装Redis函数
install_redis() {
echo "开始安装Redis..."
sudo apt update
sudo apt install -y wget make gcc openssl

# 定义变量
down_link="https://download.redis.io/releases/redis-${RD_VERSION}.tar.gz"
local redis_port=$((RANDOM + 1000))
local redis_pass=$(openssl rand -base64 30)
local redis_dir='/data/redis'
local redis_down_dir='/usr/local/src'
local redis_id="$(basename "${down_link}")"
local redis_id_version="$(basename "${redis_down_dir}/${redis_id}" .tar.gz)"
local server_ip_addr=$(hostname -i | cut -d ' ' -f1)

# 下载和解压Redis
wget -O "${redis_down_dir}/${redis_id}" "${down_link}"
tar -zxf "${redis_down_dir}/${redis_id}" -C "${redis_down_dir}/"

# 编译和安装Redis
mv "${redis_down_dir}/${redis_id_version}" "${redis_dir}/${redis_port}" && cd "${redis_dir}/${redis_port}" && make

# 创建相关目录
eval mkdir -p "${redis_dir}/${redis_port}/{bin,etc,var}"

# 复制文件到相应目录
cp -a "${redis_dir}/${redis_port}/src/redis-"{benchmark,check-aof,check-rdb,cli,sentinel,server} "${redis_dir}/${redis_port}/bin"
cp -a "${redis_dir}/${redis_port}/redis.conf" "${redis_dir}/${redis_port}/etc/"

# 修改配置文件
sed -i "s/^port 6379/port ${redis_port}/" "${redis_dir}/${redis_port}/etc/redis.conf"
sed -i 's/^daemonize no/daemonize yes/' "${redis_dir}/${redis_port}/etc/redis.conf"
sed -i "s#^logfile \"\"#logfile \"${redis_dir}/${redis_port}/var/redis_${redis_port}.log\"#" "${redis_dir}/${redis_port}/etc/redis.conf"
sed -i "s#^pidfile /var/run/redis_6379.pid#pidfile ${redis_dir}/${redis_port}/var/redis_${redis_port}.pid#" "${redis_dir}/${redis_port}/etc/redis.conf"
sed -i "s@^# maxclients 10000@maxclients 100@" "${redis_dir}/${redis_port}/etc/redis.conf"
sed -i "s@^# requirepass foobared@requirepass ${redis_pass}@" "${redis_dir}/${redis_port}/etc/redis.conf"
sed -i "s/^# maxmemory <bytes>/maxmemory 2G/" "${redis_dir}/${redis_port}/etc/redis.conf"
echo "bind ${server_ip_addr}" >> "${redis_dir}/${redis_port}/etc/redis.conf"

# 创建Redis启动脚本
cat > "/usr/lib/systemd/system/redis-${redis_port}.service" <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
Type=forking
ExecStart=${redis_dir}/${redis_port}/bin/redis-server ${redis_dir}/${redis_port}/etc/redis.conf
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 启动Redis服务并设置开机自启动
systemctl start "redis-${redis_port}.service" && systemctl enable "redis-${redis_port}.service"

# 输出安装信息
clear
echo -e "\033[31m===================== Redis 安装信息 ======================== \033[0m"
echo -e "\033[33m redis IP :${server_ip_addr} \033[0m"
echo -e "\033[33m redis 版本:${redis_id_version} \033[0m"
echo -e "\033[33m redis 端口:${redis_port} \033[0m"
echo -e "\033[33m redis 密码:${redis_pass} \033[0m"
echo -e "\033[33m redis 路径:${redis_dir}/${redis_port} \033[0m"
echo -e "\033[31m============================================= \033[0m"

# 删除下载的包和脚本文件
rm -f "${redis_down_dir}/${redis_id}" "$0"
}

# 主函数
main() {
# 检查是否为root用户
if [ "$(id -u)" -ne 0 ]; then
echo "请以root用户或使用sudo权限执行此脚本."
exit 1
fi

# 检查是否已经安装wget和gcc等软件
if ! command -v wget >/dev/null || ! command -v make >/dev/null || ! command -v gcc >/dev/null || ! command -v openssl >/dev/null; then
echo "请先安装wget、make、gcc和openssl."
exit 1
fi

# 输入Redis版本
read -rp "$(echo -e "\033[31m请输入Redis版本号:\033[0m:")" RD_VERSION

# 调用安装Redis函数
install_redis
}

# 执行主函数
main

3.执行安装命令:

1
sh /usr/local/sbin/redis.sh