`
yimeng528
  • 浏览: 189848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

十. redis java client

阅读更多

十. redis java client

 

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

 

支持redis版本 性能 维护 推荐
JDBC-Redis   not good    
JRedis 1.2.n release
2.0.0 尚未release版本
fast    
Jedis 2.0.0 release fast actively 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 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

分享到:
评论

相关推荐

    Redis Java client.zip

    Redis Java client

    jedis-3.3.0.jar

    java.lang.NoSuchMethodError: redis.clients.jedis.ScanResult.getStringCursor()Ljava/lang/String; at org.crazycake.shiro.WorkAloneRedisManager.keys(WorkAloneRedisManager.java:149) at org.crazycake....

    redis java client-jedis

    Redis支持很多编程语言的客户端,有C、C#、C++、Clojure、Common Lisp、Erlang、Go、Lua、...Redis官方列出的Java客户端也有少,有Jedis、JRedis、JDBC-Redis、RJC等,当然,Jedis是Redis官方首选的Java客户端开发包。

    redis-client-windows

    了解如何在.NET、Java、Python等平台上集成Redis客户端库,以及如何在代码中调用Redis操作,是开发者必备的技能。 10. **最佳实践**:使用Redis时,遵循最佳实践可以避免常见问题,例如避免使用过多的键,定期清理...

    scala-redis-client_2.9.2-1.15.0.zip

    - 哈希表操作:`client.hset("hashKey", "field", "value")`,`client.hget("hashKey", "field")`。 - 列表操作:`client.lpush("listKey", "item")`,`client.lrange("listKey", 0, -1)`。 - 集合操作:`client....

    jmeter-plugins-redis-0.3.jar

    jmeter插件,jmeter-plugins-redis-0.3.jar,通过jmeter自动取redis

    mqtt+springBoot+redis消息处理,

    Redis是一款高性能的键值数据库,常用于缓存和消息中间件。本项目将这三者结合,实现了一个基于MQTT的设备消息处理系统,通过Spring Boot进行服务端的管理和控制,并利用Redis存储和分发消息。 首先,让我们详细...

    redis-java-client-profile:分布式和线性可伸缩性Redis Java客户端的对比分析

    5. Redis Java Client Profile 从文件名"redis-java-client-profile-master"推测,这可能是一个测试或基准测试项目,用于比较这些客户端在不同条件下的性能和伸缩性。这个项目可能包含了测试代码、配置和结果分析,...

    Redis Java客户端Jedis 2.9.0 jar包(含common-pool2)

    Redis的官方推荐Java客户端——Jedis 此Jar包为Jedis 2.9.0版(2016年7月22日发布) 支持Redis 3.0 (亲测有效) 使用方法: import redis.clients.jedis.Jedis; Jedis jedis = new Jedis("localhost"); jedis.set...

    Java Redis Client GUI Tool.zip

    Java Redis Client GUI Tool

    redis3.0 server+client

    - 客户端库:Redis支持多种编程语言的客户端,如Java的Jedis,Python的redis-py,Node.js的ioredis等,方便开发者进行交互。 - 客户端连接管理:包括连接池、命令缓冲、命令重试等机制,确保高效稳定地与Redis...

    java链接Redis实例

    Java链接Redis实例是将Java应用程序与Redis键值存储系统进行交互的过程。Redis是一个高性能的、开源的内存数据结构服务器,常用于数据库、缓存和消息中间件的角色。在Java中,我们通常使用Jedis或Lettuce库来连接并...

    socket.io-redis-emitter:Socket.IO Redis发射器,允许与另一个Node.js进程中的一组Socket.IO服务器进行通信

    当前版本与以下两者兼容: socket.io-redis@5 ( socket.io@2 ) socket.io-redis@6 ( socket.io@3 & socket.io@4 ) 表中的内容如何使用普通JS 打字稿散发备忘单原料药发射器(client [,opts]) 发射器#到...

    jedis调用redis源码Demo

    jedis调用redis源码Demo,直接导入工程就可以运行。 redis目录下有redis安装文件和入门电子书 redis64-2.8.9.zip redisbin_x32.zip ...// client.delTest(); System.out.println(jedis.dbSize()); } }

    很好地redis管理软件 redis client

    很好地redis管理软件 redis client

    redis-java项目配置手册

    ### Redis Java项目配置详解 #### 一、Redis与Java项目的集成概述 在现代软件开发中,Redis作为一种高性能的键值存储数据库,在缓存、消息队列处理等方面具有广泛的应用。对于Java开发者而言,如何有效地将Redis...

    redis可视化工具

    同时,由于redis-client是基于Java开发的,所以你需要在你的计算机上安装JDK(Java Development Kit)5.0或更高版本。JDK不仅包含了Java运行环境(JRE),还提供了编译、调试和部署Java应用的工具,是运行此客户端的...

    redis桌面客户端redis-desktop-client-master.zip

    - **Jedis等客户端库**:除了桌面客户端,开发者还可以使用各种编程语言的客户端库与Redis交互,例如Java的Jedis、Python的redis-py等。 综上所述,"redis-desktop-client-master.zip"提供的是一款方便开发者进行...

    redis和spring整合,redis集群

    3. **连接集群**: 配置 Spring 与 Redis 集群的连接时,需要使用 `JedisCluster` 或 `Lettuce` 的 `ClusterClient`。配置方法与单节点类似,但需要提供一组节点的地址而不是单一地址。 4. **注意事项**: 集群模式下...

Global site tag (gtag.js) - Google Analytics