package com.example.demo.config;

import java.io.Serializable;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
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.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis配置文件
 * @author 程就人生
 * @date 2019年12月24日
 */
@Configuration
@EnableCaching //启动缓存机制
public class SRedisConfig extends CachingConfigurerSupport {

	/**
     * 配置lettuce连接池(多数据源的公共参数)
     * GenericObjectPoolConfig不是线程安全的
     * @return
     */
    @SuppressWarnings("rawtypes")
    @Bean
    @ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
    public GenericObjectPoolConfig redisPool() {
        return new GenericObjectPoolConfig<>();
    }

    /**
     * 配置数据源,从配置文件中读取
     *
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis")
    public RedisStandaloneConfiguration redisConfig() {
        return new RedisStandaloneConfiguration();
    }
	
	@SuppressWarnings("rawtypes")
	@Bean("factory")
	public JedisConnectionFactory factory(GenericObjectPoolConfig config, RedisStandaloneConfiguration redisConfig) {		
		JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
        jpcb.poolConfig(config);
        return new JedisConnectionFactory(redisConfig, jpcb.build());
	}
	
	@Bean("redisTemplate")
    public RedisTemplate<Serializable, Serializable> redisTemplate(RedisConnectionFactory factory) {
        
        RedisTemplate<Serializable, Serializable> template = new RedisTemplate<>();
      
        template.setConnectionFactory(factory);
    
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
          
        template.setValueSerializer(new JdkSerializationRedisSerializer());
          
        template.setHashKeySerializer(new StringRedisSerializer());
          
        template.setHashValueSerializer(new JdkSerializationRedisSerializer());
        
        //开启事务
        template.setEnableTransactionSupport(true);
          
        template.afterPropertiesSet();
        
        return template;
    }

}
最近下载更多
hellozui  LV11 7月24日
唐唐丶  LV34 2023年11月14日
西海岸之光  LV1 2022年12月30日
xiaoyuer2  LV8 2022年11月22日
飞梦ff  LV8 2021年9月17日
whfuai  LV14 2021年7月28日
shiopaaa  LV13 2021年3月9日
build138  LV20 2020年12月22日
lcl20181212  LV3 2020年11月28日
Xuan Minister  LV10 2020年9月17日
最近浏览更多
hellozui  LV11 7月24日
唐唐丶  LV34 2023年11月14日
漫步的海星  LV4 2023年9月21日
woldxy  LV12 2023年8月22日
西海岸之光  LV1 2022年12月30日
JiangYing009  LV8 2022年12月29日
xiaoyuer2  LV8 2022年11月22日
周粥周  LV3 2022年10月12日
北斗闪耀星空 2022年5月9日
暂无贡献等级
shaojichun  LV4 2022年5月9日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友