zoukankan      html  css  js  c++  java
  • springboot整合redis(注解形式)

    springboot整合redis(注解形式)

    准备工作

    springboot通常整合redis,采用的是RedisTemplate的形式,除了这种形式以外,还有另外一种形式去整合,即采用spring支持的注解进行访问缓存.

    • pom.xml
      <dependency>
                  <groupId>redis.clients</groupId>
                  <artifactId>jedis</artifactId>
                  <version>2.7.3</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.data</groupId>
                  <artifactId>spring-data-redis</artifactId>
                  <version>1.7.2.RELEASE</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-redis</artifactId>
                  <version>RELEASE</version>
        </dependency>
    • application.properties
      # REDIS (RedisProperties)
      # Redis数据库索引(默认为0)
      spring.redis.database=0
      # Redis服务器地址
      spring.redis.host=127.0.0.1
      # Redis服务器连接端口
      spring.redis.port=6379
      # 连接池最大连接数(使用负值表示没有限制)
      spring.redis.pool.max-active=8
      # 连接池最大阻塞等待时间(使用负值表示没有限制)
      spring.redis.pool.max-wait=-1
      # 连接池中的最大空闲连接
      spring.redis.pool.max-idle=8
      # 连接池中的最小空闲连接
      spring.redis.pool.min-idle=0
      # 连接超时时间(毫秒)
      spring.redis.timeout=0
      

      Redis配置类

      /**
       * @author hulonghai
       * redis配置类
       */
      @Configuration
      @EnableCaching
      public class CacheConfig extends CachingConfigurerSupport{
      
          @SuppressWarnings("rawtypes")
          @Bean
          public CacheManager cacheManager(RedisTemplate redisTemplate) {
              RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
              // 多个缓存的名称,目前只定义了一个
              rcm.setCacheNames(Arrays.asList("thisredis"));
              //设置缓存过期时间(秒)
              rcm.setDefaultExpiration(600);
              return rcm;
          }
      
          @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;
          }
      
      }
      

      可以看出,我们这里主要配置了两个东西,cacheManager方法配置了一个缓存名称,它的名字叫做thisredis,当我们要在方法注解里面使用到它的时候,就要根据名称进行区分不同缓存.同时设置了缓
      存的过期时间.redisTemplate则是比较常见的,我们设置了RedisTemplate,因此在代码里面,我们也可以通过@Autowired注入RedisTemplate来操作redis.

    • 使用

      接下来就是如何使用注解啦,这一步反而是最简单的.其实只用到了两个注解,@Cacheable和@CacheEvict.第一个注解代表从缓存中查询指定的key,如果有,从缓存中取,不再执行方法.如果没有则执
    行方法,并且将方法的返回值和指定的key关联起来,放入到缓存中.而@CacheEvict则是从缓存中清除指定的key对应的数据.使用的代码如下:

    @Cacheable(value="thisredis", key="'users_'+#id")
        public User findUser(Integer id) {
            User user = new User();
            user.setUsername("hlhdidi");
            user.setPassword("123");
            user.setUid(id.longValue());
            System.out.println("log4j2坏啦?");
            logger.info("输入user,用户名:{},密码:{}",user.getUsername(),user.getPassword());
            return user;
        }
    
        @CacheEvict(value="thisredis", key="'users_'+#id",condition="#id!=1")
        public void delUser(Integer id) {
            // 删除user
            System.out.println("user删除");
        }
    

      可以看出,我们用@Cacheable的value属性指定具体缓存,并通过key将其放入缓存中.这里key非常灵活,支持spring的el表达式,可以通过方法参数产生可变的key(见findUser方法),也可以通过其指定在
    什么情况下,使用/不使用缓存(见delUser方法).

  • 相关阅读:
    jQuery中的prop和attr区别
    echarts 不同区域背景色不同 废了我一天的时间
    echarts 饼状图 改变折线长度
    jqGrid有关问题 小知识点
    echarts页面中多图自适应
    bootstrap详解 见网址
    前端自适应布局方法总结
    前端页面中如何在窗口缩放时让两个div始终在同一行显示
    Vue2.0 v-for 中 :key 到底有什么用?
    sublime中安装package control总是失败
  • 原文地址:https://www.cnblogs.com/shianliang/p/10470740.html
Copyright © 2011-2022 走看看