Rdis客户端开发API包的介绍
来源:互联网 发布:网络摄像头破解教程 编辑:程序博客网 时间:2024/05/29 14:35
最近一直在关注开源互联网的几个咚咚。Redis算是其中一个,算是对原有memcache的替换。
转一篇关于Redis Java客户端的文章.http://www.cnblogs.com/redcreen/archive/2011/02/16/1955844.html
redis主页上列出的java 客户端有JDBC-RedisJRedis Jedis三种,下面分别介绍三种客户端的优缺点及其他相关的工具.
支持redis版本性能维护推荐JDBC-Redis not good JRedis1.2.n release2.0.0 尚未release版本fast Jedis2.0.0 releasefastactively developed推荐
JDBC-Redis
JDBC-Redis is just a JDBC wrapper for JRedis database.
If you plan on using your code with different back-ends then JDBC is a good way to go. NOTE: It is not a complete JDBC implementation and the NOSQL will bleed through.
If you are going to stay with Redis then I would suggest using the API, which will give you more flexibility. Use a DAO layer pattern to encapsulate your DB Access and down the road that is all you will need to change.
- Romain Hippeau
Redis syntax is completely different from standard SQL so using JDBC doesn't help encapsulating different back-ends as you suggest: I would have to write new queries anyway... –muriloq Jun 16 '10 at 14:00
@muriloq - but the mechanical acquiring and releasing resources is standard. –Romain Hippeau
spring wrapper
Spring provides a wrapper around both implementations(Jredis Jedis) and they're providing serialization/deserialization, amongst other things:
Person p = new Person("Joe", "Trader", 33);template.convertAndSet("trader:1", p);Person samePerson = template.getAndConvert("trader:1", Person.class);Assert.assertEquals(p, samePerson);
放弃spring wrapper
项目中本来打算使用spring wrapper,出于以下原因最终还是放弃,直接使用Jedis,等有时间在把:
1.spring wrapper的版本是1.0.0.M2,里面有些bug (*)
2.对shard的支持没有jedis好
3.依赖spring3.0(主要是spring3.0 core中的convert及serializer),我们目前大多项目还是采用spring2.5.6(主要)
4.经过多层封装后性能还是会有损耗
spring nosql/cross-store
prototype implementation allowing entities to be stored in multiple types of data stores (i.e. JPA and Neo4j or JPA and Redis etc.)
JOhm
JOhm is a blazingly fast Object-Hash Mapping library for Java inspired by the awesomeOhm. The JOhm OHM is a modern-day avatar of the old ORM's like Hibernate with the difference being that we are not dealing with an RDBMS here but with a NoSQL rockstar.
homepage:https://github.com/xetorthio/johm
jedis pool的问题
在使用jedis pool时遇到了这个问题:It seems like server has closed the connection
原因分析:
1.redis server 关闭了此客户端的连接:server端设置了maxidletime(默认是5分钟),服务端会不断循环检测clinet的最后一次通信时间(lastinteraction),如果大于maxidletime,则关闭连接,并回收相关资源。client在向该连接中写数据后就会由于server端已经关闭而出现 broken pipe的问题。
2.pool的设置错误:
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxActive" value="20" /> <property name="maxIdle" value="10" /> <property name="maxWait" value="1000" /> </bean>
<!-- jedis shard信息配置 --> <bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="*.*.*.*" /> <constructor-arg index="1" value="6379" /> </bean> <!-- jedis shard pool配置 --> <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"> <constructor-arg index="0" ref="jedisPoolConfig" /> <constructor-arg index="1"> <list> <ref bean="jedis.shardInfo" /> </list> </constructor-arg> </bean> <bean id="jedisCommands" factory-bean="shardedJedisPool" factory-method="getResource" />
上面的这种配法在spring初始化时获取一次实例化jedisCommands,而后每次的redis的调用时并未从pool中获取
解决方案:
设置
<!-- POOL配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxActive" value="20" /> <property name="maxIdle" value="10" /> <property name="maxWait" value="1000" /> <property name="testOnBorrow" value="true"/> </bean> <!-- jedis shard信息配置 --> <bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="*.*.*.*" /> <constructor-arg index="1" value="6379" /> </bean> <!-- jedis shard pool配置 --> <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"> <constructor-arg index="0" ref="jedisPoolConfig" /> <constructor-arg index="1"> <list> <ref bean="jedis.shardInfo" /> </list> </constructor-arg> </bean>
参考:
http://stackoverflow.com/questions/3047010/best-redis-library-for-java
https://github.com/xetorthio/johm
https://github.com/xetorthio/jedis/issues/closed#issue/76
- Rdis客户端开发API包的介绍
- Rdis
- rdis和memcache的区别
- 作业:新浪客户端(一)新浪移动开发api介绍
- 【Java邮件开发】4.JavaMail API的简单介绍和jar包准备
- Redis 的 Java 客户端开发包 Jedis
- Jedis(redis的Java客户端开发包)
- Redis C客户端API介绍
- NET下的流程图开发包介绍
- NET下的流程图开发包介绍
- NET下的流程图开发包介绍
- anroid API核心包介绍
- android api包简要介绍
- java 并发包 API介绍
- Windows API的Tcl扩展包TWAPI介绍
- Libnids开发包介绍
- OpenGL开发包介绍
- 网络安全开发包介绍
- Java连接Oracle驱动细节
- 解决VS2005与IE8相冲突的方法
- 求win7旗舰版下载地址
- openSUSE:Specfile guidelines
- TldLocationsCache tldScanJar 内存溢出
- Rdis客户端开发API包的介绍
- 黑马程序员———Java1.5 新特性之枚举
- Java类设计一些原则
- 如何配置 web.xml 正则表达式
- 什么是EAM?定义、原理、核心
- 如何选择网站的锚文本
- PlayBook模拟器的安装与设置
- PeekMessage & GetMessage
- matlab false(N)