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

news2024/11/17 7:27:20

一、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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/504565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文复现】基于区块链的分布式光伏就地消纳交易模式研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

盖雅案例入选「首届人力资源服务国际贸易交流合作大会20项创新经验」

近日&#xff0c;首届人力资源服务国际贸易交流合作大会顺利召开。为激励企业在人力资源服务贸易领域不断创新&#xff0c;加快培育对外贸易新业态、新模式&#xff0c;形成人力资源服务领域国际竞争新优势&#xff0c;大会评选出了「首届人力资源服务国际贸易交流合作大会20项…

第2天学习——Docker安装

一、前言 Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分开&#xff0c;以便您可以快速交付软件。使用 Docker&#xff0c;您可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法&#xff0…

sqli-labs通关(十四)(十五)(十六)

第十四关 输入1",出现如下报错信息&#xff0c;告诉我们要双引号闭合 所以我们输入 1" or 11# 没有任何返回信息&#xff0c;这一关和十三关一样&#xff0c;利用报错信息爆出数据 1" and extractvalue(1,concat(0x7e,(select database())))# 第十五关 输入1是这…

【软件测试】第二章 黑盒测试

系列文章目录 文章目录 系列文章目录前言第二章 黑盒测试2.1 等价类划分2.2 边界值分析2.3 因果图法2.4 判定表驱动2.5 正交试验法2.6 其他黑盒测试方法2.7 功能性测试总结 总结 前言 第二章 黑盒测试 黑盒测试&#xff1a;功能测试或数据驱动测试测试对象&#xff1a;需求规格…

发布会实录|悠易科技CTO李旸:洞察新引擎 品牌新增长

4月26日&#xff0c;悠易科技LinkFlow对其核心的 “洞察”产品能力进行了升级。作为开场嘉宾&#xff0c;悠易科技CTO李旸做了题为《洞察新引擎 品牌新增长》的精彩分享&#xff0c;为我们阐释了本次发布升级的背景和出发点&#xff0c;帮助我们更好地理解LinkFlow CDP如何借助…

【postgresql】一些函数记录

1、coalesce函数&#xff1a;合并&#xff0c;coalesce(值1&#xff0c;值2&#xff0c;值3……)&#xff0c;返回第一个不为null的值&#xff1b; 2、coalesce和ifnull的区别&#xff0c;ifnull只有两个参数&#xff0c;返回第一个不为null的参数 3、if和casewhen的区别&…

信息安全评估

安全评估基础 概念、作用、安全评估标准 安全评估基本概念 什么是安全评估 针对潜在影响资产正常执行其职能的行为产生干扰或者破坏的因素进行识别、评价的过程 对安全评估的理解 狭义指对一个具有特定功能的工作系统中固有的或潜在的危险及其严重程度所进行的分析与评估&a…

通用路由封装协议GRE

通用路由封装协议原理 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。 GRE提供了将一种协议的报文封装在另一种协议报文中…

国产AI大模型酣战,科大讯飞打响“智慧涌现”第一枪

配图来自Canva可画 ChatGPT问世半年之久&#xff0c;人与AI“你问我答”的游戏热度不降反升&#xff0c;AI大模型技术需求也随之水涨船高&#xff0c;成为科技企业重点关注的方向。 在海外&#xff0c;OpenAI、谷歌、微软的AI大模型战争正打得火热&#xff1b;在国内&#xf…

PowerShell系列(二):PowerShell和Python之间的差异介绍

目录 1、Python定义 2、Python用途 4、PowerShell用途 5、PowerShell和Python对比 5.1 共同点 5.2 不同点 6、总结 今天给大家聊聊PowerShell和Python之间有哪些共同之处&#xff0c;各自有哪些优势&#xff0c;希望对运维的朋友了解两种语言能提供一些有用的信息。 1、Python定…

Unit 为啥还能当函数参数?面向实用的 Kotlin Unit 详解

视频先行 下面是视频内容的脚本文案原稿分享。 文案原稿 很多从 Java 转到 Kotlin 的人都会有一个疑惑&#xff1a;为什么 Kotlin 没有沿用 Java 的 void 关键字&#xff0c;而要引入这个叫 Unit 的新东西&#xff1f; // Java public void sayHello() {System.out.println(&qu…

Unity大面积草地渲染——2、草地的动态交互

大家好&#xff0c;我是阿赵。 这里继续讲大面积草地渲染的第二个部分&#xff0c;草地动态交互。这里主要有风吹效果和球体碰撞效果2种。 一、风吹效果 Unity使用shader控制草的渲染和动画 风吹动草的效果&#xff0c;主要还是使用顶点程序来控制顶点的偏移 回顾一下之前的基…

全方位揭秘!大数据从0到1的完美落地之Shuffle和调优

MapReduce高级 shuffle阶段 概述 MapReduce会确保每个reducer的输入都是按键排序的。从map方法输出数据开始、到作为输入数据传给reduce方法的过程称为shuffle。在此&#xff0c;我们将学习shuffle是如何工作的&#xff0c;因为它有助于我们理解工作机制&#xff08;如果需要…

MYSQL数据库进阶多表查询,MYSQL数据库主键和外键

目录 友情提醒第一章&#xff1a;MYSQL数据库多表主键和外键1&#xff09;外键介绍&#xff08;FOREIGN KEY&#xff09;2&#xff09;外键约束作用2&#xff09;三种情况下添加外键约束①一对一关系②一对多关系多对多关系 4&#xff09;删除外键约束 第二章&#xff1a;MYSQL…

配置您的 Web 服务器以包含 X-Frame-Options 标头

介绍 X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, </iframe> 或者 <object> 中展现的标记。网站可以使用此功能&#xff0c;来确保自己网站的内容没有被嵌套到别人的网站中去&#xff0c;也从而避免了点击劫持 (clickjackin…

mysql数据库之备份和恢复

1.数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中&#xff0c;数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因&#xff1a; 程序错误人为,操作错误,运算错误,磁盘故障灾难&#xff08;如火灾、地震&#xff09;和盗窃. 2.数据…

Python爬虫入门之爬虫解析提取数据的四种方法

本文主要介绍了Python爬虫入门之爬虫解析提取数据的四种方法&#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家Python爬虫的学习有所帮助。 基础爬虫的固定模式 笔者这里所谈的基础爬虫&#xff0c;指的是不需要处理像异步加载、验证码、代理等高阶爬虫技术的爬虫…

Vscode开发第一个Vue+Element Plus示例

Vscode开发第一个VueElement Plus示例 目前&#xff0c;前端开发工具非常多&#xff0c;如Webstorm、Atom、HBuilder、Visual Studio Code、Sublime Text、Notepad等。对于有经验的开发者来说&#xff0c;使用哪一款工具都可以。笔者习惯使用Visual Studio Code。 Visual St…

什么是镜像?阿里云服务器镜像是什么?镜像怎么选?

阿里云服务器镜像就是云服务器的装机盘&#xff0c;镜像是为云服务器安装操作系统的。阿里云镜像分为类型分为公共镜像、自定义镜像、共享镜像、云市场镜像和社区镜像&#xff0c;如下图&#xff1a; 目录 什么是镜像&#xff1f; 镜像种类说明 公共镜像 自定义镜像 共享…