拿 JAVA(也可是 Ruby 或其他语言)来说,HashMap 对象是 Key Value 形式,也是放到内存中。 而 Redis 和 Memcached 也是 Key Value 形式,也是放到内存中。我是不是在某些不方便或者不值得用 Redis 或者 Memcached 的情况下。用 HashMap 来存储或者缓存数据?
#10 楼 @frank 原理上,都是放在内存里面的,从这点上来讲确实一样。但同 Redis 之类的缓存在性能和使用上都很不一样。 使用上,你这个 HashMap 是单进程里的多线程共享,但本机的其他进程和其他服务器的进程都不能访问这块 HashMap。扩展和通信都很不方便。你如果给这个进程加上一系列的访问接口,那么就是一种 redis 或者 memcached。
HashMap 的性能一般,几百万个 key 的时候就有点慢了。
另外,Java 的话,内存数据不共享问题不大,毕竟大部分 java web 都是只跑一个 tomcat 或者 jetty 进程。但 rails 就两样了,一般都是好几个进程开着的,如果 20 个进程各自建一套缓存,显然不如一起合用 redis 节约的多。
@frank https://github.com/djreimer/mini_cache 我想你说的意思与这个小项目正合你意,代码也简单,可以了解一下。