【Linux】Redis数据库、实例项目搭建redis服务器环境下mysql实现la/nmp架构缓存

一、Redis简介

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

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

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

893c76330fb14be18cd7369f79906ede.png


1.1Redis特点

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

BSD开源协议:是一个给于使用者很大自由的协议。. 可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。】

Redis与其他key - value缓存产品有以下三个特点:

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

1.2 为什么要用 redis/缓存?

主要从“高性能”和“高并发”这两点来看待这个问题。

高性能:

假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在 缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相 当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!

高并发:

直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存 中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。


1.3 redis 和 memcached的区别

对于 redis 和 memcached 我总结了下面四点。现在公司一般都是用 redis 来实现缓存,而且 redis 自身也越来越 强大了!

  1. redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供 list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。
  2. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memecache把数据全部存在内存之中。
  3. 集群模式:memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 redis 目 前是原生支持 cluster 模式的.
  4. Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路IO复用模型。

b0ccebf6e2ae478eafd68ea30d6d4ae3.png

二、图形界面客户端

有一个redis的图形界面客户端软件,名为redis-destop-manager。支持Windows、Mac OS X、Linux,请根据自 己的电脑系统选择下载,这里以windows为例,简单说下这软件的使用,安装很简单,一路下一步即可,安装后 打开该应用。


1、修改(redis服务器)redis文件夹下redis.conf文件,在bind 127.0.0.1行前面加#注释掉这一行,使能远程连接(默认只能使用 本地连接)。

e09af94d410f43efa865e8cb9a735f76.png

2、执行命令 ps -ef|grep redis 杀掉redis-server进程。

56137c32faa7472c978a0628ffed0270.png


 3、在redis目录下执行 src/redis-server redis.conf用redis.conf设置的参数重启redis-server服务。

3303249a46a94d8bbb5fd27d6e87ac84.png

4、命令行执行src/redis-cli 进入redis命令行,执行config set requirepass 123456 ,也可以设置为其他 

24f15a4b48ea44f7afacbb85d54e0105.png

5、在RedisDesktopManager客户端输入用户名、密码、服务器地址、端口连接服务器,点击测试连接。

b8aa7843d9b141179e2947afd4200105.png


6、登录成功

0024510a6a724336982afceb4fb6b536.png


【注意】在实例项目搭建-redis服务器环境下mysql实现la/nmp架构缓存时,不要连接redis图形化界面客户端,也不要设置密码。在搭建项目时忽略图形化界面。

三、Redis安装

1)源码安装(推荐)

① 安装源码编译支持库:

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

10335b8c4ed848a393e682ae74176072.png⑥ 编译测试:

make test

2)Redis启动停止与访问

 后端启动是我们开发中绝对会用到的方式,但在使用后端启动命令之后,需要做如下配置:


后端启动的配置

vim redis.conf

cd6526fdde6d43d38d86131d76750fa9.png


后端启动的命令

 src/redis-server redis.conf

0bf555e3fa3c4e7faee0eccbe135ed2b.png


后端启动的关闭命令

强制关闭:

kill -9 进程id

正常关闭:

src/redis-cli shutdown

【注意】:项目中,建议使用正常关闭。因为redis作为缓存来使用的话,将数据存储到内存中,如果使用正常关闭, 则会将内存数据持久化到本地之后,再关闭。如果强制关闭,则不会进行持久化操作,可能会造成部分数据丢失。

四、实例项目搭建-redis服务器环境下mysql实现la/nmp架构缓存

1)架构设计及准备工作

架构图:

92771db72d8b4aacb6b00cf09b286522.png

场景实例搭建:(基于Memcached实例基础搭建) 

IP地址环境
192.168.198.142redis
192.168.198.147web(PHP)
192.168.198.148mysql

关闭防火墙:
 

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

2)场景实例搭建步骤

1、PHP安装:(WEB服务器安装,不要搞错)

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

289483dc3e424951b04b0f2597257fad.png


2、安装php的redis扩展(web服务器安装,不要搞错)

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

 1ceb9babbcd347fd8bc9283989685007.png

cd redis-2.2.7/

phpize

795cc581b3c94c8293f86313d141e236.png

./configure

d969a01d1fe64267a9f908c8f5ed9e13.png

make install

28e00f36760843e8bab7fc017f1102cd.png


phpize对php进行添加扩展。并且phpize编译的扩展库可以随时启用或停用,比较灵活。 编译完成后可以看到安装的目录如下,进入后可以看到编译的模块redis.so

51f69718472349f08fba43e4cc308d14.png


3、vim修改/etc/php.ini,添加redis的扩展

vim /etc/php.ini

74570f663e8e432689b58739d299af8d.png


4、重启web服务器的httpd服务

systemctl restart httpd

5.最后查看phpinfo,显示如下,代表安装成功

(输入web服务器的ip)

81779ad33ff34a6992e6e65f81e4720f.png


6.安装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

44d0627682bf4174bfefb92d85a748ed.png


7.启动redis

编译安装好后如下所:

5d1cdb325d224c04a9c709515fe21e23.png

 修改redis.conf将daemonize no改为yes

vim redis.conf

746f0a1a85ea491db036a51d9719cc98.png

启动redis

src/redis-server redis.conf

启动如果没有报错,则配置正确9e4148406b4b4799b703e2c45fcb9efd.png

8.编写php的测试代码 

编写redis.php到你的httpd服务器的发布目录

974d9d6bd197403d966c6b0704645d5f.png

vim /var/www/html/redis.php
<?php
$redis = new Redis();
$redis->connect('192.168.198.142',6379) or die ("could net connect redis server");
//此处修改自己的redis服务器地址,确保已经启动
# $query = "select * from test limit 9";
$query = "select * from test1";
for ($key = 1; $key < 10; $key++)
{
        if (!$redis->get($key))
        {
                $connect = mysql_connect('192.168.198.148','memcache','Nebula@123');
                mysql_select_db(testab1);
                $result = mysql_query($query);
                //如果没有找到$key,就将该查询sql的结果缓存到redis
                $arr = [];
                while ($row = mysql_fetch_assoc($result))
                {
                        $redis->setex($row['id'],10,$row['name']);
                        $arr[] = $row;
                }
                $myserver = 'mysql';
                $data = $arr;
                break;
        }
        else
        {
                $myserver = "redis";
                $data[$key] = $redis->get($key);
        }
}
echo $myserver;
echo "<br>";
for ($key = 1; $key < 10; $key++)
{
        echo "number is <b><font color=#FF0000>$key</font></b>";
        echo "<br>";
        if ($myserver == "mysql") {
                $arr2 = array_map('end',$data);
                echo "name is <b><font color=#FF0000>$arr2[$key]</font></b>";
                echo "<br>";
        }
        else {
        echo "name is <b><font color=#FF0000>$data[$key]</font></b>";
        echo "<br>";
        }
}

循环的数据必须保证都有,否则会因为数组拿不到key报错


9、测试验证

第一次访问,redis中没有对应的KEY时

46c3fe033b9649e79b0ef744e298c639.png

再一次刷新就有了

 d22d0659c9d244c29b95a251d5495594.png

10、总结:

1、先再REDIS服务器上安装redis,然后后台启动

2、在web服务器上安装完配置完之后,在浏览器上访问web服务器上的index.php看是否正常

3、再访问web服务器上的redis.php

如果访问不正常就去/var/log/httpd/error.log下去查看保存

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LKsTaRt~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值