memcache

缓存穿透,缓存击穿,缓存雪崩解决方案分析

半城伤御伤魂 提交于 2019-12-05 15:16:20
一:前言 设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。 二:缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。 三:解决方案 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。 四:缓存雪崩 缓存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。 五:解决方案 缓存失效时的雪崩效应对底层系统的冲击非常可怕。大多数系统设计者考虑用加锁或者队列的方式保证缓存的单线 程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上。这里分享一个简单方案就时讲缓存失效时间分散开

Memcache的安装使用及与mysql交互实例

北城以北 提交于 2019-12-05 05:15:22
一、Memcache介绍 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的 hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。 Memcache 是 danga 的一个项目,最早是 LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用 。 Memcache 模块是一个高效的守护进程,提供用与内存缓存的过程式程序和面向对象的方便的接口,特别是对于设计动态 Web 程序时减少对数据库的访问。 二、Windows下memcache的安装 1 . 下载 Memcache for win32 h ttp :// www.php100.com/html/download/tools/2010/0125/3857.html 2 . 下载 php_memcache.dll ( php 5.3.8 memcache 扩展 dll ) http ://hi.baidu.com/% E5%E2%E5%CB%C3%AB%C3%AB%B3%E6/blog/item/7612cf35a4425896a71e1267.html ( Note: 注意你安装的 PHP 版本来下载相应的 dll 文件 ) 1. 下载 memcache 的 windows 稳定版,解压放某个盘下面

memcached的应用和兼容程序

自古美人都是妖i 提交于 2019-12-05 04:07:18
mixi案例研究 mixi在提供服务的初期阶段就使用了memcached。 随着网站访问量的急剧增加,单纯为数据库添加slave已无法满足需要,因此引入了memcached。 此外,我们也从增加可扩展性的方面进行了验证,证明了memcached的速度和稳定性都能满足需要。 现在,memcached已成为mixi服务中非常重要的组成部分。 图1 现在的系统组件 服务器配置和数量 mixi使用了许许多多服务器,如数据库服务器、应用服务器、图片服务器、 反向代理服务器等。单单memcached就有将近200台服务器在运行。 memcached服务器的典型配置如下: CPU:Intel Pentium 4 2.8GHz 内存:4GB 硬盘:146GB SCSI 操作系统:Linux(x86_64) 这些服务器以前曾用于数据库服务器等。随着CPU性能提升、内存价格下降, 我们积极地将数据库服务器、应用服务器等换成了性能更强大、内存更多的服务器。 这样,可以抑制mixi整体使用的服务器数量的急剧增加,降低管理成本。 由于memcached服务器几乎不占用CPU,就将换下来的服务器用作memcached服务器了。 memcached进程 每台memcached服务器仅启动一个memcached进程。分配给memcached的内存为3GB, 启动参数如下: /usr/bin/memcached

Xcache和memcache的问题

纵饮孤独 提交于 2019-12-04 23:33:27
Xcache 和 memcached 是两个不同层面的缓存,不存在可比性。 Xcache 是 php 底层的缓存,它将PHP程式编译成字节码(byte code),再透过服务器上安装对应的程式来执行PHP脚本。而 memcached 是应用层缓存,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。 xcache 是不需要修改PHP程序的,只要安装了就可以自动为你的程序加速,而 memcached 则需要你修改程序的,需要你在操作数据库之前先询问下 memcached 有没有缓存数据,如果有且没有过期则不再访问数据库,以达到减少数据库查询的目的。 LAMP 的瓶颈在M,即数据库,以新的KVDB代替旧的关系数据库可以直接提高web应用程序的性能。 来源: oschina 链接: https://my.oschina.net/u/189901/blog/135656

PHP中Memcache类函数详解

守給你的承諾、 提交于 2019-12-04 05:02:35
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 -对一个已有的key进行覆写操作 Memcache::set

centos6 php 安装 memcache

喜你入骨 提交于 2019-12-03 13:38:22
下载 官网下载地址 # 下载 wget http://pecl.php.net/get/memcache-3.0.8.tgz # 解压 tar -zxvf memcache-3.0.8.tgz cd memcache-3.0.8 # 编译 /usr/local/php7/bin/phpize ./configure --with-php-config=/usr/local/php7/bin/php-config # 安装 make make install 来源: https://www.cnblogs.com/qq917937712/p/11797493.html

Memcache基础及工作原理

橙三吉。 提交于 2019-12-03 00:16:38
Memcache工作原理总结 http://itindex.net/detail/48448-memcache-%E5%B7%A5%E4%BD%9C-%E5%8E%9F%E7%90%86 深入理解Memcache原理 Memcache内存分配策略 http://itindex.net/detail/51456-memcache-%E5%86%85%E5%AD%98-%E7%AD%96%E7%95%A5 MemCache超详细解读 memcached全面剖析--2.理解memcached的内存存储 memcached完全剖析--1. memcached的基础 memcached全面剖析--3.memcached的删除机制和发展方向 memcached全面剖析--4. memcached的分布式算法 http://blog.csdn.net/zhxp_870516/article/category/1310409 ####几个应用点: 小对象的缓存(用户的token,权限信息,资源信息)。 小的静态资源缓存。 Sql结果的缓存(这部分用的好,性能提高相当大,同时由于Memcached自身提供scale out,那么对于db scale out的老大难问题无疑是一剂好药)。 ESB消息缓存。 来源: oschina 链接: https://my.oschina.net/u/2401585

java面试经验小结

匿名 (未验证) 提交于 2019-12-02 21:53:52
此内容偏中高级,适合有三年经验者。 1. java中wait和sleep有什么区别?多线程条件下如何保证数据安全? 答:最大区别是等待时wait会释放锁,而sleep会一直持有锁,wait通常用于线程时交,互,sleep通常被用于暂停执行。 2. java中volatile和synchronized有什么区别? 1.volatile 本质是在告诉 jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。 2.volatile 仅能使用在变量级别; synchronized 则可以使用在变量、方法、和类级别的。 3.volatile 仅能实现变量的修改可见性,并不能保证原子性;而 synchronized 则可以保证变量的修改可见性和原子性。 4.volatile 不会造成线程的阻塞; synchronized 可能会造成线程的阻塞。 5.volatile 标记的变量不会被编译器优化; synchronized 标记的变量可以被编译器优化。 3. 有了解java的原子类?实现原理是什么? 答:采用硬件提供原子操作指令实现的,即CAS。每次调用都会先判断预期的值是否符合,才进行写操作,保证数据安全。 4. spring主要使用了哪些?IOC实现原理是什么?AOP实现原理是什么?

redis和memcache的区别

无人久伴 提交于 2019-12-02 08:16:05
https://www.cnblogs.com/djj123/p/10996636.html 1 、 Redis 和 Memcache 都是将数据存放在内存中,都是内存数据库。不过 memcache 还可用于缓存其他东西,例如图片、视频等等。 2 、 Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list , set , hash 等数据结构的存储。 3 、虚拟内存 –Redis 当物理内存用完时,可以将一些很久没用到的 value 交换到磁盘 4 、过期策略 –memcache 在 set 时就指定,例如 set key1 0 0 8, 即永不过期。 Redis 可以通过例如 expire 设定,例如 expire name 10 5 、分布式 – 设定 memcache 集群,利用 magent 做一主多从 ;redis 可以做一主多从。都可以一主一从 6 、存储数据安全 –memcache 挂掉后,数据没了; redis 可以定期保存到磁盘(持久化) 7 、灾难恢复 –memcache 挂掉后,数据不可恢复 ; redis 数据丢失后可以通过 aof 恢复 8 、 Redis 支持数据的备份,即 master-slave 模式的数据备份。 来源: https://www.cnblogs.com/jokmangood/p/11737119.html