redis

redis 和 mysql 的区别

  • 类型上

    从类型上来说,mysql是关系型数据库,redis是缓存数据库

  • 作用上

    1. mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢

    2. redis用于存储使用较为频繁的数据到缓存中,读取速度快

  • 需求上

    mysql和redis因为需求的不同,一般都是配合使用。

redis 的安装和使用

安装包:链接:redis5.0 提取码: sna8

源码解压,进入解压目录,make && make install , 之后进入utils/目录下
./install_server.sh 执行脚本. 会自动生成二进制启动脚本在/etc/init.d/redis_6379, 主配置文件在/etc/redis/6379.conf.
在这里插入图片描述
会自动生成配置文件。
修改主配置文件,默认在/etc/redis/6379.conf 修改, 修改监听接口为0.0.0.0
在这里插入图片描述

redis 常用的命令

redis-cli 进入交互界面

命令作用
set key value设置一个变量key的值是value
get key获取一个变量key的值
expire key 数字规定一个变量key值,到期的时间为多少秒
incr key对key变量进行迭加
key *获得当前所有的key值
info获得服务器详细信息

在这里插入图片描述

redis 的主从复制

再开启一台虚拟机server2,将redis 安装包发送给server2,重复server1开启redis的步骤,但server2作为server1的从机,需要在主配置文件中添加slaveof 172.25.3.1 6379 配置命令
在这里插入图片描述

再重新启动服务,测试:
在这里插入图片描述

redis 的高可用

开启第三台虚拟机server3,配置一主两从框架,其中server1作为master,server2和server3作为slave端。
搭建后的效果:
在这里插入图片描述

实现redis的高可用的步骤:
官网:http://redis.cn/topics/sentinel.html

  1. 在master 端中,将redis解压目录下的 sentinel.conf 文件拷贝到/etc/redis/目录下,并修改:
    在这里插入图片描述
    在这里插入图片描述
  1. 将该文件发送到两个节点的 /etc/redis 目录下. 之后在三台主机上执行
    redis-sentinel /etc/redis/sentinel.conf 来启动sentinel系统,最后执行的效果:
    在这里插入图片描述

测试:
在这里插入图片描述

主观下线和客观下线

主观下线:如果一个服务器没有在 master-down-after-milliseconds 选项所指定的时间内, 对向它发送 PING 命令的 Sentinel 返回一个有效回复(valid reply), 那么 Sentinel 就会将这个服务器标记为主观下线。
客观下线:如果一个主服务器被标记为主观下线, 并且有足够数量的 Sentinel (至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断, 那么这个主服务器被标记为客观下线。

redis 集群

Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念,例如有三个节点。

  • 节点 A 包含 0 到 5500号哈希槽.
  • 节点 B 包含5501 到 11000 号哈希槽.
  • 节点 C 包含11001 到 16384号哈希槽.

Redis 集群的主从复制模型

为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.

在我们例子中具有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用.

然而如果在集群创建的时候(或者过一段时间)我们为每个节点添加一个从节点A1,B1,C1,那么整个集群便有三个master节点和三个slave节点组成,这样在节点B失败后,集群便会选举B1为新的主节点继续服务,整个集群便不会因为槽找不到而不可用了,不过当B和B1 都失败后,集群是不可用的.

构建3个节点的redis集群

步骤:

  1. 首先, 让我们进入一个新目录, 并创建六个以端口号为名字的子目录,
    在这里插入图片描述在文件夹 7000 至 7005 中, 各创建一个 redis.conf 文件,文件的内容可以使用下面的配置文件, 但记得将配置中的端口号从 7000 改为与文件夹名字相同的号码。并且用命令redis-server redis.conf在每个文件夹中打开一个实例

redis.conf文件

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes 

效果:
在这里插入图片描述

  1. 执行redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005搭建集群
    在这里插入图片描述
    查看集群的状态
    在这里插入图片描述

测试:
在这里插入图片描述

注:redis 集群是无中心化的集群

redis 持久化(rdb和aof)

区别:

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.
  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.

redis 和 mysql结合使用

redis 作为mysql的缓存

实验环境搭建:
三台主机,server1做apache,server2做redis, server3做mysql,三台主机上分别安装了httpd, redis和mariadb-server. 并将三个服务打开。

用到的安装包: 链接: rhel7提取码: vpxk
数据: 链接: test.sql 提取码: qm2p
测试页:链接: test.php 提取码: pd19

实验步骤:

  1. 将test,php文件放入server1主机的apache 的默认发布目录下,并修改文件内容。
    在这里插入图片描述
    由于该测试页使用的是php语言,所以server1主机上需要安装php语言支持,并且涉及到mysql数据库和redis数据库,所以需要添加两个模块。模块包在rhel7中, 在rhel7目录下 安装 yum install php-pecl-redis-2.2.8-1.el7.x86_64.rpm php-pecl-igbinary-1.2.1-1.el7.x86_64.rpm php-mysql-5.4.16-46.el7.x86_64.rpm -y这三个包,最后的效果:
    在这里插入图片描述
  1. 将test.sql中的数据导入server3的mysql 数据库中
    mysql < test.sql 并且进入 mysql数据库,建立redis用户,密码为westos,
    grant all on test.* to 'redis'@'%' identified by 'westos';
    在这里插入图片描述

访问测试:

第一次访问是通过调用mysql数据库的数据访问的
在这里插入图片描述

之后再次访问,都是从redis缓存中直接访问的,这是由于test.php中写的策略导致的,加快了客户对数据的访问
在这里插入图片描述
这样虽然实现了客户端对数据的高效访问,但是一旦mysql数据库的信息被更改之后,redis没能收到更改后的信息,所以就需要gearman工具来解决这个问题。

gearman 分发任务的程序框架

gearmand端:在上个实验的基础上,再打开一个虚拟机server4,作为gearmand管理端,将rhel7目录发送给该虚拟机,安装gearmand 服务。yum install gearmand-1.1.12-18.el7.x86_64.rpm -y libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm 并启动服务systemctl status gearmand.service

mysql数据库端:

  1. 软件包: 链接: lib_mysqludf_json UDF 提取码: g3tp
    lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,
    unzip lib_mysqludf_json-master.zip 解压该压缩包
    cd lib_mysqludf_json-master/ 进入解压目录
    gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so 进行编译,需要用到gcc编译器。yum install gcc mysql-devel
    ·cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/ 拷贝到mysql的插件目录中。
    进入到mysql数据库,用命令CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so'; 注册udf 函数。
    select * from mysql.func; 查看函数
    在这里插入图片描述
  1. 软件包: 链接: gearman-mysql-udf-0.6 提取码: d747
    安装gearman-mysql-udf-0.6插件,该插件是用来管理调用 Gearman 的分布式的队列。进入到该目录下,进行源码编译:
    ./configure --with-mysql --libdir=/usr/lib64/mysql/plugin/
    要解决依赖性的问题,解决依赖性的软件包在rhel7目录里有
    yum install libgearman-devel-1.1.12-18.el7.x86_64.rpm libgearman-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm
    环境检测成功后,make && make install
    进入到mysql数据库,注册udf函数
    CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
    CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
    查看函数:
    在这里插入图片描述
  1. 添加mysql触发器, 在test.sql文件中有一个触发器,打开并导入即可
    在这里插入图片描述
    mysql < test.sql 导入到数据库
    SHOW TRIGGERS FROM test; 查看触发器
    在这里插入图片描述
  1. 链接: work.php 提取码: 93jc
    编辑gearmand的work端,由于是由php语言写的work.php ,所以需要下载php解释器,并且下载php的拓展模块,在rhel7目录中有拓展模块的安装包执行yum命令安装
    yum install -y php-pecl-gearman-1.1.2-1.el7.x86_64.rpm
    yum install -y php-pecl-redis-2.2.8-1.el7.x86_64.rpm php-pecl-igbinary-1.2.1-1.el7.x86_64.rpm
    修改work.php文件
    在这里插入图片描述

测试:
nohup php worker.php & 后台运行work.php
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值