memcached 失效的数据去了哪里了

来源:互联网 发布:java ee新手教程 编辑:程序博客网 时间:2024/04/27 08:00

先普及下memcached 数据有效期的感念

memcache.set(key,value,new Date(50)) 设置为50秒过期

memcache.set(key,value,new Date(System.currentTimeMillis()+5000)) 设置为50秒过期

第二个跟第一个的区别是当设置了这个时间点之后,它会以服务端的时间为准,也就是说如果本地客户端的时间跟服务端的时间有差值,这个值就会出现问题。

例:如果本地时间是20:00:00,服务端时间为20:00:10,那么实际上会是40秒之后这个缓存key失效


那么过期有效的数据,去了哪里了呢 ?memcached有类似Java的垃圾回收机制么?

memcached的缓存失效策略:

memcached的缓存失效策略是LRU(最近最少使用)加上到期失效策略。当向memcached存储数据时,你可能会设置一个过期时间,可以是永久也可以是一段时间,但是如果一旦给memcached分配的内存使用完毕,则首先会替换掉已失效的数据,其次是最近最少使用的数据。


普及一点memcached的存储概念:

1、过期时间限制

memcached的过期时间并不能随便设置,有一个最大时限就是30天,若超过30天后,存储时返回true,但是在取数据的时候取不到。(在取数据的时候才去做验证,看看数据是否失效)

2、存储限制

键被限制在 250 字符之内。数据项不能超过 1M (这个值由其内存分配机制决定的),因为这是最大的块( slab )值。如果对数据超过1M的值进行set,则会返回FALSE。

memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存。在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的。但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下,会导致操作系统比memcached进程本身还慢。Slab Allocator就是为解决该问题而诞生的。Slab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题.

3、访问限制

最大同时连接数200.


那么又来了memcached连接数那么有限,该如何处理? 

redis上场时间到!!



0 0
原创粉丝点击