缓存数据库memcached

目录

一.memcached简介

memcached简介

memcached的特点

二.memcached安装

2.1.yum安装

2.2.源码安装 

 三.memcached命令

 3.1.memcached的特征

3.2.memcached的set命令

3.3.memcached的get命令

四.memcached应用实例配置

 4.1.图示

4.2.基础配置 

4.3.环境规划

4.3.1.web服务器的配置

4.3.2.mysql 服务器配置 

 4.3.3.Web服务器上的测试

4.4.实际测试

4.4.1.测试web和memcache的联通性。

4.4.2.在数据库节点上的操作(192.168.75.141)


1.什么是缓存?

        缓存是可以进行高速的数据交换的存储器。众所周知,离CPU越近的存储器,效率越高。因此,数据交换效率为: 寄存器>缓存>主存(普通内存)>磁盘。


2.buffer和cache的区别

2.1.buffer

        buffer即写入到磁盘。目的是提高内存和硬盘之间数据交换的速度。buffer将数据缓冲下 来,解决速度慢和快的交接问题;速度快的需要通过缓冲区将数据一点一点传给速度慢的区域

2.2.cache

        cache就是从磁盘读取数据然后存起来方便以后使用。cache实现数据的重复使用,速度慢的设备需要通 过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。

2.3.buffer和cache的特点

        共同点:都属于内存,数据都是临时的,一旦关机数据都会丢失。

        差异:① buffer是写入数据,cache是读取数据。

                   ② buffer数据丢失不影响源数据,会赢下你个数据完整性。cache不影响数据完整性,影响性能。

                   ③一般来说cache越大,性能越好,超过一定程度,导致命中率太低之后才会越大性能越低。buffer来 说,空间越大性能影响不大,够用就行。cache过小,或者没有cache,不影响程序逻辑(高并发cache 过小或者丢失导致系统忙死除外)。buffer过小有时候会影响程序逻辑,如导致网络丢包。

                   ④cache可以做到应用透明,编写应用的可以不用管是否有cache,可以在应用做好之后再上cache。当 然开发者显式使用cache也行。buffer需要编写应用的人设计,是程序的一部分。


一.memcached简介

memcached简介

        Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。 Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可 以用任何语言来编写,并通过memcached协议与守护进程通信。

memcache和memcached的区别:

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

memcached的特点

        •协议简单

        使用基于文本行的协议,能直接通过telnet在Memcached服务器上存取数据,实现比较简单

        •基于libevent的事件处理

        libevent是基于C开发的程序库,Memcached利用这个库进行异步事件处理

        •内置内存存储方式

        Memcached有一套自己的管理内存方式,而且非常高效,所有数据都保存在Memcached内置的内存 中,当存入的数据占满空间时,会使用LRU算法来清除不使用的缓存数据,从而来重用过期数据的内存 空间,但重启服务器数据将丢失

        •memcached不互相通信的分布式

        各个Memcached服务器之间互不通信,都是独立存取数据,通过客户端的设计让其具有分存式特点, 支持大量缓存和大规模应

二.memcached安装

2.1.yum安装

        yum安装需要先安装依赖库才能安装成功

        yum install gcc-c++ libevent-devel

        yum install memcached -y

2.2.源码安装 

        源码安装需要从官网下载memcached的压缩包,官网地址为:http://memcached.org/ 

tar -zxvf memcached-1.x.x.tar.gz

cd memcached-1.x.x

./configure

make && make test 

 三.memcached命令

 3.1.memcached的特征

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

        协议简单: Memcached 的服务器客户端通信并不使用复杂的.xml等格式,而是使用简单的基于文本行的协议。

         Memcached 连接:因此,通过 telnet 也能在 Memcached 上保存数据、取得数据。

$ telnet localhost 11211 Trying 127.0.0.1

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 (数据)

3.2.memcached的set命令

Memcached set 命令用于将 value(数据值) 存储在指定的 key(键)中。

如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

set 命令的基本语法格式如下:

set key flags exptime bytes [noreply]

value

参数说明如下:

•key:键值 key-value 结构中的 key,用于查找缓存值。

•flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息。

•exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)

•bytes:在缓存中存储的字节数

•noreply(可选): 该参数告知服务器不需要返回数据

•value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value) 

3.3.memcached的get命令

Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。 

get 命令的基本语法格式如下:

get key

多个 key 使用空格隔开,如下:

get key1 key2 key3

参数说明如下:

•key:键值 key-value 结构中的 key,用于查找缓存值。

四.memcached应用实例配置

 4.1.图示

缓存数据库memcached_第1张图片

4.2.基础配置 

检查是否关闭防火墙,并且同步时间

systemctl status 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 

4.3.环境规划

IP地址 环境
192.18.75.134 memcache
192.168.75.140 web
192.168.75.141 mysql

4.3.1.web服务器的配置

        卸载系统默认的mysql版本,安装新的MySQL版本。我的三台机子是克隆之前的虚拟机,所以不需要安装。

安装lnmp环境

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

启动apache服务

 systemctl restart httpd

sysstemctl enable httpd

4.3.2.mysql 服务器配置 

        在MySQL端创建用户。

        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;

可以通过命令检查刚才的用户创建是否正确。

select user,host,plugin from mysql.user; 

缓存数据库memcached_第2张图片

 4.3.3.Web服务器上的测试

①测试web服务器上的http功能是否正常

vim /var/www/html/index.php

[root@tuxing html]# cat index.php

缓存数据库memcached_第3张图片

缓存数据库memcached_第4张图片 可以发现php连接是正确的

②测试MySQL连接是否正常

        链接mysql使用MySQL服务端的IP地址,之前创建好的memcache用户名和对相应的密码,若连接正常,返回success,失败则返回fail!        

cd /var/www/html/

[root@tuxing html]# cat mysql.php

测试发现,MySQL连接是正常的。

常见错误排查: 

1.检查是否关闭防火墙

2.查看是否没有启动相关服务

3.检查错误日志

4.4.实际测试

[root@slave bin]# /usr/local/memcached/bin/memcached -d -l 0.0.0.0 -p 11211 -u root -m 64 -c 1024 -P /var/run/memcached.pid
[root@slave bin]# ps -ef | grep memcache
memcach+   1193      1  0 08:55 ?        00:00:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
root       1564   1504  0 10:11 pts/1    00:00:00 grep --color=auto memcache

4.4.1.测试web和memcache的联通性。

在web服务器上(192.168.75.140)上做测试:

[root@tuxing html]# cat memcached.php
connect('192.168.75.134', 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);
?>

  出现上图的显示,则说明连接成功。

配置session,web端:

vim /etc/php.ini

将以下代码放在文件末尾,ip地址修改为自己的web端地址

session.save_handler = memcache
session.save_path ="tcp://192.168.75.134:11211?
persistent=1&weight=1&timeout=1&retry_interval=15"

测试memcached的可用性 

[root@tuxing html]# cat /var/www/html/memcache1.php

 出现上图的显示,则说明测试成功。

4.4.2.在数据库节点上的操作(192.168.75.141)

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');

缓存数据库memcached_第5张图片

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

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

查看结果如下:

缓存数据库memcached_第6张图片

 

[root@tuxing html]# cat /var/www/html/memcache2.php
connect($memcachehost,$memcacheport) or die("Could not connect");
$query = "select * from test1 limit 10";
$key=md5($query);
if(!$memcache->get($key))
{
$soon=mysql_connect("192.168.75.141","memcache","Nebula@123");
mysql_select_db(testab1);

mysql_query("SET NAMES 'UTF8'");
mysql_query("SET CHARACTER SET UTF8");
mysql_query("SET CHARACTER_SET_RESULTS=UTF8");

$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_第7张图片

之后刷新一下,可以看到变化。

缓存数据库memcached_第8张图片 

 

你可能感兴趣的:(缓存,memcached,数据库,运维,linux)