spring-boot redis配置多数据库 redisTemplate使用

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);
    }

}

猜你喜欢

转载自blog.csdn.net/u011424470/article/details/80080944