APP下载

Spring 极速整合注解 Redis 实践

消息来源:baojiabao.com 作者: 发布时间:2026-05-17

报价宝综合消息Spring 极速整合注解 Redis 实践

1. 新增专案依赖2. 新增 spring-redis-context 配置3. 新增 redis.properties4. 编写自定义 redis 配置类5. 在你喜欢的地方进行注解快取Redis 做为基于内存的 Key-Value 数据库,用来做快取服务器价效比相当高。

官方推出的面向 Java 的 Client Jedis,提供了很多界面和方法,可以让 Java 操作使用 Redis。

Spring 团队对 Jedis 进行了封装,独立为 spring-data-redis 专案,配合 spring 特性并整合 Jedis 的一些命令和方法。

本文重点描述整合过程,能让你迅速的通过 spring-data-redis 将 redis 整合到 spring 专案中,毕竟大家都忙的。

1. 新增专案依赖

org.springframework.data

spring-data-redis

1.8.4.RELEASE

redis.clients

jedis

2.9.0

2. 新增 spring-redis-context 配置

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.xsd">

redis 相关类 Spring 托管

JedisConnectionFactory 为 Jedis 连线工厂,配置由单独抽象的 JedisPoolConfig 提供。

如果你熟悉 Spring 的 JdbcTemplate 物件的话,这里大概能猜出来 RedisTemplate 的作用,RedisTemplate 对 RedisConnection 进行了封装。

提供连线管理,序列化等功能,它对 Redis 的互动进行了更高层次的抽象,极大的方便和简化了 Redis 的操作。

RedisCacheManager 做为 redis 统一的排程和管理者,有兴趣可以反编译源代码看看。

继承自 org.springframework.cache.transaction.AbstractTransactionSupportingCacheManager 并实现 org.springframework.cache.CacheManager。

3. 新增 redis.properties

#============================#

#==== Redis settings ====#

#============================#

#redis 服务器 IP

redis.host=127.0.0.1

#redis 服务器埠

redis.port=6379

#redis 密码

redis.pass=redis#2017

#redis 支援16个数据库(相当于不同使用者)可以使不同的应用程序资料彼此分开同时又储存在相同的例项上

redis.dbIndex=0

#redis 快取资料过期时间单位秒

redis.expiration=3000

#控制一个 pool 最多有多少个状态为 idle 的jedis例项

redis.maxIdle=300

#控制一个 pool 可分配多少个jedis例项

redis.maxActive=600

#当borrow一个jedis例项时,最大的等待时间,如果超过等待时间,则直接丢掷JedisConnectionException;

redis.maxWait=1000

#在borrow一个jedis例项时,是否提前进行alidate操作;如果为true,则得到的jedis例项均是可用的;

redis.testOnBorrow=true

当然配置档案你也可以硬编码到程式中,只是在引数发生改变的时候比较痛苦一点而已。

其中大部分配置项都是围绕着 jedisPool ,如果你对数据库连线池比较熟,你会发现它俩的配置项有点相似。

当系统 redis 遇到问题出现故障时,理解这里的选项是个不错的选择。

更多配置项详解:

http://www.2cto.com/database/201311/254449.html

4. 编写自定义 redis 配置类

@Configuration

@EnableCaching

public class RedisCacheConfig extends CachingConfigurerSupport {

protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);

private volatile JedisConnectionFactory mJedisConnectionFactory;

private volatile RedisTemplate mRedisTemplate;

private volatile RedisCacheManager mRedisCacheManager;

public RedisCacheConfig() {

super();

}

public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate mRedisTemplate, RedisCacheManager mRedisCacheManager) {

super();

this.mJedisConnectionFactory = mJedisConnectionFactory;

this.mRedisTemplate = mRedisTemplate;

this.mRedisCacheManager = mRedisCacheManager;

}

public JedisConnectionFactory redisConnectionFactory() {

return mJedisConnectionFactory;

}

public RedisTemplate redisTemplate(RedisConnectionFactory cf) {

return mRedisTemplate;

}

public CacheManager cacheManager(RedisTemplate, ?> redisTemplate) {

return mRedisCacheManager;

}

@Bean

public KeyGenerator keyGenerator() {

return new KeyGenerator() {

@Override

public Object generate(Object o, Method method, Object... objects) {

StringBuilder sb = new StringBuilder();

sb.append(o.getClass().getName());

sb.append(method.getName());

for (Object obj : objects) {

sb.append(obj.toString());

}

return sb.toString();

}

};

}

}

该配置类继承自 org.springframework.cache.annotation.CachingConfigurerSupport 并实现 org.springframework.cache.annotation.CachingConfigurer 的方法。

通俗一点,该类告诉 spring 当前使用的快取服务为 redis 并自定义了快取 key 生成的规则。

5. 在你喜欢的地方进行注解快取

img

快取一般使用在服务层,在你想快取的方法上面新增相应的注解即可,下面三个快取的注解你得掌握。

@Cacheable spring 会在其被呼叫后将返回值快取起来,以保证下次利用同样的引数来执行该方法时可以直接从快取中获取结果,而不需要再次执行该方法。@CachePut 标注的方法在执行前不会去检查快取中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的快取中。@CacheEvict 用来标注在需要清除快取元素的方法或类上的。当然这些注解里面还有很多其他的属性配置,配合 spring-el 表示式能做的事情还有很多,大概只有你想不到,没有做不到。

在业务规则比较复杂的情况下,快取 key 的设计相当重要,设计出色可以使你的应用飞起来。

整个整合工作就结束了,是不是很简单,上述算是 redis 的冰山一角,还有很多像 redis 路由/分散式/丛集….,有机会实践慢慢体会。

来源:http://t.cn/R37tZ3S

练手专案源代码、新技术介绍、原理性知识应用框架知识点讲解、常见笔试面试题分析,搜寻【芋道源代码】

10w 人已经关注

2020-01-09 13:52:00

相关文章