一、Memcache
1. memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性。
2. Memcache使用了Slab Allocator的内存分配机制:按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题。
3. memcache 存在内存中,分配的内存满后,会按一定的规则删除一些k/v数据,重启后自然全部丢失。
4. 过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定。
5. 首先要说明的是Memcached支持最大的存储对象为1M。它的内存分配比较特殊,但是这样的分配方式其实也是基于性能考虑的,简单的分配机制可以更容易回收再分配,节省对CPU的使用。大于1M需要拆分。
6. memcached能接受的key的最大长度是,255字符。
7. 同一份数据同时发送了一个set命令和一个get命令,它们不会影响对方,但是get以后,处理期间可能先被其他Set了,后面的Set会覆盖前面的,但是memcached 1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果您使用gets命令查询某个key的item,memcached会 给您返回该item当前值的唯一标识。如果您覆写了这个item并想把它写回到memcached中,您可以通过cas命令把那个唯一标识一起发送给 memcached。如果该item存放在memcached中的唯一标识与您提供的一致,您的写操作将会成功。如果另一个进程在这期间也修改了这个 item,那么该item存放在memcached中的唯一标识将会改变,您的写操作就会失败。
8. 无身份验证,认为身份验证是更高层的问题。
9. 删除Delete操作只是将该chunk置为删除状态,这样在下次使用将优先利用这样的chunk。
10. Flush操作相当于将所有的item失效的一个动作。并不会改变memcache内存分配情况。
11. memcache已经分配的内存不会再主动清理。
12. memcache分配给某个slab的内存页不能再分配给其他slab。
13. flush_all不能重置memcache分配内存页的格局,只是给所有的item置为过期。
14. memcache最大存储的item(key+value)大小限制为1M,这由page大小1M限制。
15. 由于memcache的分布式是客户端程序通过hash算法得到的key取模来实现,不同的语言可能会采用不同的hash算法,同样的客户端程序也有可能使用相异的方法,因此在多语言、多模块共用同一组memcached服务时,一定要注意在客户端选择相同的hash算法。
16. 启动memcached时可以通过-M参数禁止LRU替换,在内存用尽时add和set会返回失败。
17. memcached启动时指定的是数据存储量,没有包括本身占用的内存、以及为了保存数据而设置的管理空间。因此它占用的内存量会多于启动时指定的内存分配量,这点需要注意。
二、Redis
1. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
2. Redis支持数据的备份,即master-slave模式的数据备份。
3. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
4. Redis,具备一定的数据库特征。
5. Redis数据可以存储到硬盘,基本没有过期策略。
6. redis有一个致命缺陷 当内存满了时 dump数据cpu占用100%。
7.
三、Memcache和Redis区别
- Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
- Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存。
- 他们的扩展都需要做集群;实现方式:master-slave、Hash。
- 在100k以上的数据中,Memcached性能要高于Redis。
- 如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。
- 如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
- Redis和Memcache在写入性能上面差别不大,读取性能上面尤其是批量读取性能上面Memcache更强。
相关推荐
标题 "php5.3 _32位_redis_memcahce_sphinx扩展" 涉及的是在PHP 5.3 32位环境下安装和使用Redis、Memcache和Sphinx这三个扩展的过程。这些扩展是PHP与特定数据库和缓存系统交互的重要工具。 1. **Redis扩展**: ...
我本地用的PHP版本是5.3的,但是php_memcahce.dll用的却是php5.3.13-memdll,很奇怪。 测试代码如下: //phpinfo(); // $memcache = new Memcache; // $memcache->connect('localhost', 11211) or die ("Could...
Hibernate4集成memcache用jar合集 hibernate配置 <property name="hibernate.cache.region.factory_class">com.googlecode.hibernate.memcached.MemcachedRegionFactory</property>
**Memcached for Windows*...总的来说,Memcached for Windows为Windows开发者提供了一种简单而高效的缓存解决方案,帮助优化Web应用的性能和响应速度。正确地集成和配置,可以让Memcached成为提升用户体验的关键工具。
memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash...基于memcache作者对分布式 cache的理解和解决方案。 memcache完全可以用到其他地方 比如分布式数据库, 分布式计算等领域。
单机比memcahced好的东西单机比memcahced好的东西
总结来说,"普通java工程测试连接memcached服务"这个主题涵盖了Java编程、分布式缓存系统、网络通信以及软件测试等多个方面,对于理解和优化Java应用的性能具有重要意义。在实际项目中,确保正确、高效地使用...
包含最简单的memcache的使用,测试类MemCached.java; 在此基础上增加了memcahce和spring的整合,顺便使用了ibati,测试类SpringMemcacheTest.java 代码简洁,适合研究,参考
kvs与memcahce的功能很相似,但是相对memcache来说更容易使用。 kvs提供基于http的接口, 用户可以通过浏览器直接get, set or delete. eg: http://127.0.0.1/set?key=foo&val=12345 添加一个key-value ...
压缩包内的"memcahce1.rar"和"memcache的源代码.txt"可能是项目源码的分卷或文档,前者可能包含源代码的压缩部分,后者可能是关于源代码的说明或者阅读指南。 总结,通过研究Memcached的源代码,我们可以深入理解其...
PHP5.3版本在windows下安装memcahce的时候报如下错误: PHP Warning: PHP Startup: memcache: Unable to initialize module Module compiled with module API=20090626, debug=0, thread-safety=0 ...
一个php内存缓存Memcached类代码,构造方法,用于添加服务器并创建memcahced对象,获取memcached对象,检查mem是否连接成功,向memcache中添加数据,获取memcahce中保存的数据,删除和同一个表相关的所有缓存。
一个php内存缓存Memcached类代码,构造方法,用于添加服务器并创建memcahced对象,获取memcached对象,检查mem是否连接成功,向memcache中添加数据,获取memcahce中保存的数据,删除和同一个表相关的所有缓存。
如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce。首先我们必须要安装,接下来如何使用memcache,有需要的朋友可以下载看看
下载前需要注意这些兼容性条件,以确保正确安装和使用。 Memcache是一个广泛使用的开源分布式内存对象缓存系统,它可以提高Web应用程序的速度,通过在内存中存储数据,减少了对数据库的访问次数。PHP的Memcache扩展...