哪些java项目代码很好 优秀的java代码( 五 )


RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器 。
Erlang是一门动态类型的函数式编程语言 。对应到Erlang里,每个Actor对应着一个Erlang进程 , 进程之间通过消息传递进行通信 。相比共享内存 , 进程间通过消息传递来通信带来的直接好处就是消除了直接的锁开销(不考虑Erlang虚拟机底层实现中的锁应用) 。
AMQP(Advanced Message Queue Protocol)定义了一种消息系统规范 。这个规范描述了在一个分布式的系统中各个子系统如何通过消息交互 。
七、Log4j
日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别 。
八、Ehcache
EhCache 是一个纯Java的进程内缓存框架 , 具有快速、精干等特点,是Hibernate中默认的CacheProvider 。Ehcache是一种广泛使用的开源Java分布式缓存 。主要面向通用缓存,Java EE和轻量级容器 。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点 。
优点:
1、 快速
2、 简单
3、 多种缓存策略
4、缓存数据有两级:内存和磁盘,因此无需担心容量问题
5、 缓存数据会在虚拟机重启的过程中写入磁盘
6、可以通过RMI、可插入API等方式进行分布式缓存
7、 具有缓存和缓存管理器的侦听接口
8、支持多缓存管理器实例,以及一个实例的多个缓存区域
9、提供Hibernate的缓存实现
缺点:
1、使用磁盘Cache的时候非常占用磁盘空间:这是因为DiskCache的算法简单,该算法简单也导致Cache的效率非常高 。它只是对元素直接追加存储 。因此搜索元素的时候非常的快 。如果使用DiskCache的,在很频繁的应用中,很快磁盘会满 。
2、不能保证数据的安全:当突然kill掉java的时候 , 可能会产生冲突 , EhCache的解决方法是如果文件冲突了,则重建cache 。这对于Cache数据需要保存的时候可能不利 。当然,Cache只是简单的加速,而不能保证数据的安全 。如果想保证数据的存储安全,可以使用Bekeley DB Java Edition版本 。这是个嵌入式数据库 。可以确保存储安全和空间的利用率 。
九、Redis
redis是一个key-value存储系统 。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型) 。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的 。在此基础上,redis支持各种不同方式的排序 。与memcached一样,为了保证效率 , 数据都是缓存在内存中 。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步 。
Redis数据库完全在内存中,使用磁盘仅用于持久性 。相比许多键值数据存储 , Redis拥有一套较为丰富的数据类型 。Redis可以将数据复制到任意数量的从服务器 。
1.2、Redis优点:
(1)异常快速:Redis的速度非常快 , 每秒能执行约11万集合 , 每秒约81000+条记录 。
(2)支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合 , 有序集合,散列数据类型 。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好 。
(3)操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值 。
(4)多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息 , 队列使用(Redis原生支持发布/订阅) , 任何短暂的数据,应用程序 , 如Web应用程序会话,网页命中计数等 。

推荐阅读