Redis再次开源!reids8.0.0一键安装脚本分享

准备工作

1. 下载 Redis 8 安装包
# Redis 8.0.0 示例(请替换为实际版本)
http://download.redis.io/releases/redis-8.0.0.tar.gz

在这里插入图片描述

一、脚本内容:

#!/usr/bin/python
# -*- coding: UTF-8 -*-import os
import time
import shutil
import subprocessREDIS_VERSION = "redis-8.0.0"
REDIS_TAR = REDIS_VERSION + ".tar.gz"  # 改为Python 2兼容的字符串拼接
INSTALL_DIR = "/usr/local/redis"
BACKUP_DIR = os.path.join(INSTALL_DIR, "backups")
BACKUP_SCRIPT = os.path.join(INSTALL_DIR, "backup_redis.sh")def run_command(cmd, error_msg):"""执行命令并检查结果,失败时抛出异常(Python 2兼容版本)"""ret = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)output, error = ret.communicate()if ret.returncode != 0:raise Exception("%s (code: %d)\nError output: %s" % (error_msg, ret.returncode, error))def install_dependencies():"""安装依赖"""try:run_command("rpm -Uvh --force --nodeps ./gcc/*.rpm", "依赖安装失败,请检查gcc RPM包是否存在")except Exception as e:print "\033[31m错误:%s\033[0m" % str(e)raisedef install_redis():"""安装Redis"""try:# 解压if not os.path.exists(REDIS_TAR):raise Exception("Redis安装包 %s 不存在" % REDIS_TAR)run_command("tar -zxvf " + REDIS_TAR, "解压Redis失败")# 编译安装os.chdir(REDIS_VERSION)run_command("make MALLOC=libc", "编译Redis失败")os.chdir("src")run_command("make install", "安装Redis失败")# 创建安装目录if os.path.exists(INSTALL_DIR):shutil.rmtree(INSTALL_DIR)os.makedirs(INSTALL_DIR)# 复制文件run_command("cp -R ./* " + INSTALL_DIR, "复制文件失败")run_command("cp ../redis.conf " + INSTALL_DIR + "/", "复制配置文件失败")# 修改配置conf_path = os.path.join(INSTALL_DIR, "redis.conf")with open(conf_path, "r") as f:content = f.read()content = content.replace("daemonize no", "daemonize yes")content = content.replace("bind 127.0.0.1 -::1", "bind 0.0.0.0")content = content.replace("# requirepass foobared", "requirepass 123456")with open(conf_path, "w") as f:f.write(content)# 启动Redisrun_command(INSTALL_DIR + "/redis-server " + INSTALL_DIR + "/redis.conf", "启动Redis服务失败")except Exception as e:print "\033[31m错误:%s\033[0m" % str(e)raisedef setup_backup():"""配置数据备份策略(Python 2兼容版本)"""try:# 创建备份目录if not os.path.exists(BACKUP_DIR):os.makedirs(BACKUP_DIR)# 创建备份脚本backup_script = """#!/bin/bash
BACKUP_DIR="%s"
DATE=$(date +%%Y%%m%%d_%%H%%M%%S)
# 备份RDB文件
cp %s/dump.rdb "$BACKUP_DIR/dump_$DATE.rdb" 2>/dev/null || echo "无RDB文件可备份"
# 删除7天前的备份
find "$BACKUP_DIR" -name 'dump_*.rdb' -mtime +7 -exec rm -f {} \\;
""" % (BACKUP_DIR, INSTALL_DIR)with open(BACKUP_SCRIPT, "w") as f:f.write(backup_script)os.chmod(BACKUP_SCRIPT, 0755)# 添加cron任务cron_job = "0 2 * * * root " + BACKUP_SCRIPT + "\n"with open("/etc/cron.d/redis_backup", "w") as f:f.write(cron_job)except Exception as e:print "\033[33m警告:备份配置失败 - %s\033[0m" % str(e)def detect_service():"""检测服务是否运行(Python 2兼容版本)"""try:time.sleep(3)result = subprocess.Popen("pgrep -f redis-server", shell=True, stdout=subprocess.PIPE)output = result.communicate()[0]return result.returncode == 0except:return Falsedef prompt_success():"""安装成功提示(Python 2兼容版本)"""print """\033[5;32;40m 恭喜%s安装成功! \033[0m使用前注意:Redis已启动,端口:6379,绑定所有网卡,密码:123456防火墙需放行6379端口,临时关闭防火墙命令:systemctl stop firewalld安装路径:%s启动命令:%s/redis-server %s/redis.conf配置文件:%s/redis.conf数据备份策略:每日凌晨2点自动备份RDB文件至:%s保留最近7天的备份,旧备份自动删除备份脚本位置:%s""" % (REDIS_VERSION, INSTALL_DIR, INSTALL_DIR, INSTALL_DIR, INSTALL_DIR, BACKUP_DIR, BACKUP_SCRIPT)def prompt_fail():"""安装失败提示(Python 2兼容版本)"""print """\033[5;31;40m 安装失败,请检查错误信息! \033[0m"""if __name__ == '__main__':try:install_dependencies()install_redis()setup_backup()if detect_service():prompt_success()else:print "\033[31m错误:Redis进程未检测到,可能启动失败\033[0m"prompt_fail()except Exception as e:prompt_fail()

二、执行步骤

[root@myoracle redis8]# chmod +x redis8.py
[root@myoracle redis8]# ./redis8.py 

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

stm32之BKP备份寄存器和RTC时钟

目录 1.时间戳1.1 Unix时间戳1.2 UTC/GMT1.3 时间戳转换**1.** time_t time(time_t*)**2.** struct tm* gmtime(const time_t*)**3.** struct tm* localtime(const time_t*)**4.** time_t mktime(struct tm*)**5.** char* ctime(const time_t*)**6.** char* asctime(const stru…

Android学习总结之算法篇八(二叉树和数组)

路径总和 import java.util.ArrayList; import java.util.List;// 定义二叉树节点类 class TreeNode {int val;TreeNode left;TreeNode right;// 构造函数,用于初始化节点值TreeNode(int x) {val x;} }public class PathSumProblems {// 路径总和 I:判…

Scala和Spark的介绍

Scala 1. Slaca的发展过程 由洛桑联邦理工学院的马丁 奥德斯在 2001 年基于 Funnel 的工作开始设计,设计初衷是想集成面向对象编程和函数式编程的各种特性。 Scala 是一种纯粹的面向对象的语言,每个值都是对象。 Scala 也是一种函数式语言&#xff0…

配置Hadoop集群环境-使用脚本命令实现集群文件同步

在 Hadoop 集群环境中,确保各节点配置文件一致至关重要。以下是使用 rsync 结合 SSH 实现集群文件同步的脚本方案,支持批量同步文件到所有节点: 1. 前提条件 所有节点已配置 SSH 免密登录主节点(NameNode)能通过主机…

Redis能保证数据不丢失吗之RDB

有了AOF为什么还需要RDB? 上一篇我们介绍了Redis AOF持久化策略。Redis能保证数据不丢失吗之AOF AOF虽然能实现持久化,但由于AOF恢复数据的时候是一条一条命令重新执行的,但数据量大的时候,Redis数据恢复的时间就会很久,这会导致Redis在重启的时候,有一大段时间的不可用…

AI浪潮下的艺术突围战:对话《名人百科数据库》执行主编刘鑫炜

当AI生成的画作在国际赛事中摘冠,当算法推荐主导艺术传播路径,技术革命正以前所未有的速度重塑艺术生态。我们独家专访深耕艺术推广领域的刘鑫炜主编,探讨当代艺术家在智能时代的生存法则。 图为《名人百科数据库》执行主编刘鑫炜 技术重构创…

Python 实现失败重试功能的几种方法

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 方法 1:手动 `while` 循环 + 异常捕获方法 2:使用 `tenacity` 库(推荐)方法 3:使用 `retrying` 库(旧版,已停止维护)方法 4:`requests` 自带重试(适用于 HTTP 请求)方法 5:自定义装饰器(灵活控制)方法…

2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 渗透测试红队面试七 一百八十一、Shiro漏洞类型,721原理,721利用要注意什么&am…

Unity动画系统使用整理 --- Playable

​​Playable API​​ 是一个强大的工具,用于更灵活地控制动画、音频、脚本等时间轴内容的播放和混合。它提供了比传统 Animator 更底层、更可控的方式管理时间轴行为,尤其适合复杂动画逻辑或动态内容组合的场景。 优点: 1.Playables API 支…

基于STM32、HAL库的BMP390L气压传感器 驱动程序设计

一、简介: BMP390L 是 Bosch Sensortec 生产的一款高精度气压传感器,专为需要精确测量气压和海拔高度的应用场景设计。BMP390L 具有更低的功耗、更高的精度和更快的响应速度。 二、硬件接口: BMP390L 引脚STM32L4XX 引脚说明VDD3.3V电源GNDGND地SCLPB6 (I2C1 SCL)I2C 时钟线…

Arduino快速入门

Arduino快速入门指南 一、硬件准备 选择开发板: 推荐使用 Arduino UNO(兼容性强,适合初学者),其他常见型号包括NANO(体积小)、Mega(接口更多)。准备基础元件&#xff1a…

破解 Qt QProcess 在 Release 模式下的“卡死”之谜

在使用 Qt 的 QProcess 以调用外部 ffmpeg/ffprobe 进行音视频处理时,常见的工作流程是: gatherParams:通过 ffprobe 同步获取媒体文件的参数(分辨率、采样率、声道数、码率等)。 reencode:逐个文件调用 f…

MySQL 中 UPDATE 结合 SELECT 和 UPDATE CASE WHEN 的示例

概述 以下是 MySQL 中 UPDATE 结合 SELECT 和 UPDATE CASE WHEN 的示例: 一、UPDATE 结合 SELECT(跨表更新) 场景:根据 orders 表中的订单总金额,更新 users 表中用户的 total_spent 字段。 -- 创建测试表 CREATE T…

【MCP】魔搭社区MCP服务(高德地图、everything文件搜索)

【MCP】魔搭社区MCP服务(高德地图、everything文件搜索) 1、上手使用2、环境配置(1)cherry-studio配置(2)添加魔搭大模型服务(如果已经设置了其他大模型服务,可跳过)&…

MapReduce 的工作原理

MapReduce 是一种分布式计算框架,用于处理和生成大规模数据集。它将任务分为两个主要阶段:Map 阶段和 Reduce 阶段。开发人员可以使用存储在 HDFS 中的数据,编写 Hadoop 的 MapReduce 任务,从而实现并行处理1。 MapReduce 的工作…

MCU开启浮点计算FPU

FPU 测试 1. FPU 简介2. 协处理器控制寄存器(CPACR)3. 开启FPU4. 验证FPU(Julia 分形实验) 1. FPU 简介 FPU 即浮点运算单元(Float Point Unit)。浮点运算,对于定点 CPU(没有 FPU 的…

进程相关面试题20道

一、基础概念与原理 1.进程的定义及其与程序的本质区别是什么? 答案:进程是操作系统分配资源的基本单位,是程序在数据集合上的一次动态执行过程。核心区别:​ 动态性:程序是静态文件,进程是动态执行实例…

React Hooks 精要:从入门到精通的进阶之路

Hooks 是 React 16.8 引入的革命性特性,它让函数组件拥有了类组件的能力。以下是 React Hooks 的详细使用指南。 一、基础 Hooks 1. useState - 状态管理 import { useState } from react;function Counter() {const [count, setCount] = useState(0); // 初始值为0return …

springboot3+vue3融合项目实战-大事件文章管理系统-更新用户头像

大致分为三步 首先在usercontroller里面加入方法 PatchMapping ("/updateAvatar")public Result upadateAvatar(RequestParam URL String avatarUrl){userService.updateAvater(avatarUrl);return Result.success();}url注解能验证传入的url是不是合法的&#xff0c…

Mosaic数据增强技术

Mosaic 数据增强技术是一种在计算机视觉领域广泛应用的数据增强方法。下面是Mosaic 数据增强技术原理的详细介绍 一、原理 Mosaic 数据增强是将多张图像(通常是 4 张)按照一定的规则拼接在一起,形成一张新的图像。在拼接过程中,会…