美文网首页
06 Spring Boot 整合Jedis

06 Spring Boot 整合Jedis

作者: markeNick | 来源:发表于2020-02-15 17:22 被阅读0次

现在Spring Boot 2.x版本的推荐使用RedisTemplate,他封装了letture

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

准备工作


创建一个Spring Boot项目
安装好Redis和Redis可视化工具
.

导入Jedis依赖


<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

因为Spring Boot内默认引用了Jedis版本,所以无需配置Jedis的版本号

.

application.yml


修改application.properties为application.yml,然后添加下面的配置信息

server:
  port: 8080

spring:
  redis:
    port: 6379              # redis端口
    password: 123456        # redis登录密码
    host: 192.168.17.128    # redis的ip地址,我redis安装在我电脑的linux虚拟机中
    jedis:
      pool:
        max-idle: 6     #最大空闲数
        max-active: 10  #最大连接数
        min-idle: 2     #最小空闲数
    timeout: 2000       #连接超时

.

编写config


创建一个类,代码如下

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;

/**
 * Jedis配置
 */

@Configuration
public class JedisConfig {

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

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

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

    @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.min-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, port, timeout, password);
        logger.info("JedisPool 连接成功:" + host + ":" + port);

        return jedisPool;
    }
}

.

测试


test创建一个测试类(Spring Boot一般默认创建好了),代码如下

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.JedisPool;

@SpringBootTest
class SpringbootJedisApplicationTests {

    @Autowired
    private JedisPool jedisPool;

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

如果可以查看到JedisPool的信息说明连接成功

.

一个简单例子


编写一个封装JedisPool的工具类,代码如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@Component
public class JedisUtil {
    @Autowired
    private JedisPool jedisPool;

    /**
     * 获取Jedis
     */
    public Jedis getJedis() {

        return jedisPool.getResource();
    }

    /**
     * 关闭Jedis连接
     */
    public void close(Jedis jedis) {
        if(jedis != null) {
            jedis.close();
        }
    }

    // .....可以自行封装其他方法
}

编写一个接口和实现类,代码如下

public interface UserService {

    /**
     * 输入一个key
     * 判断Redis中是否存在该数据
     * 存在则在Redis中查询并返回,
     * 否则在MySQL数据库中查询将结果赋值给Redis并返回
     * @param key
     * @return
     */
    public String getString(String key);

}
import com.trq.springbootjedis.Service.UserService;
import com.trq.springbootjedis.Util.JedisUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

@Service
public class UserServiceImpl implements UserService {
    private Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);

    @Autowired
    private JedisUtil jedisUtil;

    @Override
    public String getString(String key) {
        // 获取Jedis对象
        Jedis jedis = jedisUtil.getJedis();

        String val = null;

        // 判断key是否存在于Redis
        if(jedis.exists(key)) {

            val = jedis.get(key);
           logger.info(key + "是在Redis中查询到的,值为" + val);
        } else {

            val = "test";   // 模拟从MySQL中查询到的数据
            logger.info(key + "是在MySQL中查询到的,值为" + val);
            jedis.set(key, val);
            logger.info(key + "存入Redis中,值为" + val);
        }

        // 关闭jedis
        jedisUtil.close(jedis);

        return val;
    }
}

此时我的Redis中的数据情况如下:

.

进行第一次测试,控制台输出如下:

.

再次查看Redis中的数据情况如下:

.

进行第二次测试,控制输出如下:

.


相关文章

网友评论

      本文标题:06 Spring Boot 整合Jedis

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