Spring 集成 Redis

本贴最后更新于 2406 天前,其中的信息可能已经渤澥桑田

使用 redisTemplate 的一些坑。

redisTemplate 配置:

<bean id="redisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
	<property name="maxTotal" value="${redis.pool.max.active}" />
	<property name="maxIdle" value="${redis.pool.max.idle}" />
	<property name="maxWaitMillis" value="${redis.pool.max.wait}" />
	<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
	<property name="testWhileIdle" value="${redis.pool.testWhileIdle}" />
	<property name="testOnReturn" value="${redis.pool.testOnReturn}" />
	<property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}" />
</bean>

<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
	<property name="hostName" value="${redis.host}" />
	<property name="port" value="${redis.port}" />
	<property name="password" value="${redis.password}" />
	<property name="usePool" value="true" />
	<property name="poolConfig" ref="redisPoolConfig" />
	<property name="timeout" value="${redis.timeout}" />
</bean>

<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" />

<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
	<qualifier value="redis"/>
	<property name="connectionFactory" ref="redisConnectionFactory" />
	<!-- 如果不配置Serializer,那么存储的时候智能使用String,如果用User类型存储,那么会提示错误User can't cast to String -->		
	<property name="keySerializer">
		<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
	</property>
	<property name="valueSerializer">
		<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
	</property>
</bean>

Java代码

	@Resource
	private RedisTemplate<String, Serializable> redisTemplate;
	
	public void add(String key, Serializable obj, long timeout, TimeUnit timeUnit) {
		if(redisTemplate.hasKey(key)){
			delete(key);
		}
		redisTemplate.opsForValue().set(key, obj, timeout, timeUnit);
	}

	public Serializable get(String key) {
		return redisTemplate.opsForValue().get(key);
	}

	public void delete(String key) {
		redisTemplate.delete(key);
	}

入坑点:

  • 1.redisTemplate 的注入,不能用 @Autowired,要用 @Resource,因为配置中是 id="redisTemplate"的 bean,@Resource 是优先按 name 注入的!!!
  • 2.关于序列化问题,坑爹的我在 redis 中手动存了个 key,然后忘了删除,而程序调用该 key 就报错,因为程序存入的是序列化后的值!!!
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 184 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone

    [em02] 踩一踩,猜猜我是谁