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

一、Redis简介

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

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

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

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


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复用模型。

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

二、图形界面客户端

有一个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客户端输入用户名、密码、服务器地址、端口连接服务器,点击测试连接。

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


6、登录成功

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


【注意】在实例项目搭建-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

【Linux】Redis数据库、实例项目搭建redis服务器环境下mysql实现la/nmp架构缓存_第5张图片⑥ 编译测试:

make test

2)Redis启动停止与访问

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


后端启动的配置

vim redis.conf

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


后端启动的命令

 src/redis-server redis.conf

0bf555e3fa3c4e7faee0eccbe135ed2b.png


后端启动的关闭命令

强制关闭:

kill -9 进程id

正常关闭:

src/redis-cli shutdown

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

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

1)架构设计及准备工作

架构图:

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

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

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

关闭防火墙:
 

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

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


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

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

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

cd redis-2.2.7/

phpize

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

./configure

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

make install

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


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

51f69718472349f08fba43e4cc308d14.png


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

vim /etc/php.ini

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


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

systemctl restart httpd

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

(输入web服务器的ip)

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


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

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


7.启动redis

编译安装好后如下所:

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

 修改redis.conf将daemonize no改为yes

vim redis.conf

746f0a1a85ea491db036a51d9719cc98.png

启动redis

src/redis-server redis.conf

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

8.编写php的测试代码 

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

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

vim /var/www/html/redis.php
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 "
"; for ($key = 1; $key < 10; $key++) { echo "number is $key"; echo "
"; if ($myserver == "mysql") { $arr2 = array_map('end',$data); echo "name is $arr2[$key]"; echo "
"; } else { echo "name is $data[$key]"; echo "
"; } }

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


9、测试验证

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

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

再一次刷新就有了

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

10、总结:

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

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

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

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

你可能感兴趣的:(Linux,数据库,数据库,redis,linux)