Rdis客户端开发API包的介绍

news/2024/5/18 16:07:21 标签: api, wrapper, spring, redis, bean, jdbc

最近一直在关注开源互联网的几个咚咚。Redis算是其中一个,算是对原有memcache的替换。

 

转一篇关于Redis Java客户端的文章.http://www.cnblogs.com/redcreen/archive/2011/02/16/1955844.html

 

redis主页上列出的java 客户端有JDBC-Redis JRedis Jedis三种,下面分别介绍三种客户端的优缺点及其他相关的工具.

支持redis版本性能维护推荐
JDBC-Redis not good  
JRedis1.2.n release
2.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);     
上面的方法可能已经调整,请参见最新的 http://static.springsource.org/spring-data/data-keyvalue/docs/1.0.0.M2/reference/html/#redis

放弃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 awesome Ohm. 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

 

 


http://www.niftyadmin.cn/n/1054670.html

相关文章

并行计算与分布式计算

主要内容来自维基百科 先上一张图大略直观感受一下&#xff1a; 分布式系统是联网计算机组&#xff0c;其工作目标相同。术语“ 并发计算 ”&#xff0c;“ 并行计算 ”和“分布式计算”有很多重叠&#xff0c;它们之间没有明显的区别。[15]同一系统可以表征为“并行”和“分布…

class path resource [applicationContext.xml] cannot be opened because it does not exist

1.建maven项目 2.在pom中添加依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.0.0.RELEASE</version></dependency><dependency>&l…

基于jQuery,bootstrap的bootstrapValidator的学习(一)

bootstrap&#xff1a;能够增加兼容性的强大框架. 因为移动端项目需要数据验证&#xff0c;就开始学习了bootstrapValidator 。 1.需要引用的文件&#xff1a; css&#xff1a; bootstrap.min.css bootstrapValidator.min.css js: jquery-2.1.4.min.js bootstrap.min.js bootst…

MySQL NDB 6.3.20集群安装

转一份MySQL集群部署的博客 http://ginge.iteye.com/blog/320205 引言&#xff1a; 本文会先对MySQL集群稍作一点介绍&#xff0c;然后会提供一个安装过程。 介绍&#xff1a; MySQL集群是一种在无共享架构系统里应用内存数据库集群的技术。这种无共享的架构可以使得系统使用…

ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler)

本文通过一张图来看一下路由的配置以及请求处理的机制。&#xff08;ASP.NET Core 系列目录&#xff09; 一、概述 路由主要有两个主要功能&#xff1a; 将请求的URL与已定义的路由进行匹配&#xff0c;找到该URL对应的处理程序并传入该请求进行处理。根据已定义的路由生成URL这…

Lua 错误处理方法

虽然我们把Lua当作解释型语言&#xff0c; 但是Lua会首先把代码预编译成中间码然后再执行&#xff08;很多解释型语言都是这么做的&#xff09;。在解释型语言中存在编译阶段听起来不合适&#xff0c;然而&#xff0c;解释型语言的特征不在于他们是否被编译&#xff0c;而是编译…

css样式占位和不占位隐藏元素的方法

不占位隐藏&#xff1a;display:none; 占位隐藏&#xff1a;visibility:hidden; 转载于:https://www.cnblogs.com/ljblog/p/7878315.html

geohash的代码及讲解

网上一篇关于geohash的文章 代码可以引用这里&#xff1a;http://code.google.com/p/geospatialweb/source/browse/trunk/geohash/src/Geohash.java?r104 import java.util.BitSet; import java.util.HashMap; public class Geohash { private static int numbits 6 * …