NingG +

Spring整合Redis

几点:

详细信息参考:Simple Web DEMO

Spring Data Redis官网

官网地址:Spring Data Redis - 官网,特别说明,页面右侧有Reference文档,值得好好读读。

Maven中配置

利用spring-data-redis模块,实现Spring与Redis之间的集成,具体,在pom.xml中添加依赖:

<dependencies>
	<dependency>
		<groupId>org.springframework.data</groupId>
		<artifactId>spring-data-redis</artifactId>
		<version>1.5.0.RELEASE</version>
	</dependency>
</dependencies>

Spring中配置Bean

在Spring配置文件中,添加如下bean配置:

<bean id="jedisConnFactory" 
	class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 
	p:use-pool="true"/>

<!-- redis template definition -->
<bean id="redisTemplate" 
	class="org.springframework.data.redis.core.RedisTemplate" 
	p:connection-factory-ref="jedisConnFactory"/>

几个疑问:

注:使用Maven来管理工程,能够方便的查看JedisConnectionFactory的源码,其中对应的属性、构造函数等,包含的信息丰富。

实际配置

下文将列出,实际场景中自己的配置。几点:

Maven中配置

pom.xml中配置依赖:

<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-redis</artifactId>
	<version>1.5.0.RELEASE</version>
</dependency>

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.6.2</version>
</dependency>

配置Redis数据源

在Spring的配置文件中,添加bean,以实现对Redis数据源的配置,具体如下:

<!-- 配置Sentinel,spring-data-redis 1.5.0开始支持此配置 -->
<bean id="sentinelConfig"
	class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
	<constructor-arg name="master" value="mymaster" />
	<constructor-arg name="sentinelHostAndPorts">
		<set>
			<value>168.7.2.165:26379</value>
			<value>168.7.2.166:26379</value>
			<value>168.7.2.167:26379</value>
		</set>
	</constructor-arg>
</bean>

<!-- 配置redis池,依次为最大实例数,最大空闲实例数,(创建实例时)最大等待时间,(创建实例时)是否验证 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
	<property name="maxTotal" value="500" />
	<property name="maxIdle" value="50" />
	<property name="minIdle" value="5" />
	<property name="maxWaitMillis" value="2000" />
	<property name="testOnBorrow" value="true" />
</bean>

<!-- redis连接配置,依次为数据库,是否使用池,(usePool=true时)redis的池配置 -->
<bean id="jedisFactory"
	class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
	<property name="database" value="0"></property>
	<property name="usePool" value="true" />
	<constructor-arg name="sentinelConfig" ref="sentinelConfig" />
	<constructor-arg name="poolConfig" ref="jedisPoolConfig" />
</bean>

<!-- redis模板配置 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
	<property name="connectionFactory" ref="jedisFactory" />
	<property name="defaultSerializer">
		<bean
			class="org.springframework.data.redis.serializer.StringRedisSerializer" />
	</property>
</bean>

思考:Spring的配置文件中,bean的配置规范:

操作Redis

在上述配置条件下,通过IoC机制,可以直接操作Redis,简单举个例子:

@Resource(name = "redisTemplate")
private RedisTemplate<String, Object> redisTemplate;

@Override
public String get(String key) {
	String result = (String)redisTemplate.opsForValue().get(key);
	return result;
}

@Override
public String hget(String key, String field) {
	String result = (String) redisTemplate.opsForHash().get(key, field);
	return result;
}

@Override
public List<Object> multiGet(String key, Collection<Object> listOfFields) {
	List<Object> resultOfList = redisTemplate.opsForHash().multiGet(key, listOfFields);
	return resultOfList;
}

参考来源

Top