【Linux】缓存数据库Memcached、Memcached 安装、Memcached应用实例配置

news2025/1/4 17:28:35

一、 什么是缓存

缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。

从性能分析:

CPU缓存>内存>磁盘>数据库

从性能来看内存是介于CPU和磁盘,在实际中内存是CPU和磁盘的桥梁。buffer和cache是内存的不同的 体现,接下来简单分析对buffer和cache的理解。


1.1 buffer和cache

1.1.1 buffer:

A buffer is something that has yet to be “written” to disk.翻译过来就是:buffer就是写入到磁盘buffer是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。buffer将数据缓冲下 来,解决速度慢和快的交接问题;速度快的需要通过缓冲区将数据一点一点传给速度慢的区域。例如: 从内存中将数据往硬盘中写入,并不是直接写入,而是缓冲到一定大小之后刷入硬盘中。


1.1.2 cache:

A cache is something that has been “read” from the disk and stored for later use.翻译过来就是: cache就是从磁盘读取数据然后存起来方便以后使用。cache实现数据的重复使用,速度慢的设备需要通 过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。例 如:将硬盘中的数据读取出来放在内存的缓存区中,这样以后再次访问同一个资源,速度会快很多。


1.1.3 buffer和cache的特点

  • 共性 都属于内存,数据都是临时的,一旦关机数据都会丢失。
  • 差异:(先理解前两点,后两点有兴趣可以了解)
    • A.buffer是要写入数据;cache是已读取数据。
    • B.buffer数据丢失会影响数据完整性,源数据不受影响;cache数据丢失不会影响数据完整性,但会影响 性能。
    • C.一般来说cache越大,性能越好,超过一定程度,导致命中率太低之后才会越大性能越低。buffer来 说,空间越大性能影响不大,够用就行。cache过小,或者没有cache,不影响程序逻辑(高并发cache 过小或者丢失导致系统忙死除外)。buffer过小有时候会影响程序逻辑,如导致网络丢包。
    • D.cache可以做到应用透明,编写应用的可以不用管是否有cache,可以在应用做好之后再上cache。当 然开发者显式使用cache也行。buffer需要编写应用的人设计,是程序的一部分。

1.2 linux系统如何查看内存的缓存

1.2.1 cat /proc/meminfo

查看动态更新的虚拟文件。内容比较全面,可以查看到许多关于内存的信息。


1.2.2 free 快速查看内存的方法

也是经常使用的命令。-h 更人性化的显示内存的单位 -m 以M的形式显示


1.2.3 top

top命令提供了实时的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。 

退出top命令直接Ctrl+C

快捷键:shift+m 按内存利用率排序 shift+p 按cpu利用率排序


1.2.3 sar

Linux统计/监控工具sar详细介绍:要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用:

例如

  • 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q deng 等来查看
  • 怀疑内存存在瓶颈,可用 sar -B、 sar -r 和 sar -W 等来查看
  • 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看

二、memcached简介

Memcached 是 LiveJournal 旗下 Danga Interactive 公司的布拉德•菲茨帕特里克(BradFitzpatric)开 发的一款内存数据库,现在已被应用于 Facebook、LiveJournal 等公司用于提高 Web 服务质量目前这款软件流行于全球各地,经常被用来建立缓存项目,并以此分担来自传统数据库的并发负载压力。

Memcached 可以轻松应对大量同时出现的数据请求,而且它拥有独特的网络结构,在工作机制方面, 它还可以在内存中单独开辟新的空间,建立 HashTable,并对 HashTable 进行有效的管理。

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过 在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可 以用任何语言来编写,并通过memcached协议与守护进程通信。

官方网站地址:https://memcached.org/

官方介绍: memcached is a high-performance, distributed memory object caching system, generic in nature, but originally intended for use in speeding up dynamic web applications by alleviating database load.

memcached是一种高性能、分布式内存对象缓存系统,本质上是通用的,但最初旨在通过减轻数据库 负载来加速动态web应用程序。


2.1 memcache与memcached

我们有时会见到 Memcache 和 Memcached 两种不同的说法,为什么会有两种名称?

其实 Memcache 是这个项目的名称,而 Memcached 是它服务器端的主程序文件名。一个是项目名 称,另一个是主程序文件名。

memcached是一种缓存技术,将数据放入内存,从而通过内存访问提速,因为内存是最快的, memcached的主要目的是提速。

在memcached中维护了一张大的hashtable表,该表在内存中,表的结构是key和value;

memcached的key一般是字符串,不能重复 memcached的value可以放入(字符串,数值,数组,对象,布尔,二进制数据,图片和视频)


2.2主要解决如下问题

由于网站的高并发读写和对海量数据的处理需求,传统的关系型数据库开始出现瓶颈。

对数据库的高并发读写

关系型数据库本身就是个庞然大物,处理过程非常耗时(如解析 SQL 语句、事务处理等)。如果对关系 型数据库进行高并发读写(每秒上万次的访问),数据库系统是无法承受的。

对海量数据的处理

对于大型的 SNS(Social Network Service) 网站(如 Twitter、新浪微博),每天有上千万条的数据产 生。对关系型数据库而言,如果在一个有上亿条数据的数据表中查找某条记录,效率将非常低。 使用 Memcached 就能很好地解决以上问题


2.3 Memcached数据库特点

memcached作为高速运行的分布式缓存服务器,具有以下的特点。

  • 协议简单
    • 使用基于文本行的协议,能直接通过telnet在Memcached服务器上存取数据,实现比较简单
  • 基于libevent的事件处理
    • libevent是基于C开发的程序库,Memcached利用这个库进行异步事件处理
  • 内置内存存储方式
    • Memcached有一套自己的管理内存方式,而且非常高效,所有数据都保存在Memcached内置的内存 中,当存入的数据占满空间时,会使用LRU算法来清除不使用的缓存数据,从而来重用过期数据的内存 空间,但重启服务器数据将丢失
  • memcached不互相通信的分布式
    • 各个Memcached服务器之间互不通信,都是独立存取数据,通过客户端的设计让其具有分存式特点, 支持大量缓存和大规模应用

三、Memcached 安装

yum安装(推荐)

Linux系统安装memcached,首先要先安装依赖库。

yum install gcc gcc-c++ libevent-devel

然后使用如下命令安装(仅限Redhat/Fedora/Centos)

yum install memcached -y

四、Memcached 运行

(1)作为前台程序运行:

从终端输入以下命令,启动memcached:

 memcached -u root -p 11211 -m 64m -vv

这里显示了调试信息。这样就在前台启动了memcached,监听TCP端口11211,最大内存使用量为 64M。调试信息的内容大部分是关于存储的信息。

(2)作为后台服务程序运行:

不指定IP运行:

 memcached -p 11211 -m 64m -d -u root

指定IP和PID存放位置运行:

memcached -d -m 64M -u root -l 192.168.0.200 -p 11211 -c 256 -P /tmp/memcached.pid

五、Memcached 的特征

Memcached 作为高速运行的分布式缓存服务器,具有以下特点。

  • 协议简单
    • Memcached 的服务器客户端通信并不使用复杂的.xml等格式,而是使用简单的基于文本行的协议。
  • Memcached 连接
    • 因此,通过 telnet 也能在 Memcached 上保存数据、取得数据。以下为示例代码:

         

telnet localhost 11211
Connected to localhost.localdomain(127.0.0.1).
Escape character is '^]'.
set foo 0 0 3 (保存命令)
bar (数据)
STORED (结果)
get foo (取得命令)
VALUE foo 0 3 (数据)
bar (数据)

六、Memcached之应用实例配置

1、应用实例配置

1)基础环境配置,三台服务器最好都做

①关闭防火墙:

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

③环境规划:

IP地址环境
192.168.198.142memcache
192.168.198.147web
192.168.198.148mysql

2)web服务器配置

在web服务器192.168.198.147 上安装软件,启动服务

卸载系统默认的mysql版本

rpm -e mariadb-libs postfix

安装数据库软件,如果是克隆过来的因为已经安装过了则不需要安装;

过程略,如果没有安装参考之前的mysql博客进行安装;

安装lnmp环境

yum install httpd php php-gb php-mysql php-memcache

启动apache服务

systemctl restart httpd

sysstemctl enable httpd


3)mysql数据库服务器配置

在mysql服务端创建用户(192.168.198.148)


mysql8.0中默认的身份认证插件是caching_sha2_password,替代了之前的
mysql_navtive_password,并且设置用户的host范围为%,使所有主机都可以连接

create user 'memcache'@'%' identified by 'Nebula@123';

ALTER USER'memcache'@'%' IDENTIFIED WITH mysql_native_password BY 'Nebula@123';

flush privileges;

 检查mysql用户表中有刚才创建的用户信息

select user,host,plugin from mysql.user;


4) web服务器测试

(web服务器上)测试http功能,如下图则正常

 vim /var/www/html/index.html


测试PHP测试功能

vim /var/www/html/index.php  
<?php
phpinfo();
?>


5) 在web服务器上测试mysql服务器是否连接成功

 在web服务器(192.168.198.147)上编写下面的文件:

vim /var/www/html/mysql.php
<?php
$link=mysql_connect('192.168.198.148','memcache','Nebula@123');

if($link) echo "Success!!";
else echo "Fail!!";
mysql_close();
?>

 写完之后保存退出;

然后浏览器上连接你的web服务器IP;显示Success!!成功连接mysql服务器。


 6)memcache 服务配置及测试

安装启动略(未安装参考之前的安装方法) 测试略,只要保证服务正常启动并能正常访问就可


7)实例功能测试 


①测试web和memcache的连通性

如果你是使用后台开启的memcache服务,就不用杀死


②Web服务器(192.168.42.30)做代码测试

这里的IP地址为memcached端,和他的端口号 

<?php
$memcache = new Memcache;
$memcache->connect('192.168.198.142', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."
";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)
";
$get_result = $memcache->get('key');
echo "Data from the cache:
";
var_dump($get_result);
?>


③ 在web服务器下配置session(web端192.168.198.147): 

 vim /etc/php.ini
session.save_handler = memcache
session.save_path ="tcp://192.168.42.29:11211?
persistent=1&weight=1&timeout=1&retry_interval=15"


④ 测试memcached的可用性:

 vim /var/www/html/memcache1.php
<?php
session_start();
if (!isset($_SESSION['session_time']))
{
 $_SESSION['session_time'] = time();
}
echo "session_time:".$_SESSION['session_time']."
";
echo "now_time:".time()."
";
echo "session_id:".session_id()."
";
?>


 ⑤ 在mysql服务器(192.168.198.148)上创建测试数据库:

create database testab1;


use testab1;

create table test1(id int not null auto_increment,name varchar(20) default null,primary key(id))
engine=innodb auto_increment=1 default charset=utf8;

insert into test1(name) values ('tom1'),('tom2'),('tom3'),('tom4'),('tom5');


 对memcache用户赋予库testab1的查看权限

grant select on testab1.* to memcache@'%';

show grants for memcache@'%';


⑦ 在web服务器上创建下面的文件:

vim /var/www/html/memcache2.php

$key=md5($query);
if(!$memcache->get($key))
{
 $conn=mysql_connect("192.168.198.148","memcache","Nebula@123"); //数据库节点,地址,用户,密码
 mysql_select_db(testab1);
 $result=mysql_query($query);
 while ($row=mysql_fetch_assoc($result))
 {
 $arr[]=$row;
 }
 $f = 'mysql';
 $memcache->add($key,serialize($arr),0,30);
 $data = $arr ;
}
else{
 $f = 'memcache';
 $data_mem=$memcache->get($key);
 $data = unserialize($data_mem);
}
echo $f;
echo "";
echo "$key";
echo "";
//print_r($data);
foreach($data as $a)
{
echo "number is $a[id]";
echo "";
echo "name is $a[name]";
echo "";
}
?>

注意:memcached有个缓存时间默认是1分钟,过了一分钟后,memcached需要重新从数据库中取得数据 

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

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

相关文章

一、 JSP01 初识动态网页

一、 JSP01 初识动态网页 1.1 Web 应用程序开发 1.1.1 C/S 架构 客户端&#xff08;Client&#xff09;/服务器&#xff08;Server&#xff09;架构&#xff08;即 C/S 架构&#xff09;的系统主其分为客户端和用户端两层用户需要在本地安装客户端软件&#xff0c;通过网络与…

白话文讲计算机视觉-第十一讲-Harris算子

Moravec算子 说白了就是求两个像素点之间的差&#xff0c;然后平方一下给它变成正值。 其中&#xff0c;x&#xff0c;y表示像素点&#xff0c;u、v表示水平竖直方向的偏移量&#xff1b;w(x,y)为滤波函数&#xff0c;一般直接等于常数1。 I(xu,xv)、I(x,y )表示像素点(xu,xv)、…

基于zemax的折叠光路的激光扩束系统设计

激光扩束系统是激光干涉仪、激光测距仪、激光雷达等诸多仪器设备的重要组成部分&#xff0c;其光学系统多采用通过倒置的望远系统&#xff0c;来实现对激光的扩束&#xff0c;其主要作用是压缩激光束的空间发散角&#xff0c;使扩束后的激光束口径满足其他系统的要求。 激光器…

MySQL-图形化界面工具 (上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

【sorting+双指针+数学】CF845div2 C. Quiz Master

和我一开始想的不太一样 一开始想的也是排序&#xff0c;然后双指针&#xff0c;但是我想的双指针是l1,rn的&#xff0c;因为我没注意到极差尽可能小这个条件可以转化为区间长度最短 其实就是尺取法&#xff0c;然后合法性就是这个区间内的数的所有因子能填满1~m这些格子 找…

Vue2 Vue3 Scoped 样式穿透

概念 主要是用于修改很多 Vue 常用的组件库&#xff08;Element, Vant, AntDesigin&#xff09;&#xff0c;虽然配好了样式但是还是需要更改其他的样式&#xff0c; 因为添加了 scoped 实现 css 模块化 就需要用到 样式穿透 &#xff0c;更改组件的样式 scoped 的原理 Vue …

route详解

一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让我们一起学习route。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、什么是route Route就是用来显示、人工添加和修改路由表项目的。大多数主机一般都是驻留在只连接一台路由器的网段上。由于只有一台路…

1000个已成功入职的软件测试工程师简历经验总结:软件测试工程师简历项目经验怎么写?(含真实简历模板)

一、前言&#xff1a;浅谈面试 面试是我们进入一个公司的门槛&#xff0c;通过了面试才能进入公司&#xff0c;你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试&#xff0c;得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来看看吧。这里分享一…

【面试常见】链表带环

前言 一、什么是环形链表 二、判断链表是否带环 三、&#xff08;问题1&#xff09;slow和fast一定会相遇吗&#xff1f; 四、&#xff08;问题2&#xff09;fast一次走3/4/n步&#xff0c;还会相遇吗&#xff1f; 五、总结 前言 链表是面试中常见的一类题。分为单链表&#x…

Maven详细教程(图文并茂)

一、maven概述 1.1、项目开发中的问题 1、我的项目依赖一些jar包&#xff0c;我把他们放在哪里&#xff1f;直接拷贝到项目的lib文件夹中?如果我开发的第二个项目还是需要上面的那些jar包&#xff0c;再把它们复制到我当前项目lib中&#xff1f;那如果现在是第三次了&#xf…

ALSA子系统(十八)------指纹解锁动画提示声卡顿问题解析

你好&#xff01;这里是风筝的博客&#xff0c; 欢迎和我一起交流。 很久没写kernel相关的东西了&#xff0c;主要是来到手机厂之后&#xff0c;大部分还是在Android上&#xff0c;Kernel虽然也有涉及&#xff0c;但毕竟只是有所涉及&#xff0c;主要业务逻辑还是在HAL之上&am…

【c语言】详解 结构体的内存对齐补齐

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…

计算机网络的性能指标

1.计算机网络的性能指标 笔记来源&#xff1a;湖科大教书匠&#xff1a;计算机网络的性能指标 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 速率 注意&#xff1a;数据量中1KB 2 10 B 2^{10}B 210B、数据率中1kb/s 1 0 3 10^{3} 103b/s 1.2…

Chatgpt如何引入新的知识?我们来看下ACL2023 预训练模型能否对新注入的知识进行推理这篇文章

一、概述 title&#xff1a;Can LMs Learn New Entities from Descriptions? Challenges in Propagating Injected Knowledge 论文地址&#xff1a;https://arxiv.org/abs/2305.01651 相关代码&#xff1a; EKP数据和代码&#xff1a;GitHub - yasumasaonoe/entity_knowle…

香橙派4和树莓派4B构建K8S集群实践之四:BuildKit与LNMP

目录 1. 说明 2. 开始前的准备工作 2.1 docker 验证用户信息设置 2.2 安装BuildKit 3. 安装步骤 3.1 申请一个pvc存储区 (wwwroot-pvc.yaml) 3.2 Nginx 3.3 php-fpm 3.3.1 构建并推送镜像 4. 遇到的问题 5. 相关命令 6. 参考 1. 说明 k8s带来的灵活性&#xff0c;使…

Linux系统之安装PDF阅读器

Linux系统之安装PDF阅读器 一、PDF介绍1. PDF简介2. PDF特点3. evince介绍 二、本次实践环境介绍1. 本地环境规划2. 本次实践介绍 三、本地环境检查1. 检查操作系统版本2. 查看系统内核版本 四、安装前准备工作1. 配置yum仓库2. 检查本地yum仓库状态3. 查看evince安装包 五、安…

怎样做好一场线上研讨会?

怎样做好一场线上研讨会&#xff1f; 1-策划和准备。在开始前&#xff0c;需要仔细策划和准备。确定研讨会的主题、目标、议程和参与者&#xff0c;并为参与者提供足够的信息和资源&#xff0c;以确保他们能够充分准备并参与讨论。 2-选择合适的在线平台。选择一个适合您需求…

Ubuntu搭建VPN服务,PPTD和OpenVPN

本文提供了两种vpn方式&#xff0c;pptd移动端支持不够&#xff0c;OpenVPN跨平台能力更前&#xff0c;且安全性更好。 但pptd也不是一无是处&#xff0c;在使用midjuriney网站时&#xff0c;openvpn搭建的网络出现了无法将机器人加入服务器的情况&#xff0c;更换pptd后操作无…

基于Maven创建多模块的Spring Boot项目

使用 Spring Boot的初始化器等创建Spring Boot项目时,需要在pom.xml指定该项目的父项目是 spring-boot-starter-parent。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><versio…

OSPF综合实验(第二部分)

目录 配置OSPF动态路由协议 重发布 减少路由条目&#xff1a;​ 特殊区域&#xff1a; 收敛配置 认证 NAT地址转换 空接口 配置OSPF动态路由协议 AR1&#xff1a; [r1]ospf 1 router-id 1.1.1.1 [r1-ospf-1]area 1 [r1-ospf-1-area-0.0.0.1]network 172.16.32.0 0.0.0.…