小言_互联网的博客

Redis数据库

334人阅读  评论(0)

目录

1.Redis简介

1.1Redis简介

1.2.Redis特点

1.3.为什么要用Redis

1.4.Redis与memcached的区别

2.Redis安装

2.1.yum安装

2.2.源码安装

 3.Redis启动和停止

3.1.Redis的启动和关闭

3.2.redis基础知识

4.Redis架构缓存实验

4.1.架构缓存准备

4.2.web服务器准备

5.Redis高可用概述

6.Redis主从复制

6.1.主从复制原理

6.2.主从复制实战

7.Redis哨兵模式

7.1.哨兵模式的定义

7.2.哨兵模式的作用

7.3.哨兵模式工作原理

7.4.哨兵模式搭建


1.Redis简介

1.1Redis简介

Redis 是当前互联网世界最为流行的 NoSQL(Not Only SQL)数据库。NoSQL 在互联网系统中的作用很大,因为它可以在很大程度上提高互联网系统的性能。

Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于 NoSQL 数据库而言,作为持久层,它存储的数据 是半结构化的,这就意味着计算机在读入内存中有更少的规则,读入速度更快。

对于那些结构化、多范式规则的数据库系统而言,它更具性能优势。作为缓存,它可以支持大数据存入内存中,只 要命中率高,它就能快速响应,因为在内存中的数据读/写比数据库读/写磁盘的速度快几十到上百倍

1.2.Redis特点

Redis:Remote Dictionary Server(远程字典服务器)。是完全开源免费的,用C语言编写的,遵守BSD协议,是一 个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的 NoSQL数据库之一,也被人们称为数据结构服务器。

Redis与其他key - value缓存产品有以下三个特点: 1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 2. Redis不仅仅支持简单的key - value类型的数据,同时还提供list、set、zset、hash等数据结构的存储。 3. Redis支持数据的备份,即master - slave模式的数据备份。

1.3.为什么要用Redis

高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在 缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相 当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可! 高并发: 直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存 中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

1.4.Redis与memcached的区别

2.Redis安装

2.1.yum安装

yum install epel-release --下载fedora的epel仓库 yum install redis -- 安装redis数据库

2.2.源码安装

首先需要安装tcl8.5版本以上,以解决 make test报错问题

TCL8.6安装

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz

tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/

cd /usr/local/tcl8.6.1/unix/

./configure

make

make install 

安装完成后,再安装redis 

安装源码编译支持库:yum install gcc gcc-c++
下载包:wget https://download.redis.io/releases/redis-6.2.3.tar.gz
解压包:tar xzf redis-6.2.3.tar.gz
进入redis目录:cd redis-6.2.3
编译安装:make
编译测试:make test
编译安装历史清除:make distclean

 3.Redis启动和停止

3.1.Redis的启动和关闭

不指定配置文件启动

src/redis-server

会产生启动警告:

 解决办法如下:

echo 1024 > /proc/sys/net/core/somaxconn

在/etc/sysctl.conf 下添加如下内容:

net.ipv4.ip_forward = 1
vm.overcommit_memory=1

指定配置文件启动

src/redis-server redis.conf

        前端启动后,终端页面会进入redis控制台,无法进行其他操作,可以在redis.conf文件中修改为后台启动。

将文件中的daemonize no 修改为yes即可

daemonize yes

前台启动的关闭操作 

强制关闭:Ctrl+c

                   kill -9 进程

正常关闭:src/redis-cli shutdown

•强制关闭只需在Redis控制台直接执行即可(redis可能会丢失部分数据)。

•正常关闭需要另开一个终端窗口才可执行(redis不会丢失数据,推荐使用)。

一旦前端启动的关闭命令执行,则redis控制台关闭,redis服务也会停掉。

3.2.redis基础知识

1、单进程:单进程模型来处理客户端的请求。对读写等事件的相应。是通过epoll函数的包装来做到的。Redis的 实际处理速度完全依靠主进程的执行效率。Epoll是linux内核为处理大批量文件描述符而作了改进的epoll,是 linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的下 同CPU利用率。

2、默认16个库,类似数组下标从零开始,初始默认使用零号库。

3、select 命令切换数据库。

4、dbsize 查看当前数据库keys的数量

5、flushdb 清空当前数据库

6、flushall 清空全部数据库内容

7、redis索引都是从0开始的

4.Redis架构缓存实验

4.1.架构缓存准备

IP地址 环境
192.168.75.142 MySQL
192.168.75.144 Web服务器
192.168.75.145 redis

关闭防火墙:

systemctl stop firewalld

systemctl disable firewalld

sed -i ‘s/enforcing/disabled/’/etc/selinux/config

setenforce 0

同步时间:

yum -y install ntp ntpdate

ntpdate cn.pool.ntp.org

hwclock --systohc

4.2.web服务器准备

1.PHP安装

yum install php php-fpm php-cli php-common php-gd php-mbstring php-mysql php-pdo php-devel phpxmlrpc php-xml php-bcmath php-dba php-enchant 

2.安装php的redis扩展

wget http://pecl.php.net/get/redis-2.2.7.tgz

tar -zxvf redis-2.2.7.tgz

cd redis-2.2.7/

phpize

./configure

make && make install

编译完成后,可以看到安装目录下的文件

 在文件/etc/php.ini 末尾添加内容

重启Web服务器的httpd服务

systemctl restart httpd 

 在httpd发布目录下编辑php页面

查看phpinfo是否显示成功:

 安装redis

wget -c -t 0 http://download.redis.io/releases/redis-2.8.19.tar.gz

tar xvf redis-2.8.19.tar.gz

#安装很简单、直接make就可以了

cd redis-2.8.19

make

 安装完毕后,如下图所示:

 修改文件 redis.conf 中的daemonize no 改为yes。让redis变为后台启动。

启动redis(redis服务器)

src/redis-server redis.conf

编写php测试代码(web服务器)

 vim redis.php


  
  1. <?php
  2. $redis= new Redis();
  3. $redis-> connect( '192.168.75.143', 6379) or die ( "could net connect redis server");
  4. //此处修改自己的redis服务器地址,确保已经启动
  5. # $query = "select * from test limit 9";
  6. $query = "select * from dog1";
  7. for ( $key = 0; $key < 10; $key++)
  8. {
  9. if (! $redis-> get( $key))
  10. {
  11. $connect = mysql_connect( '192.168.75.142', 'redis', 'Nebula@123');
  12. mysql_select_db(mytest);
  13. mysql_query( "SET CHARACTER SET UTF8");
  14. mysql_query( "SET CHARACTER_SET_RESULTS=UTF8");
  15. mysql_query( "SET NAMES ‘GBK'");
  16. mysql_query( "SET NAMES ‘UTF8′");
  17. $result = mysql_query( $query);
  18. $arr = [];
  19. while ( $row = mysql_fetch_assoc( $result))
  20. {
  21. $redis-> setex( $row[ 'id'], 1, $row[ 'name']);
  22. $arr[] = $row;
  23. }
  24. $myserver = 'mysql';
  25. $data = $arr;
  26. break;}
  27. else
  28. {
  29. $myserver = "redis";
  30. $data[ $key] = $redis-> get( $key);
  31. }
  32. }
  33. echo $myserver;
  34. echo "<br>";
  35. for ( $key = 0; $key < 10; $key++)
  36. {
  37. echo "number is <b><font color=#FF0000>$key</font></b>";
  38. echo "<br>";
  39. if ( $myserver == "mysql") {
  40. $arr2 = array_map( 'end', $data);
  41. echo "name is <b><font color=#FF0000>$arr2[$key]</font></b>";
  42. echo "<br>";
  43. }
  44. else{
  45. echo "name is <b><font color=#FF0000>$data[$key]</font></b>";
  46. echo "<br>";
  47. }
  48. }

第一次测验,redis中没有对应的keys:

当再次访问时,redis中已经存在数据 

5.Redis高可用概述

        在Web服务器中,高可用是指服务器可以正常访问的时间。 

        在Redis服务器中,除了需要保证正常服务,还需要考虑数据容量的扩展、数据安全不丢失等等。

        Redis技术中,实现高可用主要包括:持久化、复制、哨兵和集群

        1.持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储 在硬盘,保证数据不会因进程退出而丢失。

        2.复制:复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备 份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力 受到单机的限制。

        3.哨兵:在复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡;存储能力受到单机的限 制。

        4.集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高 可用方案。

6.Redis主从复制

6.1.主从复制原理

        Slave启动成功后,向Master发送一个sync命令。

        Master收到后启动存盘进程,并且获取所有的修改数据的命令,在后台执行完毕后,Master将整个数据传送给slave,这样就完成了一次完全同步。

        全量复制和增量复制:

全量复制:slave接收到数据后,将其存入到内存

增量复制:master将新获取到的数据再一次传递给slave,完成同步。

6.2.主从复制实战

基础配置:

        准备三台服务器,注意关闭防火墙、selinux、iptables、时间同步。这些在之前4.1有写到。

IP地址 环境
192.168.75.142 从服务器
192.168.75.143 从服务器
192.168.75.145 主服务器

 搭建步骤:

1.安装redis.

        分别给三台服务器安装Redis

2.配置主服务器。

1、进入主服务器,打开redis配置文件,修改protected yes为no,即关闭保护模式让其他主机也能连接

2、将bind 127.0.0.1这行注释或者指定ip。(本例是注释,即所有ip都能连接)

3、开启守护进程

daemonize yes

4.设置访问密码(下图)(由于redis性能非常高,撞库风险极大,建议线上把密码设置非常复杂,最好能在第2步中指定 ip)。

 3.从服务器的配置

        从服务器的配置1-4步与主服务器相同。

        5.配置所属服务器的IP和端口

        6.配置所属主服务器的密码

 测试

        1.启动主服务器和从服务器的redis

src/redis-server redis.conf

        2.进入主服务器(192.168.75.145)

                因为在文件中设置了密码,需要登录。

                用set命令设置一个值

        

         3.进入从服务器查看

                使用get获取name的值

        

 可以看到,从服务器获取到了name的值。代表测试成功。

但是如果想在从服务器上设置值,是会报错的。

7.Redis哨兵模式

7.1.哨兵模式的定义

        Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经 被集成在redis2.4之后的版本中。sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的 所有slave;当某个master服务下线时,自动将该master下的slave升级为master服务替代已下线的master服务继 续处理请求。 

7.2.哨兵模式的作用

监控:sentinel会不断检查主服务器和从服务器是否运行正常

提醒:当被监控的某个redis服务器出现故障时,sentinel可以通过API向管理员或其他应用程序发送通知。

自动故障转移:当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操 作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制 新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以 使用新主服务器代替失效服务器。

7.3.哨兵模式工作原理

 哨兵的作用:

•通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

•当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配 置文件,让它们切换主机。

当各个哨兵之间还会进行监控,这样就形成了多哨兵模式

故障切换原理:(重点)

        假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程, 仅仅是哨兵1主观的认为主服务 器不可用,这个现象称为 主观下线。 当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵 之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式, 让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为 客观下线

哨兵的工作方式:(重点)

        1)每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个PING命令
        2)如果一个实例(instance) 距离最后一次有效回复PING命令的时间超过own-after-milliseconds 选项所指定的值,则这个实例会被Sentinel标记为主观下线
        3)如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态
        4)当有足够数量的Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态,则Master会被标记为客观下线
        5)在一般情况下,每个Sentinel 会以每10秒一次的频率向它已知的所有Master,Slave发送INFO命令
        6)当Master被Sentinel标记为客观下线时,Sentinel 向下的 Master 的所有Slave发送INFO命令的频率会从10秒一次改为每秒一次。
        7)若没有足够数量的Sentinel同意Master已经下线,Master的客观下线状态就会被移除。若Master重新向Sentinel的PING命令返回有效回复,Master的主观下线状态就会被移除。

7.4.哨兵模式搭建

环境配置:

IP地址 环境
192.168.75.142 redis-master
192.168.75.143 redis-slave
192.168.75.145 redis-slave

搭建步骤:

1.修改哨兵的配置文件 sentinel.conf。可以使用scp命令将文件复制给其他服务器

scp sentinel.conf 192.168.75.143:/opt/redis-6.2.3/

scp sentinel.conf 192.168.75.145:/opt/redis-6.2.3/

如果使用的是配置过哨兵模式的服务器,需要断开与主节点的复制关系,可以使用下面的命令

slaveof no one

2.启动redis服务

src/redis-server redis.conf

3.启动sentinel服务

src/redis-server sentinel.conf --sentinel

 出现如图的报错,则说明是连接数设置太低,修改后重启就不会报错。

echo 1024 > /proc/sys/net/core/somaxconn

启动后,在日志文件中可以查到相关的信息,可以看到两个节点已经加入

 在192.168.75.143上查看master信息

注意,在查看前需要输入刚才在配置文件中配置的密码

 4.设置主机故障

与此同时,在slave机上,日志文件会有输出

 可以看到,最终145服务器变为了主机

在redis服务上也可以查看到

5.重新启动142的redis服务,查看日志文件变化

 可以看到,142重新启动后,变为了145的slave,并不会重新变为master


转载:https://blog.csdn.net/qq_60787657/article/details/128768460
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场