SpringBoot下redis的操作和连接

作为一款高效的K-V数据库,reids的身影在众多的企业级应用上都有出现,本文今天就讲解下在SpringBoot下如何连接和操作redis。

一、搭建和部署redis程序

要使用redis自然要将redis在服务器上搭建好,不会搭建的可以参考我另一篇文章。

 

二、配置相关依赖

添加redis依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

若是在项目创建的时候就选择了redis,那么创建完成的时候自动就会添加上该依赖,没有选择的添加上即可。

添加jedis依赖

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

三、配置相关参数

配置文件为方便起见已被替换为yml格式:

其中最上面的一大块马赛克是mysql数据库的配置,这里关注下面redis和jedis的配置即可。host为地址信息,port为端口信息,password就是redis配置的访问密码。

四、JedisPool的设置

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @Author Kolloge
 * @Project redisdemo
 * @Date 2018/12/17  10:56
 * @Description redis的相关配置
 **/

@Component
@ConfigurationProperties(prefix="spring.datasource.redis")
public class RedisConfig {

    private String host;

    private int port;

    private String password;

    private int timeout;

    private int maxIdle;

    private long maxWaitMillis;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getTimeout() {
        return timeout;
    }

    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    public int getMaxIdle() {
        return maxIdle;
    }

    public void setMaxIdle(int maxIdle) {
        this.maxIdle = maxIdle;
    }

    public long getMaxWaitMillis() {
        return maxWaitMillis;
    }

    public void setMaxWaitMillis(long maxWaitMillis) {
        this.maxWaitMillis = maxWaitMillis;
    }


    /**
     * @Author Kolloge
     * @Project redisdemo
     * @Date 2018/12/17  10:56
     * @Description redis的配置,通过对配置文件内的参数读取,设置jedisPool
     **/
    @Bean
    public JedisPool redisPoolFactory() {

        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
        return jedisPool;
    }
}

这种方式可以直接将yml里配置的参数读取进来,也是十分的方便。

五、redis资源管理

import com.example.redisdemo.service.redis.RedisDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.ShardedJedis;

import java.util.Set;

/**
 * @Author Kolloge
 * @Project redisdemo
 * @Date 2018/12/17  10:30
 * @Description redis
 **/

@Repository
public class RedisDataSourceImpl implements RedisDataSource {
    private static final Logger logger = LoggerFactory.getLogger(RedisDataSourceImpl.class);

    @Autowired
    private JedisPool jedisPool;

    @Override
    public Jedis getRedisClient() {
        try {
            return jedisPool.getResource();
        } catch (Exception e) {
            logger.error("获取RedisClient异常:" + e);
        }
        return null;
    }


    @Override
    public void returnResource(Jedis jedis, boolean broken) {
        if (broken) {
            if(jedis!=null){
                jedis.close();
            }
        } else {
            if(jedis!=null){
                jedis.close();
            }
        }
    }
}

此处需要注意一点,此处只贴了impl没有贴出interface,直接使用务必自己写一个interface,如果你程序的路径和我的不一样,那第一条import务必修改

import com.example.redisdemo.service.redis.RedisDataSource;

 


六、访问redis

经过以上的配置我们已经可以开始使用redis了,以下的代码同样的不贴interface,只贴出impl,如果知道impl还不能自己写出interface也没必要学redis了,先学java吧。

import com.example.redisdemo.service.redis.RedisDao;
import com.example.redisdemo.service.redis.RedisDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import redis.clients.jedis.Jedis;

/**
 * @Author Kolloge
 * @Project redisdemo
 * @Date 2018/12/17 10:40
 * @Description
 **/

@Repository
public class RedisDaoImpl implements RedisDao{

    private static final Logger logger = LoggerFactory.getLogger(RedisDaoImpl.class);

    @Autowired
    private RedisDataSource redisDataSource;

    @Override
    public void putInfo2Redis(String str){
		String keyName = "FirstInfo";
		String fieldName = "redisDemo";
        boolean broken = false;
        Jedis shardedJedis = redisDataSource.getRedisClient();
        if (shardedJedis == null) {
            return;
        }
        try {
			shardedJedis.hset(keyName,fieldName, str);
        } catch (Exception e) {
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
    }
}

这里存的数据类型是hash的其他的类型实现也大同小异,大家可以自行尝试一下。controller也就不写了,写个test看下运行结果,输入的str是 Hello World!

 

七、运行结果

 

猜你喜欢

转载自blog.csdn.net/z327092292/article/details/85044341
今日推荐