Redis安装及运维

news2024/12/23 18:57:44

源码安装

Redis安装前建议要进行残留数据检查,排除后期存在的各种隐患

官网:https://redis.io/,Linux版本只会提供源码,不提供二进制安装包,因此需要编译源码进行安装,本次使用CentOS8 VMware虚拟机进行安装,可直接到 https://download.redis.io/releases/ 下载压缩包然后传入虚拟机。这里直接通过命令行下载,选择redis-6.2.3.tar.gz这个版本

wget https://download.redis.io/releases/redis-6.2.3.tar.gz
tar -xvzf redis-6.2.3.tar.gz

安装gcc和make

安装redis之前先安装gcc和make,如果有网络就用yum在线安装即可

yum -y install gcc && yum -y install gcc-c++

采用此方式安装的 GCC 编译器,版本通常较低,如果想编译 C++11 标准下的 C++ 程序,则至少要安装 4.8 版本的 GCC 编译器,低版本的 GCC 编译器是不支持 C++11 标准的。

安装redis

切换到redis目录下,该目录下面有Makefile文件

# 编译源码,过程可能比较耗时
make
# 执行测试,可不做
make test
# 安装
make install
# make失败后的清理工作
make distclean

安装位置在/usr/local/bin目录

安装TCL

如果报错:You need tcl 8.5 or newer in order to run the Redis test,说明系统中缺少 tcl 或者 tcl 版本比较老

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
sudo tar xzvf tcl8.6.1-src.tar.gz -C /usr/local
cd /usr/local/tcl8.6.1/unix
sudo ./configure
sudo make && make install

从源代码编译 Redis,默认情况下 Redis 会被安装到 /usr/local/bin、/usr/local/lib 和 /usr/local/etc 等目录。通常可以通过 make install 命令指定安装目录:make install PREFIX=/usr/local/redis,安装后是下面这样,bin目录下存放二进制可执行文件

[root@localhost redis]# tree .   # /usr/local/redis
.
└── bin
    ├── redis-benchmark
    ├── redis-check-aof -> redis-server
    ├── redis-check-rdb -> redis-server
    ├── redis-cli
    ├── redis-sentinel -> redis-server
    └── redis-server

安装脚本

在CentOS8上安装redis-6.2.3版本

#!/bin/bash

echo "Redis install script starting ======= $0 =================="

# 默认值
redis_version=""
install_dir="/usr/local/redis"
offline_mode=false
skip_compile=false

# 解析命令行参数
while [[ "$#" -gt 0 ]]; do
    case $1 in
        -version) redis_version="$2"; shift ;;
        -target) install_dir="$2"; shift ;;
        --source) offline_mode=true; source_dir="$2"; shift ;;
        --skipCompile) skip_compile=true ;;
        *) echo "Error: Unknown parameter $1"; exit 1 ;;
    esac
    shift
done

# 检查参数
if [[ "$offline_mode" == true && -z "$source_dir" ]]; then
    echo "Error: Source directory must be provided in offline mode."
    exit 1
fi

if [[ "$offline_mode" == true && -z "$redis_version" ]]; then
    redis_version=$(basename "$source_dir")
fi

if [[ -z "$install_dir" || -z "$redis_version" ]]; then
    echo "Error: Either -version or --source must be provided."
    exit 1
fi

# 检查目标目录
if [ -d "$install_dir" ]; then
    read -t 60 -p "Directory $install_dir already exists. Delete? (y/n): " confirm
    if [[ $confirm =~ ^[yY]$ ]]; then
        echo "Deleting existing directory $install_dir."
        rm -rf "$install_dir" || { echo "Error deleting directory $install_dir"; exit 1; }
    else
        echo "Installation directory $install_dir exists. Exiting installation."
        exit 1
    fi
fi

mkdir -p "$install_dir" || { echo "Error creating directory $install_dir"; exit 1; }
echo "Installation directory $install_dir created."

# 检查源码目录
if [ "$offline_mode" == true ]; then
    source_dir=$(realpath "$source_dir") || { echo "Error resolving source directory $source_dir"; exit 1; }
    cd "$source_dir" || { echo "Error: Cannot access source directory $source_dir"; exit 1; }
else
    cd "$install_dir" || { echo "Error: Cannot access installation directory $install_dir"; exit 1; }
    redis_url="https://download.redis.io/releases/$redis_version.tar.gz"
    echo "================= Downloading Redis $redis_version ================="
    wget "$redis_url" -O "$redis_version.tar.gz" || { echo "Failed to download $redis_url. Please check your network."; exit 1; }
    echo "================= Download complete, extracting... ================="
    tar -zxvf "$redis_version.tar.gz" || { echo "Failed to extract $redis_version.tar.gz"; exit 1; }
    cd "$install_dir/$redis_version" || { echo "Error: Cannot access extracted directory $install_dir/$redis_version"; exit 1; }
fi

# 安装依赖
if [ "$skip_compile" == false ]; then
    echo "================= Installing dependencies... ================="
    yum install gcc-c++ -y || { echo "Failed to install dependencies. Please check your package manager."; exit 1; }
fi

# 编译或安装
if [ "$skip_compile" == true ]; then
    echo "================= Skipping compilation. Installing directly... ================="
    make install PREFIX="$install_dir" || { echo "Installation failed during 'make install'. Please check for errors."; exit 1; }
else
    echo "================= Compiling Redis... ================="
    make || { echo "'make' command failed. Please check for errors in the compilation process."; exit 1; }
    echo "================= Installing Redis... ================="
    make install PREFIX="$install_dir" || { echo "Installation failed during 'make install'. Please check for errors."; exit 1; }
fi

# 配置文件和启动脚本
cp redis.conf "$install_dir/redis.conf" || { echo "Failed to copy redis.conf"; exit 1; }
cp sentinel.conf "$install_dir/sentinel.conf" || { echo "Failed to copy sentinel.conf"; exit 1; }

cp redis.conf "$install_dir/bin/redis.conf" || { echo "Failed to copy redis.conf backup"; exit 1; }
cp sentinel.conf "$install_dir/bin/sentinel.conf" || { echo "Failed to copy sentinel.conf backup"; exit 1; }

# 创建启动脚本
startup_script="$install_dir/bin/start_redis.sh"
echo -e "#!/bin/bash\n$install_dir/bin/redis-server $install_dir/redis.conf" > "$startup_script" || { echo "Failed to create startup script $startup_script"; exit 1; }
chmod +x "$startup_script" || { echo "Failed to make $startup_script executable"; exit 1; }

echo "================= Redis installation complete ================="
echo "You can start Redis using the command: $startup_script"

使用方式

# 给予执行权限
chmod +x install_redis.sh
# 在线模式
./install_redis.sh -version 6.2.3 -target /usr/local/redis
# 离线模式
./install_redis.sh --source ./redis-6.2.3 -target /usr/local/redis
# 跳过编译
./install_redis.sh --source ./redis-6.2.3 --skipCompile

安装结果如下

在这里插入图片描述

包管理器安装

使用包管理器(如 apt 或 yum)安装 Redis 时,默认安装目录通常是:
可执行文件:/usr/bin/redis-server
配置文件:/etc/redis/redis.conf
数据目录:/var/lib/redis
日志目录:/var/log/redis/redis-server.log

修改配置脚本

脚本名称redis-config.sh,赋予权限:chmod +x redis-config.sh

#!/bin/bash

# 检查参数数量
if [ "$#" -lt 2 ]; then
    echo "usage: $0 set <config_key> <new_value> </path/to/redis.conf>"
    exit 1
fi

# 从参数中获取操作类型、配置项、新值和配置文件路径
OPERATION="$1"
CONFIG_KEY="$2"
CONFIG_FILE="${@:3}"  # 允许传入多个参数,最后一个参数是文件路径

# 检查配置文件是否存在
if [ ! -f "$CONFIG_FILE" ]; then
    echo "Error: config file $CONFIG_FILE not found!"
    exit 1
fi

case "$OPERATION" in
    set)
        if [ "$#" -ne 3 ]; then
            echo "usage: $0 set <config_key> <new_value> </path/to/redis.conf>"
            exit 1
        fi
        CONFIG_VALUE="$3"
        
        # 检查配置项是否存在
        if grep -q "^$CONFIG_KEY" "$CONFIG_FILE"; then
            # 如果存在,替换值
            sed -i "s/^$CONFIG_KEY .*/$CONFIG_KEY $CONFIG_VALUE/" "$CONFIG_FILE"
            echo "config $CONFIG_KEY is updated to $CONFIG_VALUE。"
        else
            # 如果不存在,添加到文件末尾
            echo "$CONFIG_KEY $CONFIG_VALUE" >> "$CONFIG_FILE"
            echo "config $CONFIG_KEY added, value is $CONFIG_VALUE。"
        fi
        ;;
    
    get)
        # 获取配置项的值
        VALUE=$(grep "^$CONFIG_KEY" "$CONFIG_FILE" | awk '{print $2}')
        if [ -z "$VALUE" ]; then
            echo "config $CONFIG_KEY doee not exist!"
        else
            echo "$CONFIG_KEY = $VALUE"
        fi
        ;;
    
    *)
        echo "invalid operation: $OPERATION, command set or get is supported currently!"
        exit 1
        ;;
esac

# 提示用户重启 Redis 以应用更改(仅在 set 操作后)
if [ "$OPERATION" = "set" ]; then
    echo "please restart Redis to check if the config is active!"
fi

使用方法:
redis-config.sh set maxmemory 256mb /path/to/your/redis.conf
redis-config.sh get maxmemory /path/to/your/redis.conf

卸载清理

以下步骤无先后顺序

  1. 确认Redis是否已经安装在系统中
#检查有没有残留客户端
whereis redis-cli
#检查有没有残留服务
whereis redis-server
  1. 停止Redis服务
#查看是否有redis的进程
ps -ef | grep redis
#杀掉redis进程
kill -9 进程号
  1. 如果需要,删除Redis的配置文件和数据。注意:删除文件时一定要确保自己知道删的是什么
# 查找系统中所有与redis相关的目录文件
find / -name redis
# 删掉查找出来的目录
rm -rf /etc/redis
rm -rf /var/lib/redis

如果redis确定有装过,可通过下面等操作找相关文件进行删除

# 查看当前redis的版本,这个查出来是6.2.3
redis-server --version
# 根据版本得知安装目录名称是redis-6.2.3,查找它的安装目录
find / -name redis-6.2.3
# 清除redis安装目录
rm -rf /data/local/redis-6.2.3
# 再次查看版本或查看客户端,如果都报错说明卸载成功了
redis-server --version
redis-cli
  1. 清除PATH环境变量
  2. 清除Redis服务,开机启动等设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2230325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows10 安装 达梦数据库DM8

一. 前期工作 下载 https://www.dameng.com/list_103.html 通过百度网盘分享的文件&#xff1a;达梦数据库 链接&#xff1a;https://pan.baidu.com/s/1mJcT3UiwojeWIhXpAwh-RA 提取码&#xff1a;jyzi 点我: 想要 解压 双击iso文件 二. 安装步骤 1 .双击setup.ext安装 …

机器人大模型GR2——在大规模视频数据集上预训练且机器人数据上微调,随后预测动作轨迹和视频(含GR1详解)

前言 上个月的24年10.9日&#xff0c;我在朋友圈看到字节发了个机器人大模型GR2&#xff0c;立马去看了下其论文(当然了&#xff0c;本质是个技术报告) 这次也是我头一次看paper&#xff0c;不看正文&#xff0c;而是直奔其References&#xff0c;​看有没有我预想中的文献&a…

PCB电源层布线信号

在印刷电路板(PCB)的设计过程中,电源层通常被视为电源分配网络(PDN)的核心。电源层和接地层通常是通过平面铜层来实现的,旨在确保系统稳定性。然而,随着电路板复杂性的增加,尤其是在多层电路板中,设计师可能面临在电源层上布置信号线路的需求。虽然这种做法可以节省空…

【大数据学习 | kafka】producer的参数与结构

1. producer的结构 producer&#xff1a;生产者 它由三个部分组成 interceptor&#xff1a;拦截器&#xff0c;能拦截到数据&#xff0c;处理完毕以后发送给下游&#xff0c;它和过滤器不同并不是丢弃数据&#xff0c;而是将数据处理完毕再次发送出去&#xff0c;这个默认是不…

Java基本语法和基础数据类型——针对实习面试

目录 Java基本语法和基础数据类型标识符和关键字有什么区别&#xff1f;Java关键字有哪些&#xff1f;Java基本数据类型有哪些&#xff1f;什么是自动装箱和拆箱&#xff1f;自动装箱&#xff08;Autoboxing&#xff09;自动拆箱&#xff08;Unboxing&#xff09; 自动装箱和拆…

自动化测试工具Ranorex Studio(十九)-其他编辑选项

失败继续运行和禁用 表中列出的每个Action条目&#xff0c;都可以设置为禁用或 “失败继续运行”。 设置action条目为“失败继续运行”时&#xff0c;如果遇到错误&#xff0c;模块不会停在那个位置&#xff0c;而是继续执行。 您可以通过右键菜单或属性窗口设置这两个选项。 设…

知识见闻 - Workday公司介绍

人力资源“一哥”Workday的前世今生 01 Duffield 既然要聊Workday&#xff0c;我们首先要认识一个人。David Duffield&#xff0c;又一位企业软件服务行业的绝对大神。 大卫杜菲尔德&#xff08;David Duffield&#xff09;出生于1941年。 40岁&#xff0c;很多职场人都已经认命…

VS2022配置调试Qt源代码

需要保证源代码和项目使用的版本匹配&#xff0c;符号需要注意是64位还是32位&#xff0c;并且用msvc。 1. 设置源代码路径 2. 设置调试PDB路径 这里最好把4个地方都加进去&#xff0c;防止某些不常用PDB被漏掉。 D:\Qt\5.15.2\msvc2019_64\bin D:\Qt\5.15.2\msvc2019_64\lib…

利用腾讯元器构建商业化AI智能体——【快递100 AI智能体实战教学】

写在开头 随着人工智能技术的不断进步&#xff0c;腾讯元器作为一项强大的工具&#xff0c;使得构建商业化的AI智能体变得更加便捷和高效。本文将带你深入了解如何利用腾讯元器搭建快递100 AI智能体的全过程&#xff0c;从前期规划到最终实现&#xff0c;为你提供一份详尽的实…

「C/C++」C++ 设计模式 之 单例模式(Singleton)

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

【前端基础】CSS基础

目标&#xff1a;掌握 CSS 属性基本写法&#xff0c;能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#…

【Oracle】空格单字符通配符查询匹配失败

问题 在进行模糊查询的时候&#xff0c;通过全局任意字符串匹配出含有两个字刘姓的人&#xff0c;但是通过刘_不能匹配出结果。 解决 检查后发现&#xff0c;姓名中包含空格 SELECT * FROM student WHERE TRIM(sname) LIKE 刘_;第一种解决方案就是查询的时候进行去空格处理&a…

查看多个通道32bit音频pcm数据

本文分析一个32位多通道pcm数据&#xff0c;一方面简单解释一下pcm数据格式&#xff0c;另外一方面看清楚实际数据的精度是多少。 说明&#xff1a;这是一个alsa采集到的10路32bit的pcm数据。 使用bc打开&#xff0c;16进制数据显示如下图&#xff1a; 图中左边是一个10通道32…

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割&#xff01; 【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割&#xff01; 文章目录 【语义分割|代码解析】CMTFNet-2: …

Webpack 配置module.css报错Uncaught TypeError: Cannot read properties of undefined

我的项目结构如下: 入口文件是index.jsx&#xff0c;组件Button.jsx使用了样式button.module.css .btn {background-color: #4CAF50;border: none;color: white; padding: 15px 32px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin:…

Redis(2):内存模型

一、Redis内存统计 工欲善其事必先利其器&#xff0c;在说明Redis内存之前首先说明如何统计Redis使用内存的情况。 在客户端通过redis-cli连接服务器后&#xff08;后面如无特殊说明&#xff0c;客户端一律使用redis-cli&#xff09;&#xff0c;通过info命令可以查看内存使用情…

Docker打包自己项目推到Docker hub仓库(windows10)

一、启用Hyper-V和容器特性 1.应用和功能 2.点击程序和功能 3.启用或关闭Windows功能 4.开启Hyper-V 和 容器特性 记得重启生效&#xff01;&#xff01;&#xff01; 二、安装WSL2&#xff1a;写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/143057041 三…

python如何安装扩展包

1、扩展包 Python安装额外的扩展包&#xff0c;一般使用anconda进行管理。 1、1安装命令 一般我们在anconda中通过pip install 包名 的方式进行安装&#xff0c;不过由于这些包在国外下载&#xff0c;因此需要配置合适的镜像促使其下载更快。 1、2 镜像源配置 1、2、1 一次…

【风冷换热器设计及计算

某空气调节工程需要将33.3kg/s的空气&#xff0c;由干球温度t123℃、相对湿度ψ160&#xff05;&#xff0c;冷却到干球温度t212℃、相对湿度ψ290&#xff05;&#xff0c;冷凝器出口为40℃的饱和液体&#xff0c;制冷剂采用R22&#xff0c;试设计一台直接蒸发式空气冷却器。 …

LabVIEW程序员赚钱不仅限于上班

LabVIEW程序员拥有多种途径来实现财富增值&#xff0c;而不仅仅局限于传统的全职工作。以下是一些他们可以利用自身技能和专业知识实现更高财务收益的方法&#xff1a; 1. 专注领域的自由职业与合同工作 制造、科研、医疗技术等行业都需要LabVIEW的专业知识。通过自由职业&…