memcache 杂记
它是一个一个高性能的分布式内存对象缓存系统。
端口号 11211
目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、
需要频繁访问数据库的网站访问速度提升效果十分显著
根据一个sql取出的数据,把sql取出的数据,给缓存到memcache里面,
当下次再操作该sql语句的时候,则直接从memcache里面获取
跟mysql比较一下
它是一个c/s架构
mysql的数据是存在磁盘的 memcache存在内存里
mysql的数据存储是,由数据库,数据表,数据的记录,
存储数据是按照表的结构进行存储的。
memcache的数据存储格式是:keyalue的格式,来存储的,
相当于在内存里面有一张两列的哈希表。类似于php的里面的关联数组
memcache细节讨论
1、缓存周期(有效期)
缓存周期的设置有两种方式:
如果缓存周期设置为0表明此数据永不过期
第一种使用:秒数,最大不能超过30天,即2592000秒,
第二种使用:使用时间戳,该时间戳是到的哪个时间点。比如我们要把一个数据缓存60天,
$mem->add($key,$value,0,time()+60*24*3600)
2、 惰性删除,
就是说,缓存的数据,到期后,不会自动删除,当get数据的时候,查看有没有到期,如果到期了,则再删除该数据。
memcache不会开启进程来监视键是否过期,省memcache的资源,也省cpu.
3、Least Recently Used(LRU)
最近 最少使用原则,
当前存储的数据的在memcache里面空间已经占满后,则memcache会把不活跃(get或set次数比较少的)的数据(不管是否到期)清除,让新的数据给存储进来。
4、安全性
memcache定位就是做数据的缓存的,不是数据的持久存储的,因此没有做一些用户的验证,目的提高连接速度,发挥自己的独特功能。
memcahe该软件本身没有提供一些安全机制,如果要限制使用,则只能在操作系统的层面来解决,比如window系统、安装防火墙的软件,在linux下面使用iptables,seclinux(安全机制)
5、memcache比较适合于存储哪些数据。
存储的数据的特点:
访问比较频繁,
安全性不高,丢失无所谓,
修改比较频繁的数据,比如一些用户的在线状态。
memcache实现原理
1、访问数据的速度比传统的关系型数据库要快,因为Oracle、MySQL这些传统的关系型数据库为了保持数据的持久性,数据存放在硬盘中,IO操作速度慢
2、memcache的数据存放在内存中同时意味着只要memcache重启了,数据就会消失
3、既然memcache的数据存放在内存中,那么势必受到机器位数的限制,32位机器最多只能使用2GB的内存空间,64位机器可以认为没有上限
4、memcache采用的内存分配方式是固定空间分配
1、memcache将内存空间分为一组slab
2、每个slab下又有若干个page,每个page默认是1M,如果一个slab占用100M内存的话,那么这个slab下应该有100个page
3、每个page里面包含一组chunk,chunk是真正存放数据的地方,同一个slab里面的chunk的大小是固定的
4、应该可以理解为什么memcache存放的value大小是限制的,因为一个新数据过来,slab会先以page为单位申请一块内存,申请的内存最多就只有1M,所以value大小自然不能大于1M了
5、memcache的内存分配chunk里面会有内存浪费,88字节的value分配在128字节(紧接着大的用)的chunk中,就损失了30字节,但是这也避免了管理内存碎片的问题
6、memcache的LRU算法不是针对全局的,是针对slab的
总结memcache的特性和限制
1、memcache中可以保存的item数据量是没有限制的,只要内存足够
2、memcache单进程在32位机中最大使用内存为2G,64位机则没有限制。
3、Key最大为250个字节,超过该长度无法存储
4、单个item最大数据是1MB,超过1MB的数据不予存储
5、memcache服务端是不安全的,比如已知某个memcache节点,可以直接telnet过去,并通过flush_all让已经存在的键值对立即失效//这个不太懂 抽时间实践
6、不能够遍历memcache中所有的item,因为这个操作的速度相对缓慢且会阻塞其他的操作
8、memcache设置添加某一个Key值的时候,传入expiry为0表示这个Key值永久有效,这个Key值也会在30天之后失效
数据在内存中失效后,并不会立马被删除,只有在下次get时候,系统才会将其删除。
memcache可以因此,被一些未被及时删除的数据占满空间。
加之LRU淘汰机制,永久数据如果很少被访问的话,在内存空间被占满的情况下,再有新数据被缓存,则永久数据,就有可能被删除
PHP的memcache客户端所有方法总结
memcache::add
添加一个值,如果已经存在,则返回false
memcache::addServer
添加一个可供使用的服务器地址
memcache::close
关闭一个memcache对象
memcache::connect
创建一个memcache对象
memcache::decrement
对保存的某个key中的值进行减法操作
memcache::delete
删除一个key值
memcache::flush
清除所有缓存的数据
实际上没有释放资源,它仅仅将所有的缓存标记为过期,这样可以使新的缓存来覆盖被占的内存空间。
memcache::get
获取一个key值
memcache::getExtendedStats
获取进程池中所有进程的运行系统统计
memcache::getServerStatus
获取运行服务器的参数
成功返回服务器状态,服务器没有启动会返回0,其他数字的时候表示服务器是启动状态的。
memcache::getStats
返回服务器的一些运行统计信息
memcache::getVersion
返回运行的memcache的版本信息
memcache::increment
对保存的某个key中的值进行加法操作
memcache::pconnect
创建一个memcache的持久连接对象
memcache::replace
对一个已有的key进行覆写操作
memcache::set
添加一个值,如果已经存在,则覆写
memcache 杂记的更多相关文章
- 分布式系统之CAP理论杂记[转]
分布式系统之CAP理论杂记 http://www.cnblogs.com/highriver/archive/2011/09/15/2176833.html 分布式系统的CAP理论: 理论首先把分布式 ...
- PHP之Memcache缓存详解
Mem:memory缩写(内存):内存缓存 1. 断电或者重启服务器内存数据即消失,即临时数据: Memcache默认端口:11211 存入方式:key=>>value ...
- 走进缓存的世界(三) - Memcache
系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...
- 网站缓存技术总结( ehcache、memcache、redis对比)
网站技术高速发展的今天,缓存技术已经成为大型网站的一个关键技术,缓存设计好坏直接关系的一个网站访问的速度,以及购置服务器的数量,甚至影响到用户的体验. 网站缓存按照存放的地点不同,可以分为客户端缓存. ...
- MemCache超详细解读
MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...
- 如何在腾讯开放平台的云服务器上安装php和memcache 一
由于被通知腾讯的CEE要关闭了,必须自己切换到服务器,自己装php.烦到一个B. 首先找到官方wiki: http://wiki.qcloud.com/wiki/SUSE%E7%8E%AF%E5%A2 ...
- 搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展
上一篇:搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展 一.安装Memcached 1.yum安装libevent事件触发管理器 yum -y install libe ...
- 前端学PHP之PHP操作memcache
× 目录 [1]安装 [2]连接 [3]增删改查[4]分布式[5]状态[6]安全[7]应用 前面的话 和访问mysql服务器类似,PHP也是作为客户端API访问memcached服务器的,所以同样需要 ...
- 前端学PHP之MemCache
× 目录 [1]作用 [2]安装 [3]管理[4]命令 前面的话 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括 ...
随机推荐
- 关于sqlserver数据库max()方法的使用
1.传送门:http://www.codesky.net/article/201009/144935.html 2.copy自传送门里的内容: max(字符串内容): 说明对字符型数据的最大值,是按照 ...
- HTML的块级元素和行内元素
行内元素一般是内容的容器,而块级元素一般是其他容器的容器.一般情况下,行内元素只能包含内容或者其它行内元素,宽度和长度依据内容而定,不可以设置,可以和其它元素和平共处于一行:而块级元素可以包含行内元素 ...
- HTML5-2
1 html5新增表单元素 <form> <!-- 数字 还有箭头,可以加减数字 并且可以设置最大最小值 --> <input type="number&quo ...
- react-redux-action
Action 是把数据从应用(view等)传到 store 的有效载荷,store.dispatch() 将 action 传到 store. //尽量减少在 action 中传递的数据//actio ...
- 简易祖玛--canvas
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- sql 约束Check中使用Case函数
CHECK 约束用于限制列中的值的范围 在Check中使用Case函数在很多情况下都是非常不错的解决方法.可能有很多人根本就不用Check,那么我建议你在看过下面的例子之后也尝试一下在SQL中使用Ch ...
- 记录配置xshell显示中文乱码的一次巧合
linux系统设置了中文UTF8,xshell终端也设置了中文UTF8,但xshell仍然无法显示中文,于是想起可能是字体显示问题. 设置楷体字体后,虽然文字方向还有问题,但乱码显示的问题解决了,方向 ...
- centos7 无界面静默安装 oracle
环境准备 Centos7.3.64 64位 这里使用的是阿里云 ECS主机(1核,2G内存,40G硬盘) Oracle 11g R2 64位安装介质(版本11.2.0.1)下载地址:http:/ ...
- unity重写软键盘for Android NGUI
一 原因 以为某些原因,需要重写Unity游戏中Android的软键盘的样式,然而unity对android和ios的ios的软键盘都有封装,在Unity中TouchScreenKeyboard.Op ...
- QSSP软件一些参数的设置(远震波形合成)
1.time window, sampling interval 这里需要注意的是两者的和必须是2的n次方,可以写成2047 1; 2046 2,或2047.75 0.25,2047.9 0.1等等 ...