当前位置: 首页 > news >正文

高性能内存对象缓存Memcached详细实验操作

目录

前提准备:

cache1,2:

客户端cache-api(一定得是LAMP环境)

memcache实现主主复制以及高可用(基于以上完成)

cache1,2:

memcache+keepalived(基于以上完成)

cache1,2:


前提准备:

1. 准备三台centos7,其中一台为cache1:192.168.180.110,一台为cache2:192.168.180.120和一台客户端(LAMP环境):192.168.180.150

2. 分别修改主机名称

hostnamectl set-hostname cache1 && bashhostnamectl set-hostname cache2 && bashhostnamectl set-hostname cache-api && bash

3. 关闭所有防火墙

systemctl stop firewalld
setenforce 0

主要步骤开始!!!


cache1,2:

1. 安装libevent

#解压
tar zxf libevent-2.1.8-stable.tar.gz -C /usr/src/
cd /usr/src/libevent-2.1.8-stable/#安装组件
yum install -y gcc gcc-c++#编译安装
./configure --prefix=/usr/local/libevent && make && make install

2. 安装memcached

cd
#解压
tar zxf memcached-1.5.1.tar.gz -C /usr/src/
cd /usr/src/memcached-1.5.1/#编译安装
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent && make && make install

3. 设置memcached服务脚本

vim /usr/local/memcached/memcached_service.sh#!/bin/bash
CMD="/usr/local/memcached/bin/memcached"
start() {$CMD -d -m 128 -u root
}
stop() {killall memcached;
}
ACTION=$1case $ACTION in'start')start;;'stop')stop;;'restart')stopsleep 2start;;*)echo 'Usage:{start|stop|restart}'esac#退出,设置权限,打开
chmod 755 /usr/local/memcached/memcached_service.sh
/usr/local/memcached/memcached_service.sh start
netstat -antp | grep memcache

客户端cache-api(一定得是LAMP环境)

1. 安装Libmemcached

#解压
tar zxf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18#安装组件
yum install -y gcc gcc-c++#编译安装
./configure --prefix=/usr/local/libmemcached --with-memcached=/usr/local/memcached && make && make install

2. 安装memcached扩展

tar zxf memcached-2.2.0.tgz
cd memcached-2.2.0
/usr/local/php5/bin/phpizecp -r /usr/local/php5/include/php/ext/ ././configure --enable-memcached --with-php-config=/usr/local/php5/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl && make && make test && make install

在这一步时,输入n

获得共享地址

Installing shared extensions:     /usr/local/php5/lib/php/extensions/no-debug-zts-20121212/

3. 配置php添加memcached组件

cd /usr/local/php5/vim php.ini#输入刚刚获得的共享地址
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20121212/"
extension=memcached.so

4. 访问并查看是否添加成功

vim /usr/local/httpd/htdocs/index.php
<?php
phpinfo();
?>#重启httpd
systemctl restart httpd

🚨有些时候可能访问不到这个页面,但是在本地访问却可以访问到

curl 127.0.0.1/index.php | grep memcached

🚨可以看到是有内容的,有内容就可以直接进行下一步

5. 测试memcached-api功能

vim /usr/local/httpd/htdocs/test02.php
<?php
$memcache = new Memcached();
$memcache->addServer('192.168.180.110', 11211);
$memcache->set('key', 'Memcache test successful!', 0, 60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>#重启httpd,可以多重启几次
systemctl restart httpd

🚨当访问这个的时候,可能也会访问不到,多重启几次httpd就可以了,上面的模块index.php也可以访问到了

6. 浏览器访问,看到这句话就说明已经被memcache记录了

192.168.180.150/test02.php

7. 在cache1上安装telnet,并远程登录

yum install -y telnettelnet 127.0.0.1 11211
输入:get key


memcache实现主主复制以及高可用(基于以上完成)

cache1,2:

1. 删除cache1,2上的memcache1.5.1版本

rm -rf /usr/src/memcached-1.5.1/
rm -rf memcached-1.5.1.tar.gz

2. 重新下载支持复制功能的memcache

yum install -y psmisc#关闭memcache
/usr/local/memcached/memcached_service.sh stop
netstat -nultp | grep memcached#解压
tar zxf memcached-1.2.8-repcached-2.2.tar.gz
cd memcached-1.2.8-repcached-2.2#编译
./configure --prefix=/usr/local/memcached_replication --enable-replication --with-libevent=/usr/local/libevent

3. 修改配置文件

vim memcached.c#将原先的删除,替换成新的
#ifndef IOV_MAX
# define IOV_MAX 1024
#endif#再进行安装
make && make install

4. 启动memcache服务

ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/cache1:/usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.180.120cache2:/usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.180.110netstat -nultp | grep memcache

5. 在cache1远程登录并插入数值

telnet 192.168.180.110 11211set username 0 0 8
20250215
get username

6. 在cache2上安装telnet并登录查看cache1插入的数值

yum install -y telnet
telnet 192.168.180.120 11211
get username


memcache+keepalived(基于以上完成)

cache1,2:

1. 均安装keepalived

yum install -y keepalived#cache1修改主配置文件,将原先内容删除
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id route
}
vrrp_instance VI_1 {state MASTER    //主备都为主interface ens33    //网卡类型virtual_router_id 51priority 100    //优先级advert_int 1nopreempt    //不主动抢占资源,只在Master或者高优先级服务器上设置authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.180.200    //定义虚拟VIP地址}
}
virtual_server 192.168.180.200 11211    //VIP故障检测
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 20
protocol TCP
sorry_server 192.168.180.120 11211    //对端IP,也就是cache2
real_server 192.168.180.110 11211 {    //本机IP
weight 3
notify_down /root/memcached.sh    //当 memcached 宕机,停止keepalived服务
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 11211
}
}
}#编写完成退出,将这一份文件复制到cache2上
scp /etc/keepalived/keepalived.conf 192.168.180.120:/etc/keepalived/echo "/usr/bin/systemctl stop keepalived" > /root/memcached.sh
chmod +x memcached.sh

#在cache2上,修改配置文件的一些内容
vim /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs {router_id route
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 99    //优先级修改advert_int 1nopreempt(删除)    //将这一个删除authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.180.200}
}
virtual_server 192.168.180.200 11211
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 20
protocol TCP
sorry_server 192.168.180.110 11211    //对端IP
real_server 192.168.180.120 11211 {    //本机IP
weight 3
notify_down /root/memcached.sh
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 11211
}
}
}echo "/usr/bin/systemctl stop keepalived" > /root/memcached.sh
chmod +x memcached.sh

2. 均开启

systemctl start keepalived

3. 查看VIP是否生成

ip address show dev ens33 | grep 192.168.180.200

4. 验证高可用性

#关闭seten 0#cache1杀掉memcache:
killall memcached在cache2上查看,VIP已转移到cache2上

相关文章:

高性能内存对象缓存Memcached详细实验操作

目录 前提准备&#xff1a; cache1&#xff0c;2&#xff1a; 客户端cache-api&#xff08;一定得是LAMP环境&#xff09; memcache实现主主复制以及高可用(基于以上完成) cache1,2: memcachekeepalived(基于以上完成) cache1,2: 前提准备&#xff1a; 1. 准备三台cent…...

【C++复习专题】—— 类和对象,包含类的引入、访问限定符、类的6个默认成员函数等

1.类的定义 class classname {//类体&#xff1a;由成员函数和成员变量组成 }; class为定义类的关键字&#xff0c;classname为类的名字&#xff0c;{}中为类的主体。 类体中的内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量&#xff1b;类中的函数称为类的方…...

Three.js 快速入门教程【一】开启你的 3D Web 开发之旅

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...

Windows 图形显示驱动开发-CPU 内存调节和64KB 页面支持

对于 32 位 OS 离散图形处理单元 (GPU) 不支持可调整大小的 BAR&#xff0c;或者当调整帧缓冲区 BAR 的大小失败时&#xff0c;Windows 显示驱动程序模型 (WDDM) v2 将提供一种替代机制&#xff0c;通过该机制可以有效地访问离散 GPU VRAM。 对于支持可编程 BAR 地址空间的 GPU…...

PLC通信交互系统技术分享

目录 0、前言 1、模块划分 2、状态机 3、通信层增强 4、异常处理机制 5、核心代码 关键状态处理示例 6、部署与测试方案 1. 环境要求 2. 性能测试指标 0、前言 这是一个C程序&#xff0c;用于与西门子PLC进行通信&#xff0c;处理SN码、拍照信号、检测结果等流程。代码…...

ceph HEALTH_WARN clock skew detected on mon.f, mon.o, mon.p, mon.q

问题 ceph health detail[WRN] MON_CLOCK_SKEW: clock skew detected on mon.f, mon.o, mon.p, mon.qmon.f clock skew 0.243128s > max 0.05s (latency 0.000836159s)mon.o clock skew 16.249s > max 0.05s (latency 0<...

Git命令行入门

诸神缄默不语-个人CSDN博文目录 之前写过一篇VSCode Git的博文&#xff1a;VSCode上的Git使用手记&#xff08;持续更新ing…&#xff09; 现在随着开发经历增加&#xff0c;感觉用到命令行之类复杂功能的机会越来越多了&#xff0c;所以我专门再写一篇Git命令行的文章。 G…...

pdf-extract-kit paddle paddleocr pdf2markdown.py(效果不佳)

GitHub - opendatalab/PDF-Extract-Kit: A Comprehensive Toolkit for High-Quality PDF Content Extraction https://github.com/opendatalab/PDF-Extract-Kit pdf2markdown.py 运行遇到的问题&#xff1a; 错误&#xff1a; -------------------------------------- C Tra…...

Android 10.0 移除wifi功能及相关菜单

介绍 客户的机器没有wifi功能&#xff0c;所以需要删除wifi相关的菜单&#xff0c;主要有设置-网络和互联网-WLAN,长按桌面设置弹出的WALN快捷方式&#xff0c;长按桌面-微件-设置-WLAN。 修改 Android10 上直接将config_show_wifi_settings改为false,这样wifi菜单的入口就隐…...

什么是Dubbo?Dubbo框架知识点,面试题总结

本篇包含什么是Dubbo&#xff0c;Dubbo的实现原理&#xff0c;节点角色说明&#xff0c;调用关系说明&#xff0c;在实际开发的场景中应该如何选择RPC框架&#xff0c;Dubbo的核心架构&#xff0c;Dubbo的整体架构设计及分层。 主页还有其他的面试资料&#xff0c;有需要的可以…...

Django+Vue3全栈开发实战:从零搭建博客系统

文章目录 1. 开发环境准备2. 创建Django项目与配置3. 设计数据模型与API4. 使用DRF创建RESTful API5. 创建Vue3项目与配置6. 前端页面开发与组件设计7. 前后端交互与Axios集成8. 项目优化与调试9. 部署上线10. 总结与扩展10.1 项目总结10.1.1 技术栈回顾10.1.2 项目亮点 10.2 扩…...

双重差分学习笔记

双重差分适用的研究场景&#xff1a; 研究某项政策或者冲击造成的影响 例如&#xff0c;某某小学在2024.12.12日颁布了小红花激励措施&#xff0c;我们要研究这项措施对学生成绩的影响&#xff0c;此时&#xff0c;就可以使用双重差分模型。 双重差分适用的数据类型&#xf…...

python组备赛笔记(基础篇)

小数输出 1、代码示例&#xff1a; print(jc,%.3f%fc) 输出格式&#xff1a; 890 86075.959 2、代码示例&#xff1a; print(f%.3f%b) 输出格式&#xff1a; 1.000 金字塔输出 1、代码示例&#xff1a; n 5 t * for i in range(1,n1):print(f{t*(2*i-1):^{2*n-1}}) fo…...

从零开始构建一个小型字符级语言模型的完整详细教程(基于Transformer架构)

最近特别火的DeepSeek,是一个大语言模型,那一个模型是如何构建起来的呢?DeepSeek基于Transformer架构,接下来我们也从零开始构建一个基于Transformer架构的小型语言模型,并说明构建的详细步骤及内部组件说明。我们以构建一个字符级语言模型(Char-Level LM)为例,目标是通…...

XUnity.AutoTranslator-Gemini——调用Google的Gemini API, 实现Unity游戏中日文文本的自动翻译

XunityAutoTranslator-Gemini-API 本项目是一个使用 Flask 框架和 Google Gemini GenAI 模型构建的 Web API 服务&#xff0c;用于将日文unity游戏文本翻译成简体中文。 日文游戏文本AI翻译API (基于Google Gemini) 本项目是一个使用 Flask 框架和 Google Gemini GenAI 模型…...

中文Build a Large Language Model (From Scratch) 免费获取全文

中文pdf下载地址&#xff1a;https://pan.baidu.com/s/1aq2aBcWt9vYagT2-HuxdWA?pwdlshj 提取码&#xff1a;lshj 原文、代码、视频项目地址&#xff1a;https://github.com/rasbt/LLMs-from-scratch 翻译工具&#xff1a;沉浸式翻译&#xff08;https://app.immersivetrans…...

DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

C++:从拷贝构造函数到深浅拷贝

拷贝构造函数 当实例化一个新对象并使用同类型对其进行初始化时&#xff0c;会显式调用类的拷贝构造函数&#xff0c;拷贝构造函数写法&#xff1a;形参为const修饰的同类型类引用。拷贝构造函数有个需要注意的点&#xff0c;形参为何是只允许传递引用呢&#xff1f;原因在于若…...

Openssl之SM2加解密命令

### 1. 生成 SM2 私钥openssl genpkey -algorithm EC \-pkeyopt ec_paramgen_curve:sm2 \-out sm2_private_key.pem### 2. 从私钥导出 SM2 公钥openssl pkey -in sm2_private_key.pem \-pubout \-out sm2_public_key.pem### 3. 使用 SM2 公钥加密openssl pkeyutl -encrypt \-pu…...

Java集合框架之List接口详解

目录 一、List接口概述 二、List接口常见实现类 三、List接口特有方法: 1.元素操作 2. 查找元素位置 3. 子列表与不可变列表 四、List特有迭代器:ListIterator 1.特有的迭代方式 2.ListIterator接口中的常用方法: ⑴.void add(E e):在光标位置插入元素。(会移动…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...