Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

    更多介绍请参考博客中其他Redis 相关文章,Redis 支持各种语言的客户端,这里主要介绍在Java中使用的Jedis。

概述

    Jedis是一个极小的但很全面的java客户端。

    Jedis很容易使用。

    Jedis完全兼容Redis 2.8及更高版本。

    Jedis的github地址:https://github.com/xetorthio/jedis

Jedis能做什么?

 

  •     排序
  •     连接处理
  •     使用命令操作任意类型的值:string、hash表、list、set、sorted set。
  •     事务
  •     Pipelining
  •     发布/订阅
  •     数据持久化控制命令
  •     远程服务器控制命令
  •     连接池
  •     Sharding (MD5, MurmurHash)
  •     Key-tags for sharding
  •     Sharding with pipelining
  •     Scripting with pipelining
  •     Redis 集群

 

Jedis如何使用?

    可以从 https://github.com/xetorthio/jedis/releases 下载jar包,但如果我们使用了Maven,只需要如下操作即可:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

    这里还需要 Apache Commons Pool :

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.0</version>
</dependency>

    创建连接

    Jedis实例不是线程安全的,应尽量避免在不同线程使用同一个Jedis实例。否则,可能会引发奇怪的错误。

    创建很多的Jedis实例意味着有很多的socket和连接,这并不是理想的方式。

    为了解决这些问题,应该使用 JedisPool 。

    JedisPool 是基于 Commons Pool 2 的,可以通过JedisPool 创建多个Jedis实例,这样可以避免那些奇怪的错误,并且性能很好。

    创建JedisPool:

JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");

    使用Jedis实例:

/// Jedis implements Closable. Hence, the jedis instance will be auto-closed after the last statement.
try (Jedis jedis = pool.getResource()) {
  /// ... do stuff here ... for example
  jedis.set("foo", "bar");
  String foobar = jedis.get("foo");
  jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike"); 
  Set<String> sose = jedis.zrange("sose", 0, -1);
}
/// ... when closing your application:
pool.destroy();

   或者这样:

Jedis jedis = null;
try {
  jedis = pool.getResource();
  /// ... do stuff here ... for example
  jedis.set("foo", "bar");
  String foobar = jedis.get("foo");
  jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike"); 
  Set<String> sose = jedis.zrange("sose", 0, -1);
} finally {
  if (jedis != null) {
    jedis.close();
  }
}
/// ... when closing your application:
pool.destroy();