zoukankan      html  css  js  c++  java
  • springboot 整合redis

    整合前提:安装redis(教程见文末推荐)

    1.jar包引入

    <!-- redis -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-redis</artifactId>
        <version>1.4.7.RELEASE</version>
    </dependency>  

    2.连接池配置

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

    3.注解配置Java类

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    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.JdkSerializationRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    /**
     * redis的通用化配置
     * @description:
     * @author: Marydon
     * @date: 2020-12-10 10:26
     * @version: 1.0
     * @email: marydon20170307@163.com
     */
    @Configuration
    public class RedisConfig {
        @Autowired
        private RedisConnectionFactory redisConnectionFactory;
    
        @Bean
        public RedisTemplate<String,Object> redisTemplate(){
            RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            // 指定Key、Value的序列化策略
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
    
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            return redisTemplate;
        }
    
        @Bean
        public StringRedisTemplate stringRedisTemplate(){
            StringRedisTemplate stringRedisTemplate=new StringRedisTemplate();
            stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
            return stringRedisTemplate;
        }
    }
    

    4.如何使用?

      在需要使用redis缓存的java类,注入对象:

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    

      或者用注解:@Resource

      往缓存存数据:

    ValueOperations valueOperations = stringRedisTemplate.opsForValue();
    valueOperations.setIfAbsent(key, value);

      从缓存取数据:

    ValueOperations valueOperations = stringRedisTemplate.opsForValue();
    valueOperations.get(key);
    

      从缓存中删除数据:

      方式一:正规删除

    stringRedisTemplate.delete(key);
    

      方式二:立即过期

    stringRedisTemplate.expire(key, Duration.ZERO);
    

      虽然过期了,但是并不会立刻被删除,Redis对于过期键有三种清除策略,安装教程里我有介绍。

    5.启动redis服务

      双击运行:redis.bat文件,即可。

      说明:

      你肯定是没有这个文件的,想看实现方法的见文末推荐:redis安装教程;

      不想看的,按照自己之前的方式启动redis就行。

    6.测试

      我们按照上面的方法,在springboot的启动测试类来亲手尝试一下:

      写好后,点击图片上的绿三角,就能快速启动测试类啦。执行结果如下:

      注意:点击contextLoads()才能看到测试类执行结果。

      可以来查看一下,redis数据库:

      需要打开redis-cli.exe。

    7.关于redis的数据存储类型问题

      在实际开发过程中,我们之所以使用redis缓存库,就是为了减少数据库访问次数,减轻数据库压力,为此,通常我们会选择把需要频繁查询的数据存入缓存当中。

      那么,我们现在来测试一下实体类能不能放到缓存当中:

      执行结果如下:

      无法将java对象存入redis当中。

      随后,百度结果如下:

      Redis 只能支持六种数据类型(string/hash/list/set/zset/hyperloglog)的操作,但在 Java 中我们却通常以类对象为主,怎么办?

      见文末推荐

    8.springboot启动项目清空redis缓存

      我们知道:使用spring内部集成的缓存,在项目停止运行后,缓存也会随之消失;

      但是,redis不会,除非你设置了有效期或者调用删除方法,不然,即使你重启项目或者重启redis,缓存仍在;

      这种方式好也不好,就看具体使用场景啦,下面看一下具体实现办法:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.ApplicationArguments;
    import org.springframework.boot.ApplicationRunner;
    import org.springframework.core.annotation.Order;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.stereotype.Component;
    
    import java.util.Set;
    
    /**
     * springboot启动后自动执行方法
     * @description:
     * @author: Marydon
     * @date: 2020-12-10 11:19
     * @version: 1.0
     * @email: marydon20170307@163.com
     */
    @Component
    // 当有多个类实现ApplicationRunner接口时,可以指定其执行顺序,值越小优先级越高
    @Order(value = 1)
    public class AliApplicationRunner implements ApplicationRunner {// 或者实现CommandLineRunner接口
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
    
        /*
         * 启动结束后会立即执行的方法
         * @attention:
         * @date: 2020年12月10日 0010 11:21
         * @param: args
         * @return: void
         */
        @Override
        public void run(ApplicationArguments args) {
            // 获取缓存中所有的key
            Set<String> keys = stringRedisTemplate.keys("*");
            // 清空redis缓存数据库
            stringRedisTemplate.delete(keys);
        }
    }
    

      

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

  • 相关阅读:
    __PRETTY_FUNCTION__, __FUNCTION__, __func__
    Python.with
    golang配置
    论单位转个人的社保金融社保卡的作用
    面试题
    平衡是一门艺术
    画原型是节省人力的最好办法
    推荐给非互联网主体的用户
    iOS 点击返回键崩溃的未解之谜
    服务请求比较慢SYN flooding
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/14125036.html
Copyright © 2011-2022 走看看