缓存数据库memcached

news2024/12/28 20:12:41

目录

一.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.图示

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.134memcache
192.168.75.140web
192.168.75.141mysql

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; 

 4.3.3.Web服务器上的测试

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

vim /var/www/html/index.php

[root@tuxing html]# cat index.php
<?php
phpinfo();
?>

 可以发现php连接是正确的

②测试MySQL连接是否正常

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

cd /var/www/html/

[root@tuxing html]# cat mysql.php
<?php
$link=mysql_connect('192.168.75.141','memcache','Nebula@123');
if($link)
echo "success!!";
else
echo "fail!!";
mysql_close();
?>

测试发现,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
<?php
$memcache = new Memcache;
$memcache->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
<?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()."
";
?>

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

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

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

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

查看结果如下:

 

[root@tuxing html]# cat /var/www/html/memcache2.php
<?php
$memcachehost='192.168.75.134';
$memcacheport=11211;
$memcachelife=60;
$memcache=new Memcache;
$memcache->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 "<br/>";
echo "$key";
echo "<br/>";
//print_r($data);
foreach($data as $a)
{
echo "number is $a[id]";
echo "<br/>";
echo "name is $a[name]";
echo "<br/>";
}
?>

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

 

 

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

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

相关文章

SpringBoot程序的打包和运行

程序打包 SpringBoot程序是基于Maven创建的&#xff0c;在Maven中提供有打包的指令&#xff0c;叫做package。本操作可以在Idea环境下执行。 mvn package​ 打包后会产生一个与工程名类似的jar文件&#xff0c;其名称是由模块名版本号.jar组成的。 程序运行 ​ 程序包打好以…

TeeGrid for .NET 2023

TeeGrid for .NET 2023 TeeGrid for.NET为Visual Studio项目提供了一个非常快速的数据网格。打包功能的.NET数据网格提供了诸如排序、分组或过滤网格数据、可调整列大小、主详细视图、可拖动选择、网格滚动等功能。只需使用几个属性设置即可启用这些内置功能。TeeGrid可以链接到…

【一文看懂 Redis 核心】 基础数据结构 架构设计 存储 集群

基础数据结构 & 架构设计 & 存储 & 集群 redis 简单来说其实就是一个基于内存的 key - value 数据库&#xff0c;它本身结构的前提就是 key - value 类似于 Java 中的 HashMap &#xff0c;所以我们在聊 redis 的时候始终要记得这个前提&#xff0c;同时 redis 在…

【SpringCloud】Feign 和 OpenFeign 两者的异同点

Feign 和 OpenFeign 两者共同点Feign和OpenFeign作用一样&#xff0c;都是进行远程调用的组件。里面都内置了 Ribbon。都是加在消费端的注解&#xff0c;让消费端可以调用其他生产者的服务。Feign 和 OpenFeign 两者区别&#xff08;1&#xff09;依赖不同Feign 的依赖<!-- …

十九、Gtk4-Ui file for menu and action entries

Ui file for menu 你可能认为构建菜单真的很麻烦。是的&#xff0c;程序很复杂&#xff0c;需要很多时间来编码。这种情况类似于构建小构建。当我们构建部件时&#xff0c;使用ui文件是避免这种复杂性的好方法。菜单也是如此。 菜单的ui文件有界面和菜单标签。文件以interfac…

JavaScript 基本认识

JavaScript 简介 JavaScript 是什么&#xff1f; JavaScript 是互联网最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 Web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 JavaScript 是脚本语言&#xff1f; HTML 是超文本标记语言&am…

Groovy实现热部署

Groovy实现热部署一、概述二、准备工作2.1 规则接口IRule三、非Spring环境Groovy文件方式3.1 Groovy文件3.2 读取并生成实例3.3 使用这个实现四、数据库Groovy脚本方式4.1 Groovy脚本4.2 读取并生成实例五、Spring中使用Groovy的方式5.1 Groovy文件5.2 读取并生成实例5.3 使用这…

css sprite雪碧图制作,使用以及相关,图文gif

写在前面&#xff1a; 在网页制作中&#xff0c;雪碧图也是前端攻城狮必须掌握的一项小技能。百度词条对雪碧图的解释是&#xff1a;CSS雪碧 即CSS Sprite&#xff0c;也有人叫它CSS精灵&#xff0c;是一种CSS图像合并技术&#xff0c;该方法是将小图标和背景图像合并到一张图…

计算机组成原理 | 第一章:概论 | 冯诺依曼计算机 | 计算机硬件

文章目录&#x1f4da;冯诺依曼计算机的特点&#x1f4da;计算机硬件组成框图&#x1f4da;计算机硬件的主要技术指标&#x1f407;非时间指标&#x1f407;时间指标&#x1f511;计算技巧归纳&#x1f4da;小结&#x1f511;本章掌握要点&#x1f407;补充思考题&#x1f4da;…

[电商实时数仓] 用户行为数据和业务数据采集以及ODS层

文章目录1.数据仓库环境准备1.1 导入依赖1.2 创建相关包2.数据仓库运行环境2.1 Hbase环境2.2 模拟数据3.数仓开发之ODS层3.1 mysql配置修改3.2 FlinkCDC的程序3.3 结果检测1.数据仓库环境准备 1.1 导入依赖 <properties><java.version>1.8</java.version>&l…

为什么你的Facebook广告策略应该包括SEO

最近在看了很多关于 SEO的文章&#xff0c;今天想跟大家分享一些我个人关于 Facebook广告中的 SEO策略&#xff0c;以及它为什么是必要的。虽然在我看来&#xff0c;所有营销手段都需要结合 SEO才能发挥最大作用&#xff0c;但这并不意味着要完全放弃 SEO。如果你对以下问题感兴…

分享147个ASP源码,总有一款适合您

ASP源码 分享147个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 147个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1us1KTsxeaZlosHsqvrkC5Q?pwd81pl 提取码&#x…

Leetcode:51. N 皇后(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 回溯&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&a…

数字电位器程控可调电阻ic

一、前言 数字电位器又叫可编程电阻器&#xff0c;是一种替代传统机械电位器的新型CMOS数字、模拟混合信号处理集成电路&#xff0c;不需要搭建复杂的电路环境即可简单的通过CPU数字通讯实现电路调节&#xff0c;数字电位器也不能完全替代传统的机械电位器&#xff0c;在很多场…

Sentinel(限流、熔断、降级)、SpringBoot整合Sentinel、Sentinel的使用-60

一&#xff1a;Sentinel简介 Sentinel就是分布式系统的流量防卫兵 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 1.1 官方文档 官方文档&#…

基于OpenXR,Collabora推开源VI-SLAM AR/VR定位系统

XR最关键的难题之一就是定位&#xff0c;为了定位XR头显在现实世界中的位置和角度&#xff0c;厂商们采用了多种方案&#xff0c;比如机械传感器、惯性传感器、磁传感器、声学传感器等等。这些定位方式有一个共同的问题&#xff0c;那就是传感器不够完善&#xff0c;且会产生噪…

uniapp的父传子,子传父,子组件与父组件数据同步(.sync)的理解

父传子&#xff1a; 父调用 绑定的子组件中state然后 mystate1赋值false 给子组件中的state。并在子组件中显示父中传来的值。 注意要在子组件中设置 props【属性】不然父中的值无法传过去。 <view >开启{{mystate1}}</view> --调用子组件mypop&#xff0c;并传值…

学习记录673@项目管理之进度管理案例

本文主要是进度管理之关键链路法的案例。 案例 Perfect 项目的建设方要求必须按合同规定的期限交付系统&#xff0c;承建方项目经理李某决定严格执行项目进度管理&#xff0c;以保证项目按期完成。他决定使用关键路径法来编制项目进度网络图。在对工作分解结构进行认真分析后&…

05 二叉树前序/中序/后序线索化和找前驱、后继

1. 线索化代码 线索化需要先序/中序/后续遍历的过程&#xff0c;多了访问到节点时指针指向的问题 二叉树形状和运行结果 主函数 #include "func.h"// 二叉树线索化(便于找前驱和后继节点) // 1. 二叉树先序线索化 // 2. 二叉树中序线索化 // 3. 二叉树后序线索化//…

《MySQL》MySQL简单操作

最近开始了新的学习进度 进入MySQL数据库的学习 目录 一、MySQL启动方法 1.使用MySQL启动 2.使用cmd启动 二、数据库的简单操作命令 显示当前服务器上有哪些数据库 创建新的数据库 删除数据库 选中数据库 三、数据表的操作 数据类型 四、表的简单操作 查看数据库中的…