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:


1

2

3

4

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 wrapperbean 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中获取,解决方案:

设置


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<!-- 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

时间: 2024-11-08 21:22:49

Redis资料汇总(十) java client的相关文章

Redis资料汇总专题(转)

原文:Redis资料汇总专题 很多朋友反映,说NoSQLFan上的资料不少,但是要找到自己实用的太难,于是萌生做这样一个专题的想法.通过将不同NoSQL产品从入门到精通的各种资料进行汇总,希望能够让大家更快的找到适合自己的教程或文章进行阅读. 最后更新时间:2013-04-22 1.Redis是什么? 十五分钟介绍 Redis数据结构 Redis系统性介绍 一个很棒的Redis介绍PPT 强烈推荐!非同一般的Redis介绍 Redis之七种武器 锋利的Redis redis 适用场景与实现 [翻

redis资料汇总

redis资源比较零散,引用nosqlfan上的文章,方便大家需要时翻阅.大家看完所有的,如果整理出文章的,麻烦知会一下,方便学习. 1.Redis是什么? 十五分钟介绍 Redis数据结构 Redis系统性介绍 一个很棒的Redis介绍PPT 强烈推荐!非同一般的Redis介绍 Redis之七种武器 锋利的Redis redis 适用场景与实现 [翻译]Redis协议 2.Redis内部实现 Redis源码分析系列文章 Redis运行流程源码解析 Redis 2.6 Lua 脚本功能实现分析

Redis资料汇总(六) 发布订阅

发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似. pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合.redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能.订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel).当发布者通过publish命令

Redis资料汇总(四) 事务

edis对事务的支持目前还比较简单.redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的 命令. 由于redis是单线程来处理所有client的请求的所以做到这点是很容易的.一般情况下redis在接受到一个client发来的命令后会立即处理并 返回处理结果,但是当一个client在一个连接中发出multi命令有,这个连接会进入一个事务上下文,该连接后续的命令并不是立即执行,而是先放到一 个队列中.当从此连接受到exec命令后,redis会顺序的执行

Redis资料汇总(八) 主从复制

redis主从复制配置和使用都非常简单.通过主从复制可以允许多个slave server拥有和master server相同的数据库副本.下面是关于redis主从复制的一些特点 1.master可以有多个slave 2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构 3.主从复制不会阻塞master.也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求.相反slave在初次同步数据时则会阻塞不能

Redis资料汇总(九) 虚拟内存

首先说明下redis的虚拟内存与os的虚拟内存不是一码事,但是思路和目的都是相同的.就是暂时把不经常访问的 数据从内存交换到磁盘中,从而腾出 宝贵的 内存空间用于其他需要访问的数据.尤其是对于redis这样的内存数据库,内存总是不够用的.除了可以将数据分割到多个redis server外.另外的能够提高数据库容量的办法就是使用vm把那些不经常访问的数据交换的磁盘上.如果我们的存储的数据总是有少部分数据被经常访问,大 部分数据很少被访问,对于网站来说确实总是只有少量用户经常活跃.当少量数据被经常访

Redis资料汇总(七) 持久化

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化. redis支持两种持久化方式,一种是 Snapshotting(快照)也是默认方式,另一种是Append-only file(缩写aof)的方式.下面分别介绍 Snapshotting 快照是默认的持久化方式.这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.可以通过配置设置自动做快照持久 化的方式.我们可以配置redis在n秒内如果超过m个key被修

Redis资料汇总(五) redis pipeline

redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常 会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client.基本的通信过程如下 Client: INCR X Server: 1 Client: INCR X Server: 2 Client: INCR X Server: 3 Client: INCR X Server: 4

Redis资料汇总(一) 环境搭建

1.简介 redis是一个开源的key-value数据库.它又经常被认为是一个数据结构服务器.因为它的value不仅包括基本的string类型还有 list,set ,sorted set和hash类型.当然这些类型的元素也都是string类型.也就是说list,set这些集合类型也只能包含string 类型.你可以在这些类型上做很多原子性的操作.比如对一个字符value追加字符串(APPEND命令).加加或者减减一个数字字符串(INCR命令,当 然是按整数处理的).可以对list类型进行pus