springboot使用redis(从配置到实战)

作者: 马小莫QAQ | 来源:发表于2021-08-28 14:07 被阅读0次

    概述

    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配置类

    package cn.chenlove.config;
    
    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Value;
    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 redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    @Configuration
    @EnableCaching
    public class RedisConfig  extends CachingConfigurerSupport{
        @Value("${spring.redis.host}")
        private String host;
    
        @Value("${spring.redis.port}")
        private int port;
    
        @Value("${spring.redis.timeout}")
        private int timeout;
    
        @Value("${spring.redis.pool.max-idle}")
        private int maxIdle;
    
        @Value("${spring.redis.pool.max-wait}")
        private long maxWaitMillis;
    
        @Bean
        public JedisPool redisPoolFactory() {
            Logger.getLogger(getClass()).info("JedisPool注入成功!!");
            Logger.getLogger(getClass()).info("redis地址:" + host + ":" + port);
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxIdle(maxIdle);
            jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
    
            JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
    
            return jedisPool;
        }
    }
    

    可以看出,我们这里主要配置了两个东西,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删除");
           }
    
           //无参数
           @RequestMapping("/get")
        @Cacheable(value="thisredis")
        @ResponseBody
        public List<User> xx(){
            return userMapper.selectAll();
        }
        @RequestMapping("/get3")
        @CacheEvict(value="thisredis")
        @ResponseBody
        public String xx3(){
            return "ok";
        }
    

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

    作者:Python研究者
    链接:https://www.cnblogs.com/chenlove/p/15196475.html

    相关文章

      网友评论

        本文标题:springboot使用redis(从配置到实战)

        本文链接:https://www.haomeiwen.com/subject/jrpbiltx.html