主要学习https://github.com/thinkgem/jeesite。一下代码均参考于此并稍作修改。

1.jedis

首先,需要添加jedis:

<!--jedis-->
<dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.8.0</version>
</dependency>

2.applicationContext-jedis.xml

然后,springmvc完成基本配置。添加jedispool的bean即可。在spring容器中添加applicationContext-jedis.xml:

在applicationContext-jedis.xml中添加:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    <!-- 加载配置属性文件 -->
    <context:property-placeholder ignore-unresolvable="true" location="classpath:db.properties" />

    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="300"/> <!--最大能够保持idel状态的对象数-->
        <property name="maxTotal" value="60000"/><!--最大分配的对象数-->
        <property name="testOnBorrow" value="true"/><!--当调用borrow Oject方法时,是否进行有效性检查-->
    </bean>

    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg index="0" ref="jedisPoolConfig"/>
        <constructor-arg index="1" value="${redis.host}"/>
        <constructor-arg index="2" value="${redis.port}" type="int"/>
        <constructor-arg index="3" value="${redis.timeout}" type="int"/>
        <constructor-arg index="4" value="${redis.auth}"/>
    </bean>
</beans>

注解:参考的源码中的jedisPool配置只有三个参数:config,host,port。我复制后的结果总是getResource失败,因为我的redis添加了auth,所以猜测是不是没通过auth的原因。于是打开JedisPool的源码:

  1 package redis.clients.jedis;
  2 
  3 import java.net.URI;
  4 
  5 import org.apache.commons.pool2.impl.GenericObjectPool;
  6 import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
  7 
  8 import redis.clients.jedis.exceptions.JedisException;
  9 import redis.clients.util.JedisURIHelper;
 10 import redis.clients.util.Pool;
 11 
 12 public class JedisPool extends Pool<Jedis> {
 13 
 14   public JedisPool() {
 15     this(Protocol.DEFAULT_HOST, Protocol.DEFAULT_PORT);
 16   }
 17 
 18   public JedisPool(final GenericObjectPoolConfig poolConfig, final String host) {
 19     this(poolConfig, host, Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, null,
 20         Protocol.DEFAULT_DATABASE, null);
 21   }
 22 
 23   public JedisPool(String host, int port) {
 24     this(new GenericObjectPoolConfig(), host, port, Protocol.DEFAULT_TIMEOUT, null,
 25         Protocol.DEFAULT_DATABASE, null);
 26   }
 27 
 28   public JedisPool(final String host) {
 29     URI uri = URI.create(host);
 30     if (JedisURIHelper.isValid(uri)) {
 31       String h = uri.getHost();
 32       int port = uri.getPort();
 33       String password = JedisURIHelper.getPassword(uri);
 34       int database = JedisURIHelper.getDBIndex(uri);
 35       this.internalPool = new GenericObjectPool<Jedis>(new JedisFactory(h, port,
 36           Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, password, database, null),
 37           new GenericObjectPoolConfig());
 38     } else {
 39       this.internalPool = new GenericObjectPool<Jedis>(new JedisFactory(host,
 40           Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, null,
 41           Protocol.DEFAULT_DATABASE, null), new GenericObjectPoolConfig());
 42     }
 43   }
 44 
 45   public JedisPool(final URI uri) {
 46     this(new GenericObjectPoolConfig(), uri, Protocol.DEFAULT_TIMEOUT);
 47   }
 48 
 49   public JedisPool(final URI uri, final int timeout) {
 50     this(new GenericObjectPoolConfig(), uri, timeout);
 51   }
 52 
 53   public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port,
 54       int timeout, final String password) {
 55     this(poolConfig, host, port, timeout, password, Protocol.DEFAULT_DATABASE, null);
 56   }
 57 
 58   public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port) {
 59     this(poolConfig, host, port, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null);
 60   }
 61 
 62   public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port,
 63       final int timeout) {
 64     this(poolConfig, host, port, timeout, null, Protocol.DEFAULT_DATABASE, null);
 65   }
 66 
 67   public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port,
 68       int timeout, final String password, final int database) {
 69     this(poolConfig, host, port, timeout, password, database, null);
 70   }
 71 
 72   public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port,
 73       int timeout, final String password, final int database, final String clientName) {
 74     this(poolConfig, host, port, timeout, timeout, password, database, clientName);
 75   }
 76 
 77   public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port,
 78       final int connectionTimeout, final int soTimeout, final String password, final int database,
 79       final String clientName) {
 80     super(poolConfig, new JedisFactory(host, port, connectionTimeout, soTimeout, password,
 81         database, clientName));
 82   }
 83 
 84   public JedisPool(final GenericObjectPoolConfig poolConfig, final URI uri) {
 85     this(poolConfig, uri, Protocol.DEFAULT_TIMEOUT);
 86   }
 87 
 88   public JedisPool(final GenericObjectPoolConfig poolConfig, final URI uri, final int timeout) {
 89     this(poolConfig, uri, timeout, timeout);
 90   }
 91 
 92   public JedisPool(final GenericObjectPoolConfig poolConfig, final URI uri,
 93       final int connectionTimeout, final int soTimeout) {
 94     super(poolConfig, new JedisFactory(uri, connectionTimeout, soTimeout, null));
 95   }
 96 
 97   @Override
 98   public Jedis getResource() {
 99     Jedis jedis = super.getResource();
100     jedis.setDataSource(this);
101     return jedis;
102   }
103 
104   /**
105    * @deprecated starting from Jedis 3.0 this method will not be exposed.
106    * Resource cleanup should be done using @see {@link redis.clients.jedis.Jedis#close()}
107    */
108   @Override
109   @Deprecated
110   public void returnBrokenResource(final Jedis resource) {
111     if (resource != null) {
112       returnBrokenResourceObject(resource);
113     }
114   }
115 
116   /**
117    * @deprecated starting from Jedis 3.0 this method will not be exposed.
118    * Resource cleanup should be done using @see {@link redis.clients.jedis.Jedis#close()}
119    */
120   @Override
121   @Deprecated
122   public void returnResource(final Jedis resource) {
123     if (resource != null) {
124       try {
125         resource.resetState();
126         returnResourceObject(resource);
127       } catch (Exception e) {
128         returnBrokenResource(resource);
129         throw new JedisException("Could not return the resource to the pool", e);
130       }
131     }
132   }
133 }
View Code

相关文章: