准备工作
安装redis最新4.0.6或者以前版本,尽量安装在linux上,并开启服务。教程很多,不再赘述。
在JAVASE 可以使用最新Jedis 2.9.0或之前版本。与数据库连接池相同,单例实例化JedisPool,从中getSource()获取Jedis实例。
本文主旨记录,springMVC或者SpringBoot整合Redis
SpringBoot整合Redis
pom.xml中引入redis依赖,使用版本1.5.2:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
在resources中配置application.properties,自动创建JedisConnectionFactory
# Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=3 # 连接超时时间(毫秒) spring.redis.timeout=2000
以上工作完成后,就要获取RedisTemplate对象,SpringBoot已经自动配置此对象,需要直接Autowire便可使用。在spring.redis.core中有许多数据模型,使用StringRedisTemplate对Map<String,String>操作是比较方便的,客户端不会出现/Xe/XA序列化加密形式的存储,方便后台维护。通过valOps进行set/get操作,具体代码见下:
@Autowired
private StringRedisTemplate<Object, Object> stringRedisTemplate;
@Resource(name=“stringRedisTemplate”)
private ValueOperations<Object,Object> valOps;
但存储不一定都只会使用String类型变量,所以需要重新定义RedisTemplate,使key使用StringRedisSerializer序列化,value使用Jackson2JsonRedisSerializer序列化
@Configuration public class configuration { @Bean public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory factory){ RedisTemplate<Object,Object> template=new RedisTemplate<Object, Object>(); template.setConnectionFactory(factory); Jackson2JsonRedisSerializer valueSerializer=new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om=new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); valueSerializer.setObjectMapper(om); template.setValueSerializer(valueSerializer); template.setKeySerializer(new StringRedisSerializer());
return template; } }
在UserDao中,注入redisTemplate对象,可使用不同的类,比如HashOperation/SetOperation/ZSetOperation/ListOperation四大基本类型的操作和一些redis操作。ValueOperation提供get set 和multiget multiset等操作,但若需要事物或者删除操作,需要获取valOps.getOperation()再进行操作。
@Autowired private RedisTemplate<Object, Object> redisTemplate; @Resource(name="redisTemplate") private ValueOperations<Object,Object> valOps;
SpringMVC整合Redis
在springMvc进行整合,只是将RedisConnectionFactory通过配置文件进行实例化,配置文件与application.properties相同。只需在上面配置类里加上JedisConnectionFactory注入代码,见下:
@Value("${spring.redis.database}")
private int dateBase;
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.pool.max-active}")
private int maxTotal;
@Value("${spring.redis.pool.max-wait}")
private int maxWait;
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.timeout}")
private int timeout;
@Bean
JedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setDatabase(dateBase);
factory.setHostName(host);
factory.setPort(port);
factory.setPassword(password);
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxWaitMillis(maxWait);
poolConfig.setMaxTotal(maxTotal);
factory.setPoolConfig(poolConfig);
factory.setTimeout(timeout);
return factory;
}