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

memcached 高性能内存对象缓存

  • memcached 高性能内存对象缓存

    • memcache是一款开源的高性能分布式内存对象缓存系统,常用于做大型动态web服务器的中间件缓存。

    • mamcached做web服务的中间缓存示意图

      • 当web服务器接收到请求需要处理动态页面元素时,通常要去数据库调用数据,但是通过memcached-api接口程序不去直接访问数据库,而去访问mamcached,再由memcached去访问数据库获取数据,获得到数据后自己缓存一分,在发送给web服务器一份,下次再进行通向的访问就不需要访问数据库,从而实现降低数据库的io压力。

    • memcached的存储数据方式

      • slab allocation

        • 按组分配:每次先分配一个slab,大小相当于一个1M,在1M的这个大小内划分出等大小的chunk,该方法有效的解决了内存碎片问题,但也会因为不满足chunk的大小而造成空间浪费。

        • slab 按。。。分片

        • chunk 块

    • memcached的数据过期方式:随着数据越来越多内存不足的情况下,会清理一些数据。依据过期条件

      • LRU:最近最少使用的记录,会被清理

      • laxzy expiration:惰性过期,用get查看记录时间,从而决定是否过期。

    • memcached分布式缓存架构

      • 每个memcached独立存在,数据分配根据路由算法选择存储的memcached。读取数据时根据保存时的路由算法选择相同的服务器来读取数据,将memcached做一个互相复制,可以确保能读取到数据。路由算法由api接口指定

        • 路由算法

          • 求余数hash算法

            • 将key做hash运算得到一个整数,再进行哈希算法根据余数进行路由,这种方法简单,但只适合数据更改不太频繁的场景下,节点的变动也会有影响。

          • 一致性hash算法

            • 该算法适合动态环境,原理是按照hash算法把对应的key通过hash运算后映射成一个首尾相闭合的循坏,再把节点服务器也通过这种方法也映射到环中,顺时针计算将对象存储到离自己最近的机器中。

    • memcached部署

      • 单节点的memcached部署

        • 一台做memcached服务器,一台做lamp应用程序测试,宿主机用来访问验证。

        • 安装过程

          • 准备前奏

            • 处理内核安全机制与防火墙

            • 安装gcc

          • 源码安装memcached

            • 安装依赖工具

              • libevent

                • libevent是一款基于C语言编写的,轻量级的,开源的,高性能事件通知库,常用于构建高性能网络服务器,对高并发有很好的抗压能力。可移植性强。

                • 本案例以libevent-2.18源码包为例

                  • 拉取到源码包后进行解压编译安装

                    • 只需要在配置时指定安装路径,其他一切照常即可。

                    • ./configure --prefix=/usr/local/libevent

            • 本案例以memcached-1.5.1为例

            • 在配置时指定配置参数

              • ./configure \ --prefix=/usr/local/memcached \ --with-libevent=/usr/local/libevent

                • 一个安装路径,一个指定libevent的安装路径。

            • 编译与编译安装照常

            • 可以编写memcached的服务控制脚本

              • #!/bin/bash CMD="/usr/local/memcached/bin/memcached" start(){ $CMD -d -m 128 -u root } stop(){ killall memcached; } ACTION=$1 case $ACTION in 'start') start;; 'stop') stop;; 'restart') stop sleep 2 start;; *) echo 'Usage:{start|stop|restart}' esac

              • 测时前检查psmisc安装包是否安装,否则killall命令无法使用

              • 赋予该脚本执行权,就可以利用该脚本进行控制

            • 进行启动验证,查看是否监听了11211端口

          • 部署memcached api客户端

            • 搭建web网站,快速部署

              • 需要利用网络资源

              • yum -y install httpd mariadb mariadb-server php php-devel php-mysql

              • 之后启动相关服务

                • httpd

                • mariadb

                • 设置数据库密码

                  • mysqladmin -u root password 'pwd123'

              • 编写php测试网页检查php能否正常工作

            • 源码安装libmemcached

              • 该软件提供了api的接口,以libmemcached1.0.18为例。

              • 配置参数

                • ./configure \ --prefix=/usr/local/libmemcached \ --with-memcached=/usr/local/memcached

                  • 第二条指定了memcached扩展的位置

            • 源码包安装memcached扩展

              • 本案例以memcached2.2.0为例

                • 安装安装编译环境

                  • zlib zlib-devel

                • 解压进入cd目录

                  • memcached源码包本身不带配置项需要借用php工具生成对应的配置文件

                  • /usr/bin/phpize

                    • 该目录为yum方式安装的php工具的路径,如果是源码包安装通常会在/usr/local下的php安装目录中。

                    • 该命令需要autoconf软件包的支持,会在当前目录下生成对应的配置脚本.

                  • 生成配置文件后就可以进行配置了

                    • ./configure --with-php-config=/usr/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl --with-zlib-dir

                      • --with-php-config=/usr/bin/php-config

                        • 指定php配置文件的路径

                      • --with-libmemcached-dir=/usr/local/libmemcached

                        • 指定libmemcached的位置

                      • --disable-memcached-sasl

                        • 禁用sasl认证机制

                          • 1.SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。简单来说SASL是一个胶合(glue)库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。

                      • --with-zlib-dir

                        • 指定压缩函数库的位置,yum装的不需要指定路径,可以为空。

                  • 配置后进行编译安装,如果php是7的版本,编译安装会报错。

            • 配置php让其支持memcached组件

              • yum安装的的配置文件位置/etc/php.ini

                • 添加一行语句重启httpd即可

                  • extension=memcached.so

              • 如果是源码包安装的需要额外指定路径

                • extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20121212/"

            • 重启httpd之后通过phpinfo可以查看是否开启了memcached的扩展模块。

            • 测试memcached-API功能

              • 在web'服务器网页文档目录下编写测试文档

                • <?php $memcache = new Memcached(); $memcache->addServer('192.168.10.101', 11211); $memcache->set('key', 'Memcache test successful!', 0, 60); $result = $memcache->get('key'); unset($memcache); echo $result; ?>

                • 最后访问时出现Memcache test successful!,表示api接口成功。

          • memcached作为非关系型数据库的基础操作

            • memcached本身没提供入口工具需要用telnet进行访问,需要下载。

            • 添加键值对

              • add 键名 0 0 8 值

                • 出现STORED表示存储成功

                • 第一个0表示标记位 ,例如压缩或加密,通常为0

                • 第二个0表示过期时间,为0表示永不过期,单位m 8表示值的字符长度,注意必须一样,少/多都不行。

                • 回车后输入值

            • 查看键值对

              • get 键名

            • 查看键名的更新因子

              • gets 键名

                • 通常最后一位数字表示更新因子

            • 更新键值

              • set 键名 0 0 8

            • 清除一条键值对

              • delete 键名

            • 键名重新复制

              • cas 键名 0 0 8 更新因子数

            • 追加数据

              • append 键名 0 0 追加字节数

            • 清除所有数据

              • flush_all

            • 查看状态信息

      • 总结单节点部署,服务器与应用程序各自需要的软件包

        • 服务器

          • libevent

          • memcached1.5.1

        • 应用程序

          • 除了本身必备的lamp以外

          • libmemcached

          • 安装memcached扩展 2.2.0

      • memcached主主复制与高可用

        • memcached支持多个memcached之间相互复制,已解决memcached的容灾问题。

        • memcached提供了专门用于高可用配置的软件八包。本案例以memcached-1.2.8-repcached-2.2.tar.gz为例。

        • 实验过程

          • 处理内核安全机制与防火墙

          • 两台主机构建高可用环境

            • 实验步骤基本一样,因此可以同步执行

          • 安装libevent

            • 安装编译环境及服务控制脚本所需软件包

              • 光盘的仓库安装gcc* psmisc

            • 解压后配置项

              • 指定安装路径即可

                • ./configure --prefix=/usr/local/libevent

              • 编译安装

                • make && make install

          • 安装memcached-1.2.8-repcached-2.2.tar.gz

            • 解压后配置项

              • ./configure \ --prefix=/usr/local/memcached_replication \ --enable-replication \ --with-libevent=/usr/local/libevent

                • --enable-replication一定要启用,否则无法进行主主复制操作。

                • --with-libevent指定事件通知函数库

            • 在进行编译前需要修改源代码

              • memcached.c

                • 在55~60行去掉

                  • #if defined(__FreeBSD__) || defined(__APPLE__)

                  • #endif

              • 之后进行编译安装

          • ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/

            • memcached的启动需要在该命令行下寻找函数

          • 启动memcached

            • /usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.10.102

              • -d 以守护进程的方式允许

              • -u 指定运行用户

              • -x 指定复制对端服务器的地址,如果在编译中没有启用复制功能则会在报错没有该选项。

              • -m 最大内存使用量,默认64M

              • 该位置需要修改为对方的IP

          • 之后再两台服务器上查看是否开启服务进程与联系对端的进程。

            • 利用telnet再一台主机上创建,在另一台主机上查询以验证复制功能。

          • memcached的高可用

            • 准备前奏

              • 关闭NetworkManager

                • 不关闭会让vip无法漂移

            • 安装keepalived

              • 修改配置文件

                • router_id LVS_01

                  • 两台主机不同用于区分。

                • #vrrp_strict

                  • 注释掉严格模式,否则无法实现单播通信

                • vrrp_script check_down { ##定义要执行的脚本 script "/etc/keepalived/memcached.sh" ##脚本路径和名称 interval 1 ##间隔1秒执行一次 }

                  • 添加脚本单元,不单对整机进行检查,还要对服务进行检查。

                  • #!/bin/bash # if [ $(ps -C memcached --no-header | wc -l) -eq 0 ]; then systemctl restart keepalived fi

                • state BACKUP

                • interface ens33

                  • 确定承载网卡

                • virtual_router_id 51

                  • 保证两台服务器用同一个id

                • priority 100

                  • 注意主服务器与从服务器的优先级

                • nopreempt

                  • 根据性能优劣来选择是否关闭抢占功能

                • virtual_ipaddress { 192.168.10.100 }

                  • 设定vip

                • track_script { check_down }

                  • 调用脚本

            • 之后进行验证测试

              • 需要修改访问测试页面的缓存服务器地址,如果搭建dns服务器则修改域名对应IP即可。

              • 关闭memcached进行高可用检测

        • 总结双节点部署memcached需要的软件包

          • memcached-1.2.8-repcached-2.2.tar.gz,memcached分布式高可用专用版软件包

          • 实现高可用的keepalived

全文复制到xmind中即可形成条理性笔记。 

相关文章:

memcached 高性能内存对象缓存

memcached 高性能内存对象缓存 memcache是一款开源的高性能分布式内存对象缓存系统&#xff0c;常用于做大型动态web服务器的中间件缓存。 mamcached做web服务的中间缓存示意图 当web服务器接收到请求需要处理动态页面元素时&#xff0c;通常要去数据库调用数据&#xff0c;但…...

C语言 分割链表

题目来源: 代码部分&#xff0c;参考官方题解的写法: // 思路: 就是把原始链表&#xff0c;拆分为2部分&#xff0c;最后再拼接一下。struct ListNode* partition(struct ListNode* head, int x) {struct ListNode* small malloc(sizeof(struct ListNode));struct ListNode*…...

spring ioc的原理

1、控制反转(IOC):对象的创建控制权由程序自身转移到外部&#xff08;容器&#xff09; 2、依赖注入(DI):所谓依赖注入&#xff0c;就是由IOC容器在运行期间&#xff0c;动态地将某种依赖关系注入到对象之中。 Spring 中的 IoC 的实现原理就是工厂模式加反射机制。 参考资料…...

npm安装依赖包报错,npm ERR! code ENOTFOUND

一、报错现象&#xff1a; npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ETIMEDOUT: request to https://registry.npmjs.org/vue failed, reason: connect ETIMEDOUT 104.16.23.35:443 npm WARN registry Using stale data…...

【iOS】——内存对齐

内存对齐是什么 内存对齐指的是数据在内存中的布局方式&#xff0c;它确保每个数据类型的起始地址能够满足该类型对齐的要求。这是因为现代处理器在访问内存时&#xff0c;如果数据的起始地址能够对齐到一定的边界&#xff0c;那么访问速度会更快。这种对齐通常是基于数据类型…...

网络安全-网络安全及其防护措施10

46.软件定义网络&#xff08;SDN&#xff09; 软件定义网络&#xff08;SDN&#xff09;的概念和特点 软件定义网络&#xff08;SDN&#xff09;是一种新兴的网络架构&#xff0c;通过将网络的控制平面&#xff08;Control Plane&#xff09;和数据转发平面&#xff08;Data …...

Pytorch基础应用

1.数据加载 1.1 读取文本文件 方法一&#xff1a;使用 open() 函数和 read() 方法 # 打开文件并读取全部内容 file_path example.txt # 替换为你的文件路径 with open(file_path, r) as file:content file.read()print(content)方法二&#xff1a;逐行读取文件内容 # 逐…...

Axure 教程 | 设置文本框背景透明

​在AXURE软件中&#xff0c;部件样式可以编辑&#xff0c;但有时却无法满足所有个性化原型的需求。例如文本框部件&#xff0c;可以设置是否隐藏边框&#xff0c;但即使隐藏边框之后&#xff0c;文本框还会有白色的背景。 当界面需要一个无背景色的输入框时&#xff0c;对于完…...

【BUG】已解决:NOAUTH Authentication required

已解决&#xff1a;NOAUTH Authentication required 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社区主理人…...

全国产服务器主板:搭载飞腾FT2000+/64处理器的高性能加固服务器

近期很多朋友咨询全国产化的服务器主板。搭载的是飞腾FT-2000/64的全国产化服务器主板。他的主要特点是&#xff1a;①丰富的PCIe、千兆以太网、SATA接口&#xff0c;可用作数据处理、存储、通信服务器&#xff1b;②​​​​​​​板载独立显示芯片&#xff0c;对外HDMI/VGA/L…...

OPC UA边缘计算耦合器BL205工业通信的最佳解决方案

OPC UA耦合器BL205是钡铼技术基于下一代工业互联网技术推出的分布式、可插拔、结构紧凑、可编程的IO系统&#xff0c;可直接接入SCADA、MES、MOM、ERP等IT系统&#xff0c;无缝链接OT与IT层&#xff0c;是工业互联网、工业4.0、智能制造、数字化转型解决方案中IO系统最佳方案。…...

【已解决】Django连接MySQL启动报错Did you install mysqlclient?

在终端执行python manage.py makemigrations报错问题汇总 错误1&#xff1a;已安装mysqlclient&#xff0c;提示Did you install mysqlclient? 当你看到这样的错误信息&#xff0c;表明Django尝试加载MySQLdb模块但未找到&#xff0c;因为MySQLdb已被mysqlclient替代。 【解…...

ubuntu gcc g++版本切换

要将 GCC 和 G 的版本从 12.4 降低到 9&#xff0c;你可以按照以下步骤操作&#xff1a; 安装 GCC 和 G 9&#xff1a; sudo apt update sudo apt install gcc-9 g-9 使用 update-alternatives 设置优先级&#xff1a; sudo update-alternatives --install /usr/bin/gcc gcc…...

如何发一篇顶会论文? 涉及3D高斯,slam,自动驾驶,三维点云等等

SLAM&3DGS 1&#xff09;SLAM/3DGS/三维点云/医疗图像/扩散模型/结构光/Transformer/CNN/Mamba/位姿估计 顶会论文指导 2&#xff09;基于环境信息的定位&#xff0c;重建与场景理解 3&#xff09;轻量级高保真Gaussian Splatting 4&#xff09;基于大模型与GS的 6D pose e…...

Java面试八股之什么是Redis的缓存更新

什么是Redis的缓存更新 Redis的缓存更新是指当缓存中的数据发生变化时&#xff0c;需要将这些变化同步到缓存中以保持数据的一致性。缓存更新的目的是确保缓存中的数据始终是最新的&#xff0c;以便用户可以获取到最新的数据。 常见的缓存更新策略包括&#xff1a; 直接覆盖…...

新华三H3CNE网络工程师认证—VLAN使用场景与原理

通过华三的技术原理与VLAN配置来学习&#xff0c;首先介绍VLAN&#xff0c;然后介绍VLAN的基本原理&#xff0c;最后介绍VLAN的基本配置。 一、传统以太网问题 在传统网络中&#xff0c;交换机的数量足够多就会出现问题&#xff0c;广播域变得很大&#xff0c;分割广播域需要…...

Linux-开机自动挂载(文件系统、交换空间)

准备磁盘 添加三块磁盘&#xff08;两块SATA&#xff0c;一块NVMe&#xff09; 查看设备&#xff1a; [rootlocalhost jian]# ll /dev/sd* [rootlocalhost jian]# ll /dev/nvme0n2 扩&#xff1a;查看当前主机上的所有块设备&#xff0c;通过如下指令实现&#xff1a; [root…...

[003-02-10].第10节:Docker环境下搭建Redis主从复制架构

我的博客大纲 我的后端学习大纲 我的Redis学习大纲 1.cluster&#xff08;集群&#xff09;模式-docker版 哈希槽分区进行亿级数据存储 1.1.面试题&#xff1a;1~2亿条数据需要缓存&#xff0c;请问如何设计这个存储案例 1.回答&#xff1a;单机单台100%不可能&#xff0c;肯…...

uni-app学习HBuilderX学习-微信开发者工具配置

HBuilderX官网&#xff1a;简介 - HBuilderX 文档 (dcloud.net.cn)https://hx.dcloud.net.cn/ uni-app官网&#xff1a; uni-app官网 (dcloud.net.cn)https://uniapp.dcloud.net.cn/quickstart-hx.htmlHBuilder下载安装&#xff1a;打开官网 uni-app项目的微信开发者工具配置…...

持续集成08--Jenkins邮箱发送构建信息及测试报告

前言 在持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;的自动化流程中&#xff0c;及时通知团队成员关于构建的成功或失败是至关重要的。Jenkins&#xff0c;作为强大的CI/CD工具&#xff0c;提供了多种通知机制&#xff0c;其中邮件通知是最常用且有…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...