众所周知,java中实现缓存最简单的办法就是使用LinkedHashMap。参考: http://aliahhqcheng.iteye.com/admin/blogs/1665024
然而这样的缓存,在多线程下就会出现问题,使得程序发生异常。那么问题来了,如何实现一个线程安全的缓存呢?
- 有线程安全的HashMap-->ConcurrentHashMap,可是没有线程安全的LinkedHashMap。不过阿里的同学实现了一个对ConcurrentHashMap进行改装,实现了线程安全的缓存,参考:http://jm-blog.aliapp.com/?p=689
- 使用Collections.synchronizedMap()包装LinkedHashMap,这个也是一种实现方式。
- 使用读写锁ReentrantReadWriteLock+LinkedHashMap实现。
- 使用synchronized + memcached
- redis可以支持吗?
- guava cache如何实现的
想听一听大家的建议?
redis的一些原子操作可以支持多线程
读写锁ReentrantReadWriteLock+LinkedHashMap 会有线程安全问题,最好是用ConcurrentHashMap+RWLock