软件开发中常用的缓存算法主要有:FIFO-先进先出算法,LRU-最近最久未使用,LFU-最近最少使用。实际项目中缓存算法对这些都有涉及。
特点:先进先出,符合公平性,实现简单。
数据结构:使用对列
淘汰原则:如果一个数据最先进入缓存中,则应该最早淘汰掉。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉。
特点:按照时间长短,最不经常使用的缓存数据,先淘汰。
数据结构:链表和hashmap
淘汰原则:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。
特点:按照访问次数,最近最少使用的缓存数据,先淘汰。
数据结构:数组、hashmap、堆
淘汰原则:如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小。
Memcached有两个核心组件组成:服务端(ms)和客户端(mc)。首先mc拿到ms列表,并对key做hash转化,根据hash值确定kv对所存的ms
位置。然后在一个memcached的查询中,mc先通过计算key的hash值来确定kv对所处在的ms位置。当ms确定后,客户端就会发送一个查询请求
给对应的ms,让它来查找确切的数据。因为ms之间并没有护卫备份,也就不需要互相通信,所以效率较高。
Memcached会优先使用已超时的记录空间,但即使如此,也会发生追加新纪录时空间不足的情况。此时就要使用名为Least Recently Used (LRU)机制来分配空间。这就是删除最少使用的记录的机制。因此当memcached的内存空间不足时获取到新空间时,就从最近未使用的记录中搜索,并将空间分配给新的记录。
neeaMemcachedPool
127.0.0.1:11211
20
10
50
false
3000
neeaMemcachedPool
public class MemcachedSpringTest {
private MemCachedClient cachedClient;
@Before
public void init() {
ApplicationContext context = new ClassPathXmlApplicationContext("com/luo/config/beans.xml");
cachedClient = (MemCachedClient)context.getBean("memcachedClient");
}
@Test
public void testMemcachedSpring() {
UserBean user = new UserBean("luo", "hi");
cachedClient.set("user", user);
UserBean cachedBean = (UserBean)user;
Assert.assertEquals(user, cachedBean);
}
}