zoukankan      html  css  js  c++  java
  • SpringBoot学习:整合Redis

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821

    pom.xml添加对redis的依赖:

    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-redis -->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-redis</artifactId>
          <version>1.4.5.RELEASE</version>
        </dependency>

    application.yml配置redis启动参数:

    spring:
        redis:
            # Redis服务器地址
            host: localhost
            # Redis服务器连接端口
            port: 6379
            # Redis服务器连接密码(默认为空)
            password:
            pool:
               # 连接池最大连接数(使用负值表示没有限制)
               max-active: 8
               # 连接池中的最大空闲连接
               min-idle: 0
               # 连接池最大阻塞等待时间(使用负值表示没有限制)
               max-wait: -1
               # 连接池中的最小空闲连接
               max-idle: 8
            # 连接超时时间(毫秒)
            timeout: 20

    Redis的启动类如下:

    package com.sun.configuration;
    
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.apache.log4j.Logger;
    import org.springframework.boot.bind.RelaxedPropertyResolver;
    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.cache.interceptor.KeyGenerator;
    import org.springframework.context.EnvironmentAware;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.env.Environment;
    import org.springframework.data.redis.cache.RedisCacheManager;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    import java.lang.reflect.Method;
    
    /**
     * 项目启动加载redis
     */
    @Configuration
    @EnableCaching
    public class RedisConfig extends CachingConfigurerSupport implements EnvironmentAware {
    
        private final Logger logger = Logger.getLogger(RedisConfig.class);
    
        private RelaxedPropertyResolver propertyResolver;
    
        public void setEnvironment(Environment env) {
            this.propertyResolver = new RelaxedPropertyResolver(env, "spring.redis.");
        }
    
        @Bean("jedisPool")
        public JedisPool redisPoolFactory() {
            logger.info("redis地址:" + propertyResolver.getProperty("host") +
                    ":" + propertyResolver.getProperty("port"));
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxIdle(Integer.valueOf(propertyResolver.getProperty("pool.max-idle")));
            jedisPoolConfig.setMaxWaitMillis(Integer.valueOf(propertyResolver.getProperty("pool.max-wait")));
    
            JedisPool jedisPool = new JedisPool(jedisPoolConfig, propertyResolver.getProperty("host"),
                      Integer.valueOf(propertyResolver.getProperty("port")),
                      Integer.valueOf(propertyResolver.getProperty("timeout")));
            logger.info("jedisPool注入成功!!");
            return jedisPool;
        }
        /**
         * 生成key的策略
         * 缓存注解没有配置key参数走此方法
         * @return
         */
        @Bean
        public KeyGenerator keyGenerator() {
            return new KeyGenerator() {
                @Override
                public Object generate(Object target, Method method, Object... params) {
                    StringBuilder sb = new StringBuilder();
                    sb.append(target.getClass().getName());
                    sb.append(method.getName());
                    for (Object obj : params) {
                        sb.append(obj.toString());
                    }
                    return sb.toString();
                }
            };
        }
        /**
         * RedisTemplate配置
         * @param factory
         * @return
         */
        @Bean
        public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
            StringRedisTemplate template = new StringRedisTemplate(factory);
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);
            template.setValueSerializer(jackson2JsonRedisSerializer);
            template.afterPropertiesSet();
            return template;
        }
        /**
         * 管理缓存
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public CacheManager cacheManager(RedisTemplate redisTemplate) {
            RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
            //设置缓存过期时间--一天
            rcm.setDefaultExpiration(86400);//
            return rcm;
        }
    
    }

    在ServiceImpl业务处理类上使用注解:

    @Cacheable(value="common",key="'id_'+#id")
    public User selectByPrimaryKey(Integer id) {
          return userMapper.selectByPrimaryKey(id);
    }

    前台输入地址调用后台可以看到第一个打印出执行的sql,第二次不打印



    项目启动前需要启动redis服务器,不知道的可以参考博客:http://blog.csdn.net/aqsunkai/article/details/51324176

  • 相关阅读:
    从零开始学习SSH框架笔记之一 初识SSH框架及下载地址
    CentOS 6.0 升级内核步骤、方法
    解决Ubuntu详细信息中图形显示为未知的情况
    【Oracle XE系列之二】Oracle XE创建表空间、创建用户以及授权、查看权限
    排序算法大总结
    我的vimrc 设置
    你的c++学的怎么样?
    腾讯的笔试题一道
    一道递归算法题
    vc6 bug真多 写c++别用vc6
  • 原文地址:https://www.cnblogs.com/aqsunkai/p/6690572.html
Copyright © 2011-2022 走看看