Redis是一个基于key/value的系统,如果你打算用Memcached或正在用,那么我建议可以考虑用Redis替换了。
Redis目前最新版本是2.2.4,用着很不错,不过java版本的客户端比较的不给力,所以我自己写了一个,就叫Redis4J吧。
Redis4J是一个以高性能、简单易用为目标的Redis java client,支持当前Reids 2.0之后的版本,使用二进制协议实现,通信层使用了基于java nio的Netty框架。
经过与Redis.io上面推荐的客户端(JRedis、Jedis)做过对比后,个人认为要优于它们,因此以开源的方式发布出来,欢迎大家试用并反馈建议和意见。
代码在这里【https://github.com/srz/RedisClient4Java】,目前还未发布任何正式版本,不过所有的redis功能已经基本完成,junit测试用例也都完成并全部通过测试了,后面的工作主要就是补文档、示例代码等。
关于性能测试,我使用了XMemcached作者写的一个banch框架,具体测试数据可以在上面的网址的wiki里找到,经过分析,我认为Redis从作为缓存使用的角度来看,完全可以替换掉Memcached,因为两者性能基本相当,而Redis提供了更为丰富的功能,对各种列表、集合等数据结构提供了方便的支持,更适合缓存复杂的数据,使用也更为灵活。
Redis目前最新版本是2.2.4,用着很不错,不过java版本的客户端比较的不给力,所以我自己写了一个,就叫Redis4J吧。
Redis4J是一个以高性能、简单易用为目标的Redis java client,支持当前Reids 2.0之后的版本,使用二进制协议实现,通信层使用了基于java nio的Netty框架。
经过与Redis.io上面推荐的客户端(JRedis、Jedis)做过对比后,个人认为要优于它们,因此以开源的方式发布出来,欢迎大家试用并反馈建议和意见。
代码在这里【https://github.com/srz/RedisClient4Java】,目前还未发布任何正式版本,不过所有的redis功能已经基本完成,junit测试用例也都完成并全部通过测试了,后面的工作主要就是补文档、示例代码等。
关于性能测试,我使用了XMemcached作者写的一个banch框架,具体测试数据可以在上面的网址的wiki里找到,经过分析,我认为Redis从作为缓存使用的角度来看,完全可以替换掉Memcached,因为两者性能基本相当,而Redis提供了更为丰富的功能,对各种列表、集合等数据结构提供了方便的支持,更适合缓存复杂的数据,使用也更为灵活。
能不能不要使用 netty 框架?直接使用 NIO?这样可以保证框架依赖性最小。
从技术角度来说肯定没问题的,不过站在巨人的肩膀上总会看的更远,毕竟java nio的api不太易用,需要考虑socket的很多细节,而netty又是一个成熟且性能不错的框架,所以我选择了netty,可以最大的减少整个项目的bug。
你说的框架依赖最小的问题,我也考虑了,在开发这个项目的时候能不引用的jar包我都没有引用,比如log4j之类的基础包我都没有引用。而netty本身也是这样,它除了依赖jdk,别的没什么依赖了。
哈哈,你看的还挺细的,这部分我有些偷懒了,当初这样做主要是因为redis支持的函数太多了,就没另写一份接口,我还是加上void版的接口吧,呵呵。
你的说法也很对,我考虑一下吧,也实现用户自己配置自己喜欢的log方式。不过我认为这种功能属于锦上添花吧。
比c客户端, hiredis 的10000 差1个数量级, 同样的网络环境。后定位到RedisInputStream.readLine() 方法慢导致。
static int repeats = 40000;// 每个线程循环执行的次数
static int corePoolSize = 1;// 测试程序启动的工作线程数
static int dataLength = 200;// 数据长度,单位byte
跑下来 tps 1617。和我用jedis一个水平,比hiredis 这种c 客户端慢很多。后者至少1万多,同样跨网络环境下。你自己跑的BenchOfRedis4j 单线程,tps多少呢?