主要学习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 }