1.添加依赖包
<!-- springboot整合 redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.yml文件中配置redis连接信息(用于配置文件读取此信息)
redis.host: 10.10.10.10 redis.port: 6379 redis.pool.max-idle: 8 redis.pool.min-idle: 0 redis.keytimeout: 2000 redis.timeout: 2000
3.配置多数据库
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import redis.clients.jedis.JedisPoolConfig; /** * @author yys * Description: * @date created in 9:44 2018-04-25 * Modified by: */ @Configuration public class RedisConfig { @Value("${redis.host}") private String host; @Value("${redis.port}") private int port; @Value("${redis.pool.max-idle}") private int maxIdl; @Value("${redis.pool.min-idle}") private int minIdl; @Value("${redis.keytimeout}") private long keytimeout; @Value("${redis.timeout}") private int timeout; @Bean public RedisConnectionFactory redisConnectionFactory(){ JedisPoolConfig poolConfig=new JedisPoolConfig(); poolConfig.setMaxIdle(maxIdl); poolConfig.setMinIdle(minIdl); poolConfig.setTestOnBorrow(true); poolConfig.setTestOnReturn(true); poolConfig.setTestWhileIdle(true); poolConfig.setNumTestsPerEvictionRun(10); poolConfig.setTimeBetweenEvictionRunsMillis(60000); JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(poolConfig); jedisConnectionFactory.setHostName(host); jedisConnectionFactory.setPort(port); jedisConnectionFactory.setDatabase(0);//编号为0的shu'j return jedisConnectionFactory; } @Bean public RedisConnectionFactory redisConnectionFactory2(){ JedisPoolConfig poolConfig=new JedisPoolConfig(); poolConfig.setMaxIdle(maxIdl); poolConfig.setMinIdle(minIdl); poolConfig.setTestOnBorrow(true); poolConfig.setTestOnReturn(true); poolConfig.setTestWhileIdle(true); poolConfig.setNumTestsPerEvictionRun(10); poolConfig.setTimeBetweenEvictionRunsMillis(60000); JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(poolConfig); jedisConnectionFactory.setHostName(host); jedisConnectionFactory.setPort(port); jedisConnectionFactory.setDatabase(1);//编号为1的数据库
return jedisConnectionFactory;} @Bean public RedisConnectionFactory redisConnectionFactory3(){ JedisPoolConfig poolConfig= new JedisPoolConfig() ; poolConfig.setMaxIdle( maxIdl) ; poolConfig.setMinIdle( minIdl) ; poolConfig.setTestOnBorrow( true) ; poolConfig.setTestOnReturn( true) ; poolConfig.setTestWhileIdle( true) ; poolConfig.setNumTestsPerEvictionRun( 10) ; poolConfig.setTimeBetweenEvictionRunsMillis( 60000) ; JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(poolConfig) ; jedisConnectionFactory.setHostName( host) ; jedisConnectionFactory.setPort( port) ; jedisConnectionFactory.setDatabase( 3) ;//编号为3的数据库
return jedisConnectionFactory ; } @Bean( name = "redisTemplateUser")
//此处注意定义的bean要注入到相应的service中使用 只有对应service才能处理对应的数据库public RedisTemplate<String , Object> redisTemplateObject1() throws Exception { RedisTemplate<String , Object> redisTemplateObject = new RedisTemplate<String , Object>() ; redisTemplateObject.setConnectionFactory(redisConnectionFactory()) ; setSerializer(redisTemplateObject) ; redisTemplateObject.afterPropertiesSet() ; return redisTemplateObject ; } @Bean( name = "redisTemplateLoginRecord")
//此处注意定义的bean要注入到相应的service中使用 只有对应service才能处理对应的数据库public RedisTemplate<String , Object> redisTemplateObject2() throws Exception { RedisTemplate<String , Object> redisTemplateObject = new RedisTemplate<String , Object>() ; redisTemplateObject.setConnectionFactory(redisConnectionFactory2()) ; setSerializer(redisTemplateObject) ; redisTemplateObject.afterPropertiesSet() ; return redisTemplateObject ; } @Bean( name = "redisTemplateMealTime")
//此处注意定义的bean要注入到相应的service中使用 只有对应service才能处理对应的数据库public RedisTemplate<String , Object> redisTemplateObject3() throws Exception { RedisTemplate<String , Object> redisTemplateObject = new RedisTemplate<String , Object>() ; redisTemplateObject.setConnectionFactory(redisConnectionFactory3()) ; setSerializer(redisTemplateObject) ; redisTemplateObject.afterPropertiesSet() ; return redisTemplateObject ; } private void setSerializer(RedisTemplate<String , Object> template) { Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>( Object. class) ; ObjectMapper om = new ObjectMapper() ; om.setVisibility(PropertyAccessor. ALL , JsonAutoDetect.Visibility. ANY) ; om.enableDefaultTyping(ObjectMapper.DefaultTyping. NON_FINAL) ; jackson2JsonRedisSerializer.setObjectMapper(om) ; template.setKeySerializer(template.getStringSerializer()) ; template.setValueSerializer(jackson2JsonRedisSerializer) ; template.setHashValueSerializer(jackson2JsonRedisSerializer) ; //在使用String的数据结构的时候使用这个来更改序列化方式 /*RedisSerializer<String> stringSerializer = new StringRedisSerializer(); template.setKeySerializer(stringSerializer ); template.setValueSerializer(stringSerializer ); template.setHashKeySerializer(stringSerializer ); template.setHashValueSerializer(stringSerializer );*/ }}
4.注入多类型service中使用
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.*; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.Serializable; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; /** * @author yys * Description: * @date created in 10:01 2018-03-28 * Modified by: */ @Service public class RedisLoginRecordService { @Autowired @Resource(name = "redisTemplateLoginRecord") private RedisTemplate redisTemplate; /** * 写入缓存 * @param key * @param value * @return */ public boolean set(final String key, Object value) { boolean result = false; try { ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); operations.set(key, value); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } /** * 写入缓存设置时效时间 * @param key * @param value * @return */ public boolean set(final String key, Object value, Long expireTime) { boolean result = false; try { ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); operations.set(key, value); redisTemplate.expire(key, expireTime, TimeUnit.SECONDS); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } /** * 批量删除对应的value * @param keys */ public void remove(final String... keys) { for (String key : keys) { remove(key); } } /** * 批量删除key * @param pattern */ public void removePattern(final String pattern) { Set<Serializable> keys = redisTemplate.keys(pattern); if (keys.size() > 0) redisTemplate.delete(keys); } /** * 删除对应的value * @param key */ public void remove(final String key) { if (exists(key)) { redisTemplate.delete(key); } } /** * 判断缓存中是否有对应的value * @param key * @return */ public boolean exists(final String key) { return redisTemplate.hasKey(key); } /** * 读取缓存 * @param key * @return */ public Object get(final String key) { Object result = null; ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); result = operations.get(key); return result; } /** * 哈希 添加带时效性 * @param key * @param hashKey * @param value */ public boolean hmSetTime(String key, Object hashKey, Object value,Long expireTime){ boolean result = false; try { HashOperations<String, Object, Object> hash = redisTemplate.opsForHash(); hash.put(key,hashKey,value); redisTemplate.expire(key, expireTime, TimeUnit.SECONDS); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } /** * 哈希 添加带时效性 * @param key * @param hashKey * @param value */ public void hmSet(String key, Object hashKey, Object value){ HashOperations<String, Object, Object> hash = redisTemplate.opsForHash(); hash.put(key,hashKey,value); } /** * 哈希获取数据 * @param key * @param hashKey * @return */ public Object hmGet(String key, Object hashKey){ HashOperations<String, Object, Object> hash = redisTemplate.opsForHash(); return hash.get(key,hashKey); } /** * 列表添加 * @param k * @param v */ public void lPush(String k,Object v){ ListOperations<String, Object> list = redisTemplate.opsForList(); list.rightPush(k,v); } /** * 列表获取 * @param k * @param l * @param l1 * @return */ public List<Object> lRange(String k, long l, long l1){ ListOperations<String, Object> list = redisTemplate.opsForList(); return list.range(k,l,l1); } /** * 集合添加 * @param key * @param value */ public void add(String key,Object value){ SetOperations<String, Object> set = redisTemplate.opsForSet(); set.add(key,value); } /** * 集合获取 * @param key * @return */ public Set<Object> setMembers(String key){ SetOperations<String, Object> set = redisTemplate.opsForSet(); return set.members(key); } /** * 有序集合添加 * @param key * @param value * @param scoure */ public void zAdd(String key,Object value,double scoure){ ZSetOperations<String, Object> zset = redisTemplate.opsForZSet(); zset.add(key,value,scoure); } /** * 有序集合获取 * @param key * @param scoure * @param scoure1 * @return */ public Set<Object> rangeByScore(String key,double scoure,double scoure1){ ZSetOperations<String, Object> zset = redisTemplate.opsForZSet(); return zset.rangeByScore(key, scoure, scoure1); } }