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

Ubuntu下Memcache的安装与基本使用

在全世界范围内很多大负载站点采用了Memcache作缓存服务,以分担 数据库服务器的压力。

这里只介绍在Ubuntu下如何配置Memcache和如何在PHP使用Memecache,对于更深入的了解,比如Memcache的运作机理或更高级的应用还是Google一下…^_^

关于Memcache与memcached

Memcache是项目名,memcached是服务名。让很多初接触的人感觉很是莫名其妙。个人认为正确的应该是用前者用更为正确一点。



安装Memcache

Memcache分为两部分,Memcache服务端和客户端。Memcache服务端是作为服务来运行的,所有数据缓存的建立,存储,删除实际上都是在这里完成的。客户端,在这里我们指的是PHP的可以调用的扩展。

1)安装Memcache服务端

sudo apt-get install memcached

安装完Memcache服务端以后,我们需要启动该服务:

memcached -d -m 128 -p 11111 -u root


这里需要说明一下memcached服务的启动参数:

-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48
-h 显示帮助2)安装Memcache客户端

sudo apt-get install php5-memcache

安装完以后我们需要在php.ini里进行简单的配置,打开/etc/php5/apache2/php.ini文件在末尾添加如下内容:

[Memcache]

; 一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,
; 它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。



; 是否在遇到错误时透明地向其他服务器进行故障转移。
memcache.allow_failover = On

; 接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。memcache.max_failover_attempts = 20

; 数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。
; 如果发现无法解释的速度降低,可以尝试将此值增加到32768。
memcache.chunk_size = 8192

; 连接到memcached服务器时使用的默认TCP端口。
memcache.default_port = 11111

; 控制将key映射到server的策略。默认值”standard”表示使用先前版本的老hash策略。
; 设为”consistent”可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。
;memcache.hash_strategy = “standard”; 控制将key映射到server的散列函数。默认值”crc32″使用CRC32算法,而”fnv”则表示使用FNV-1a算法。
; FNV-1a比CRC32速度稍低,但是散列效果更好。
;memcache.hash_function = “crc32″


保存php.ini,执行sudo /etc/init.d/apache2 restart重启Apache。

在PHP中使用Memcache

<?php
$mem = new Memcache; //创建Memcache对象
$mem->connect(”127.0.0.1″, 11111); //连接Memcache服务器

$val = “这是一个Memcache的测试.”;
$key = md5($val);
$mem->set($key, $val, 0, 120); //增加插入一条缓存,缓存时间为120s

if(($k = $mem->get(’key’))){ //判断是否获取到指定的key
echo ‘from cache:’.$k;
} else {
echo ‘normal’; //这里我们在实际使用中就需要替换成查询数据库并创建缓存.
}
?>

对于key,通常用md5 查询语句来获取,在实际使用中根据具体需要来决定好了…

通过上面的步骤,我们就完成了Memcache的配置和基本使用…

php5-memcache扩展提供的方法

Memcache::add — 添加一个值,如果已经存在,则返回false
Memcache::addServer — 添加一个可供使用的服务器地址
Memcache::close — 关闭一个Memcache对象
Memcache::connect — 创建一个Memcache对象
memcache_debug — 控制调试功能
Memcache::decrement — 对保存的某个key中的值进行减法操作
Memcache::delete — 删除一个key值
Memcache::flush — 清除所有缓存的数据
Memcache::get — 获取一个key值
Memcache::getExtendedStats — 获取进程池中所有进程的运行系统统计
Memcache::getServerStatus — 获取运行服务器的参数
Memcache::getStats — 返回服务器的一些运行统计信息
Memcache::getVersion — 返回运行的Memcache的版本信息
Memcache::increment — 对保存的某个key中的值进行加法操作
Memcache::pconnect — 创建一个Memcache的持久连接对象
Memcache::replace — R对一个已有的key进行覆写操作
Memcache::set — 添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold — 对大于某一大小的数据进行压缩
Memcache::setServerParams — 在运行时修改服务器的参数

相关文章:

  • 整理linux网关与安全第三章
  • Facebook报纸上刊登整版广告 教人们识别假新闻
  • 云计算万亿市场遭地方争抢 泡沫或成房地产第二
  • git 从版本控制中删除文件及.gitignore的用法
  • 存储器需求旺盛 创见Q4营收回升明显
  • 网站性能优化之Apache调整
  • 远程访问MYSQL的设置(转)
  • 科技部官员:将在三方面支持物联网的发展
  • 持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本
  • RAC环境下的备份与恢复(二)
  • Spring核心 Bean的高级装配
  • 2011年被捕的八大黑客
  • CentOS 5.5 下 rsync 使用技巧与权限问题解读
  • SAP ABAP 的经常使用debug方式
  • 云计算的优缺点
  • [译]Python中的类属性与实例属性的区别
  • 【mysql】环境安装、服务启动、密码设置
  • Android系统模拟器绘制实现概述
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • JavaScript设计模式之工厂模式
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Laravel 实践之路: 数据库迁移与数据填充
  • mysql常用命令汇总
  • Shadow DOM 内部构造及如何构建独立组件
  • Spring声明式事务管理之一:五大属性分析
  • V4L2视频输入框架概述
  • 第2章 网络文档
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于axios的vue插件,让http请求更简单
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 一些css基础学习笔记
  • 组复制官方翻译九、Group Replication Technical Details
  • (C++17) optional的使用
  • (C语言)fread与fwrite详解
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (libusb) usb口自动刷新
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (四)Linux Shell编程——输入输出重定向
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)visual stdio 书签功能介绍
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net Web项目创建比较不错的参考文章
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net 路由处理厉害了
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • [20161214]如何确定dbid.txt
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [android] 请求码和结果码的作用
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)