cenos7 安装redis 与 配置redis 主从复制, 哨兵机制 , aof与rdb存储, 事务 记录

本文主要是介绍cenos7 安装redis 与 配置redis 主从复制, 哨兵机制 , aof与rdb存储, 事务 记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

redis: 非关系型数据库,  数据存放内存中, 效率高, 可持久化, 于此类似的还有 mogodb等。

redis 五种基本数据类型: String(可以存储对象), list(集合), set,  zset(排序set,java sortedSet),  hash( java map)

redis  客户端: https://github.com/caoxinyu/RedisClient

  推荐下载exe的, 因为方便, jar包运行的有点烦。 下载后解压,然后打开连接就完事了

 

redis 官网: https://redis.io/

   安装第一种方式:

wget http://download.redis.io/releases/redis-5.0.5.tar.gz

  安装第二种方式: 下载后上传liunx

 

 

 

第一步: 解压: 

tar xzf redis-5.0.5.tar.gz

 

第二步: make

cd redis-5.0.5
make

如果: redis make时报:  /bin/sh: cc: 未找到命令 , 是由于没有安装gcc,

命令:yum -y install gcc automake autoconf libtool make 

     或者:     yum install gcc-c++

 

make完毕后: 

   在redis目录新建一个bin目录:    mkdir   bin             不建也没关系。

   新建bin目录后: 

  在 redis-5.0.5  目录下, 将  redis.conf复制到  新建的bin目录下 ,cp redis.conf   你的bin目录路径

  在  cd  src  进入 src目录下,  将 redis-server ,   redis-cli  复制到bin目录下 ,命令:  cp redis-server   你的bin目录路径

 

复制后:

 ./redis-server  redis.conf    启动redis服务, 加载配置文件启动 

./redis-cli   -a   你的密码  启动客户端。 

redis.conf  配置文件:

首先来设置  redis.conf:

    1:    506行  requirepass 这是密码设置

 2: 默认的端口不用改

3:136行   daemonize   后台启动   no改为yes

4: 如果这个bind 没有注释掉 则将其注释, 否则 使用 redis  client 客户端连接时会连接不上。

现在启动一下访问是否成功: 进入创建的bin目录, 或者  redis.5.0.5 / src 下都行: 这里进入bin目录:

 服务端启动:  ./redis-server redis.conf

客户端启动: ./redis-cli -a 123456         -a 后跟 密码,  密码为配置文件中设置的

ping 一下, 如果 出现 pong 则成功了。

 

防火墙关闭  或者开放端口,  本人用的是开放端口,  cenos7 默认是  firewall  防火墙。

1: 开放端口

firewall-cmd --zone=public --add-port=6379/tcp --permanent    

firewall-cmd --reload

2:关闭防火墙:

关闭: systemctl stop firewalld

禁用: systemctl disable firewalld

3: 加入开机启动:

 vim  /etc/rc.d/rc.local 

加入如下命令, 路径为你的redis目录

./software/redis/bin/redis-server /software/redis/bin/redis.conf

 

redis启动停止脚本:  放在bin目录下


#!/bin/bash
#chkconfig:- 20 80
#description: starts and stops the redis daemon
#config: /soft/redis/bin/redis.conf
#pidfile: /var/run/redis.pidsource /etc/init.d/functions
BIN="/soft/redis/bin"
REDIS_CONFIG="/soft/redis/bin/redis.conf"
PIDFILE="/var/run/redis.pid"#读取配置[ -r "$SYSCONFIG" ] && source $"SYSCONFIG"
RETVAL=0
prog="redis-server"
desc="redis server"start(){if  test $( pgrep -f $prog | wc -l) -gt 0  thenecho "$desc 已经运行..."exit 1fidaemon $BIN/$prog $REDIS_CONFIG &RETVAL=$?echo  $"已启动 $desc:" echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog return $RETVAL} stop()
{killproc $progRETVAL=$?echo  $"已停止 $desc"echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog $PIDFILEreturn $RETVAL}status()
{if  test $( pgrep -f $prog | wc -l) -gt 0  thenecho "$desc 已经运行...."elseecho "$desc 未启动....."fi}restart()
{stopstart}case "$1" instart)start;; stop)stop;;restart)restart;;status)status $progRETVAL=$?;;*)echo $"使用:$0{start|stop|restart|status}"RETVAL=1esac
exit $RETVAL

使用 redis client 连接服务器:

1:输入连接信息: ip:  密码为配置文件中设置的密码

2: 查看数据库0  右边会有在服务器上设置的name的键值。  初步搭建完毕。 

 

 

主从复制的配置: 两台虚拟机, 主机无需设置, 在从机的  redis.conf中配置

从机: vim   redis.conf

将注释打开:

masterip: 主机ip

masterport: 主机端口

masterauth : 主机密码, 如果配置了密码就填密码, 没填就不用写

 

测试主从复制:

 主机开启服务端: ./redis-server  redis.conf

 主机开启测试端: ./redis-cli  -a  密码

输入  info 

出现结果如下图所示:

role 角色: master 主机

slave : 备机ip

 

主机设置值:

备机读取:

备机只能读,  不能写。

 

 

配置 sentinel 哨兵:

将 sentinel.conf  cp 到 bin目录下

如下为 sentinel 的启动停止脚本


#!/bin/bash
#chkconfig:- 20 80
#description: starts and stops the redis daemon
#config: /soft/redis/bin/sentinel.conf 
#pidfile: /var/run/redis.pidsource /etc/init.d/functions
BIN="/soft/redis/bin"
REDIS_CONFIG="/soft/redis/bin/sentinel.conf"
PIDFILE="/var/run/sentinel.pid"#读取配置[ -r "$SYSCONFIG" ] && source $"SYSCONFIG"
RETVAL=0
prog="redis-server"
desc="redis-server"
sent="sentinel"
s="--sentinel"
p="28979"start(){if  test $( pgrep -f $sent | wc -l) -gt 0thenecho "$sent 已经运行..."exit 1fidaemon $BIN/$prog $REDIS_CONFIG $s &RETVAL=$?echo  $"已启动 $sent:" echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$sentreturn $RETVAL} stop()
{ps -ef|grep $sent| grep -v grep | awk '{print $2}'|xargs  kill -9  RETVAL=$? echo  $"已停止 $sent"echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$sent $PIDFILEreturn $RETVAL}status()
{if  test $( pgrep -f $sent | wc -l) -gt 0  thenecho "$sent 已经运行...."elseecho "$sent 未启动....."fi}restart()
{stopstart}case "$1" instart)start;; stop)stop;;restart)restart;;status)status $sentRETVAL=$?;;*)echo $"使用:$0{start|stop|restart|status}"RETVAL=1esac
exit $RETVAL

哨兵: 心跳监测主机是否挂了, 主机挂了根据投票 在从机中选一个老大出来,  都挂了就用  keepalive 脚本重启, 重启失败发邮件或短信通知运维

在主服务器上的 sentinel.conf中配置, 可以将 sentinel.conf 复制到   bin 目录下。  

vim  sentinel.cof

113行:mymaster  主机名称,  192.168.1.128  主机ip,  6379 主机端口,  1 选举次数, 两台服务器, 一票就能当老大。

121行: 500  心跳监测, 毫秒

26 行 开启后台启动  no 改为yes

 

测试哨兵机制:

 1:启动哨兵:在bin目录下,  开启后台启动后无需加 & 

  ./redis-server  sentinel.conf  --sentinel 

2: 开启主机

 主机服务端启动: ./redis-server  redis.conf

 主机客户端启动: ./redis-cli  -a  密码

输入 info

主机role  为 master

 

从机  启动

 1:从机 服务端启动:  ./redis-server  redis.conf

2:从机客户端启动  ./redis-cli  -a  密码

从机输入info

从机  role: 为slave 从机, master主机地址为: 192.168.1.128

 

将主机 的进程 kill 掉

查看从机 info

从机 role 角色变为 master

 

redis  RDB 存储  与  AOF 存储,  默认打开RDB存储

 1: RDB  根据时间 与 key 的个数 达到阀值保存数据持久化,  体积小, 不是实时型保存数据, 在服务器宕机后容易丢失数据,备份不完全。使用二进制文件存储

 

2: AOF  实时保存数据, 体积大, 备份完全, 耗时久, 性能没有 RDB 好。 快照存储,

两者可以一起使用。

 

AOF: 开启 aof存储

vim  redis.conf

698 行  no  改为 yes

702行为 文件名称

 

RDB 默认开启:

250行  rdb 默认是  yes

253行  rdb 文件名称

 

测试  aop 存储:

在客户端写入数据, 实时查看  appendonly.aof 文件, 会发现, set 后  appendonly.aof 文件就会追加添加的数据的命令。

 

 

redis 事务  :  multi  开启事务,  exec  提交事务

 

以上为本人亲自测试, 如有错误, 欢迎留言指正, 谢谢!

 

redis 缓存穿透:

  查询缓存中没有数据, 查询数据库也没有数据, 导致每次查询都去数据库查询, 而且还没有查询到数据, 也是缓存的命中率问题。

解决方法: 将数据库查询空值后,设一个默认值放入缓存,设定失效时间。 简单直接。

缓存雪崩:

缓存在某一段时间内, 都失效过期了, 而新缓存没有写入, 全部查询直接去数据库操作, 造成数据库, cpu,内存很大的压力,甚至导致数据库宕机, 形成一系列连锁反应, 导出系统崩溃。

解决方式:

 1:加锁队列排队,

2:或者增加缓存标记, 是否过期, 过期则另开线程去更新数据。

3:

 业界比较常用的做法,是使用mutex。简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法。

SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果。

 

缓存预热:

1: 启动时另开线程加载缓存

 2: 页面按钮点击加载缓存

3: 定时刷新缓存

 

缓存更新:

 1: 清除缓存重新加载

 2: 请求时判断是否过期, 过期了请求数据库后重新写入缓存

这篇关于cenos7 安装redis 与 配置redis 主从复制, 哨兵机制 , aof与rdb存储, 事务 记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811182

相关文章

一文详解如何查看本地MySQL的安装路径

《一文详解如何查看本地MySQL的安装路径》本地安装MySQL对于初学者或者开发人员来说是一项基础技能,但在安装过程中可能会遇到各种问题,:本文主要介绍如何查看本地MySQL安装路径的相关资料,需... 目录1. 如何查看本地mysql的安装路径1.1. 方法1:通过查询本地服务1.2. 方法2:通过MyS

电脑软件不能安装到C盘? 真相颠覆你的认知!

《电脑软件不能安装到C盘?真相颠覆你的认知!》很多人习惯把软件装到D盘、E盘,刻意绕开C盘,这种习惯从哪来?让我们用数据和案例,拆解背后的3大原因... 我身边不少朋友,在使用电脑安装软件的时候,总是习惯性的把软件安装到D盘或者E盘等位置,刻意避开C盘。如果你也有这样的习惯,或者不明白为什么要这么做,那么我

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它