- 浏览: 57878 次
- 性别:
- 来自: 杭州
最新评论
-
bibithink:
LinkedHashMap 的内部实现是 一个哈希表 + 双向 ...
基于LinkedHashMap实现LRU缓存调度算法原理及应用 -
javaboy2010:
不错,还没毕业,写出如此代码,楼主很强啊! 向楼主学习!
自己编写一个基于Velocity的MVC框架 -
lwclover:
lz的代码在多线程环境下 会出问题
基于LinkedHashMap实现LRU缓存调度算法原理及应用 -
woming66:
condeywadl 写道观爷我来顶一个 哈哈
哈哈 你来晚 ...
基于LinkedHashMap实现LRU缓存调度算法原理及应用 -
condeywadl:
观爷我来顶一个 哈哈
基于LinkedHashMap实现LRU缓存调度算法原理及应用
文章列表
由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例。这样,有些用户操作就可能需要去修改多个数据库实例中的数据。传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协议。
...
RRiBbit可以作为事件总线Eventbus, 能够让组件之间进行双向通讯,支持远程功能,实现失败恢复 负载平衡, SSL/TLS等支持,这也称为请求-响应总线(Request-Response-Bus).
所有事情都是从HelloWorld开始
import org.rribbit.Listener;
import org.rribbit.RRiBbitUtil;
import org.rribbit.RequestResponseBus;
import org.rribbit.creation.InstantiatingClassBasedListenerObjectCreat ...
public class XXX {
private String[] status = new String[] {"A", "B", ....};
...
public String[] getStatus() { return status; }
}
status 由私有变公有
public class XXX {
private String[] status = new String[] {"A", "B", ....};
...
publi ...
最近手里事情不太多,随意看了看源码,在学习缓存技术的时候,都少不了使用各种缓存调度算法(FIFO,LRU,LFU),今天总结一下LRU算法。
LinkedHashMap已经为我们自己实现LRU算法提供了便利。
LinkedHashMap继承了HashMap底层是通过Hash表+单向链表实现Hash算法,内部自己维护了一套元素访问顺序的列表。
/**
* The head of the doubly linked list.
*/
private transient Entry<K,V> header;
.....
/**
...
package com.zzq.nio.reactor;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import ja ...
public class AtomicIntegerTest {
private static AtomicInteger count = new AtomicInteger();
private static int value = 1;
public static void main(String[] args) {
for(int i=0;i < 2000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
cas(valu ...
/**
* 压力测试JSON-RPC服务
*
* @author zhiqiang.zhu
* @version $Id: LoadRunnerRPCService.java, v 0.1 2011-6-9 下午08:43:11 zhiqiang.zhu Exp $
*/
public class LoadRunnerRPCService {
/** logger */
private static final Logger logger = Logger.getLogger(LoadRunnerRPCService.class) ...
提到缓存,有两点是必须要考虑的:
1、缓存数据和目标数据的一致性问题。
2、缓存的过期策略(机制)。
其中,缓存的过期策略涉及淘汰算法。常用的淘汰算法有下面几种:
1、FIFO:First In First Out,先进先出
2、LRU:Least Recently Used,最近最少使用
3、LFU:Least Frequently Used,最不经常使用
注意LRU和LFU的区别。LFU算法是根据在一段时间里数据项被使用的次数选择出最少使用的数据项,即根据使用次数的差异来决定。而LRU是根据使用时间的差异来决定的。
一个优秀的缓存框架必须实现以上的所有缓存机制。例如:Ehcache就实 ...
package com.zzq.pattern.decorator;
public interface Executor {
public void execute(String msg);
}
package com.zzq.pattern.decorator;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
public class Bu ...
package com.zzq.singleton;
/**
* Double-check Locking的模式
* @author zhiqiang.zhu
* @version $Id: Singleton.java,v 0.1 2010-9-3 下午02:41:12 zhiqiang.zhu Exp $
*/
public class Singleton {
/**
* volatile类型的变量能够保持多线程并发访问此变量的同步问题
* 但是只有JDK1.5以上版本才能正常使用。
* JDK1.4之前的许多JVM,使用volatile会导 ...
package com.zzq.base64;
public class Base64Util {
private static final char[] BASE64_TABLE = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v ...
package com.zzq.rsa;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import j ...
ProxyFactory类
package com.zzq.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyFactory implements InvocationHandler{
private Object target;
pub ...