十. 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.
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
相关推荐
Redis Java client
java.lang.NoSuchMethodError: redis.clients.jedis.ScanResult.getStringCursor()Ljava/lang/String; at org.crazycake.shiro.WorkAloneRedisManager.keys(WorkAloneRedisManager.java:149) at org.crazycake....
Redis支持很多编程语言的客户端,有C、C#、C++、Clojure、Common Lisp、Erlang、Go、Lua、...Redis官方列出的Java客户端也有少,有Jedis、JRedis、JDBC-Redis、RJC等,当然,Jedis是Redis官方首选的Java客户端开发包。
了解如何在.NET、Java、Python等平台上集成Redis客户端库,以及如何在代码中调用Redis操作,是开发者必备的技能。 10. **最佳实践**:使用Redis时,遵循最佳实践可以避免常见问题,例如避免使用过多的键,定期清理...
- 哈希表操作:`client.hset("hashKey", "field", "value")`,`client.hget("hashKey", "field")`。 - 列表操作:`client.lpush("listKey", "item")`,`client.lrange("listKey", 0, -1)`。 - 集合操作:`client....
jmeter插件,jmeter-plugins-redis-0.3.jar,通过jmeter自动取redis
Redis是一款高性能的键值数据库,常用于缓存和消息中间件。本项目将这三者结合,实现了一个基于MQTT的设备消息处理系统,通过Spring Boot进行服务端的管理和控制,并利用Redis存储和分发消息。 首先,让我们详细...
5. Redis Java Client Profile 从文件名"redis-java-client-profile-master"推测,这可能是一个测试或基准测试项目,用于比较这些客户端在不同条件下的性能和伸缩性。这个项目可能包含了测试代码、配置和结果分析,...
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
- 客户端库:Redis支持多种编程语言的客户端,如Java的Jedis,Python的redis-py,Node.js的ioredis等,方便开发者进行交互。 - 客户端连接管理:包括连接池、命令缓冲、命令重试等机制,确保高效稳定地与Redis...
Java链接Redis实例是将Java应用程序与Redis键值存储系统进行交互的过程。Redis是一个高性能的、开源的内存数据结构服务器,常用于数据库、缓存和消息中间件的角色。在Java中,我们通常使用Jedis或Lettuce库来连接并...
当前版本与以下两者兼容: socket.io-redis@5 ( socket.io@2 ) socket.io-redis@6 ( socket.io@3 & socket.io@4 ) 表中的内容如何使用普通JS 打字稿散发备忘单原料药发射器(client [,opts]) 发射器#到...
jedis调用redis源码Demo,直接导入工程就可以运行。 redis目录下有redis安装文件和入门电子书 redis64-2.8.9.zip redisbin_x32.zip ...// client.delTest(); System.out.println(jedis.dbSize()); } }
很好地redis管理软件 redis client
### Redis Java项目配置详解 #### 一、Redis与Java项目的集成概述 在现代软件开发中,Redis作为一种高性能的键值存储数据库,在缓存、消息队列处理等方面具有广泛的应用。对于Java开发者而言,如何有效地将Redis...
同时,由于redis-client是基于Java开发的,所以你需要在你的计算机上安装JDK(Java Development Kit)5.0或更高版本。JDK不仅包含了Java运行环境(JRE),还提供了编译、调试和部署Java应用的工具,是运行此客户端的...
- **Jedis等客户端库**:除了桌面客户端,开发者还可以使用各种编程语言的客户端库与Redis交互,例如Java的Jedis、Python的redis-py等。 综上所述,"redis-desktop-client-master.zip"提供的是一款方便开发者进行...
3. **连接集群**: 配置 Spring 与 Redis 集群的连接时,需要使用 `JedisCluster` 或 `Lettuce` 的 `ClusterClient`。配置方法与单节点类似,但需要提供一组节点的地址而不是单一地址。 4. **注意事项**: 集群模式下...