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);
    }
}

  

写在最后

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

 相关推荐:

原文地址:https://www.cnblogs.com/Marydon20170307/p/14125036.html