Loading

SringBoot整合Jedis

SpringBoot整合Redis

简介

使用springboot搭建微服务的时候,在很多时候还是需要Redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话有比较麻烦,在这里,我们使用redis来实现jedis缓存达到高效缓存的目的

引入Jedis依赖

<!--Jedis依赖-->
<dependency>
    <groupId>redis.clients</groupId>r
    <artifactId>jedis</artifactId>
    <version>3.2.0</version>
</dependency>

SpringBoot 内默认引用了jedis版本

所有直接引入Jedis就好了

application.yml

spring:
  redis:
    port: 6379
    password: 
    host: 47......
    jedis:
      pool:
        max-active: 10  #最大连接数
        max-idle: 6     #最大空闲数
        min-idle: 2     #最小空闲数
    timeout: 2000       #连接超时

编写Config

创建💻com.rzk.config.jedis.jedisConfig

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * fileName:JedisConfig
 * description:
 * author:rzk
 * createTime:2020/7/16 15:24
 * versioni:1.0.0
 */
@Configuration
public class JedisConfig {

    private Logger logger = LoggerFactory.getLogger(JedisConfig.class);

    @Value("$(spring.redis.host)")
    private String host;

    @Value("$(spring.redis.prot)")
    private int prot;

    @Value("$(spring.redis.password)")
    private String password;

    @Value("$(spring.redis.timeout)")
    private int timeout;

    @Value("$(spring.redis.jedis.pool.max-active)")
    private int maxActive;

    @Value("$(spring.redis.jedis.pool.max-idle)")
    private int maxIdle;

    @Value("$(spring.redis.jedis.pool.mix-idle)")
    private int minIdle;

    @Bean
    public JedisPool jedisPool(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setMaxTotal(maxActive);

        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, prot, timeout, password);
        logger.info("JedisPool连接成功"+host+"\t"+prot);
        return jedisPool();
    }import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * fileName:JedisConfig
 * description:
 * author:rzk
 * createTime:2020/7/16 15:24
 * versioni:1.0.0
 */
@Configuration
public class JedisConfig {

    private Logger logger = LoggerFactory.getLogger(JedisConfig.class);

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.password}")
    private String password;

    @Value("${spring.redis.port}")
    private Integer port;

    @Value("${spring.redis.timeout}")
    private Integer timeout;

    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxActive;

    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;

    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;

    @Bean
    public JedisPool jedisPool(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setMaxTotal(maxActive);

        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
        logger.info("JedisPool连接成功"+host+"\t"+port);
        return jedisPool;
    }
}

测试

@SpringBootTest
class SpringbootJedisApplicationTests {

    @Autowired
    private JedisPool jedisPool;

    @Test
    void contextLoads() {
        System.out.println(jedisPool);
    }


操作String类型

新建Service

接口

public interface UserService {
    /**
     * Redis String 类型
     * 需求: 用户输入一个 key
     * 先判断Redis中是否存在该数据
     *
     * 如果存在,在Redis中进行查询,并返回
     * 如果不存在,在MySQL数据库查询,将结果赋给Redis,并返回
     */

    public String getString(String key);
}

实现类

@Service
@Log
public class UserServiceImpl implements UserService {
    @Autowired
    private JedisPool jedisPool;//JedisPool Jedis连接池
    /**
     * Redis String 类型
     * 需求: 用户输入一个 key
     * 先判断Redis中是否存在该数据
     *
     * 如果存在,在Redis中进行查询,并返回
     * 如果不存在,在MySQL数据库查询,将结果赋给Redis,并返回
     * @Param key
     */
    @Override
    public String getString(String key) {
        String val = null;
        //1.得到Jedis对象,就要判断他存不存在
        Jedis jedis = jedisPool.getResource();
        //2.是否存在Key,如果他为true就存在
        if (jedis.exists(key)){
            log.info("查询Redis中的数据");
            val = jedis.get(key);
        }else{
            val="Rzk";
            log.info("查询的是Mysql数据库"+val);
            jedis.set(key,val);
            return val;
        }
        //3.关闭连接
        jedis.close();
        return val;
    }
}

在redis数据库查看有没有key值

此时Redis数据库是没有name的

Test第一次测试

    @Autowired
    private UserService userService;
    /**
     * 模拟Jedis操作Redis String 类型的数据
     *
     */
    @Test
    void T1(){
        String name = userService.getString("name");
        System.out.println(name);
    }

Test第二次测试

可以看到直接去redis数据库中取

posted @ 2020-07-16 21:17  Rzk  阅读(92)  评论(0编辑  收藏  举报