springboot + redis(单机版)

228 阅读2分钟
原文链接: click.aliyun.com

springboot + redis(单机版)

神牛003 2018-08-18 17:07:41 浏览491 评论0
  • 云栖社区
  • 编程语言
  • redis
  • java
  • spring
  • 配置
  • string
  • jedis

摘要: 本次和大家分享的是在springboot集成使用redis,这里使用的是redis的jedis客户端,如下添加依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependen...

本次和大家分享的是在springboot集成使用redis,这里使用的是redis的jedis客户端,如下添加依赖

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

然后需要redis的相关配置(这里我的redis密码是空)

spring:
  redis:
    single: 192.168.146.28:6378
    jedis:
      pool:
        max-idle: 8
        max-active: 8
        max-wait: 3000
    timeout: 3000
    password:

这是redis的一般配置,具体调优可以设置这些参数,下面在JedisConfig类中读取这些设置

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

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

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

    @Value("${spring.redis.jedis.pool.max-wait}")
    private Integer maxAWait;

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

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

有上面的配置,就需要有代码里面设置下,这里创建一个返回JedisPoolConfig的方法

    /**
     * jedis配置
     *
     * @return
     */
    public JedisPoolConfig getJedisPoolConfig() {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(maxIdle); #最大空闲数
        config.setMaxWaitMillis(maxAWait); #最大等待时间
        config.setMaxTotal(maxActive); #最大连接数
        return config;
    }

有了配置,接下来就创建JedisPool,这里把JedisPool托管到spring中

     /**
     * 获取jedispool
     *
     * @return
     */
    @Bean
    public JedisPool getJedisPool() {
        JedisPoolConfig config = getJedisPoolConfig();
        System.out.println("strSingleNode:" + this.strSingleNode);
        String[] nodeArr = this.strSingleNode.split(":");

        JedisPool jedisPool = null;
        if (this.password.isEmpty()) {
            jedisPool = new JedisPool(
                    config,
                    nodeArr[0],
                    Integer.valueOf(nodeArr[1]),
                    this.timeout);
        } else {
            jedisPool = new JedisPool(
                    config,
                    nodeArr[0],
                    Integer.valueOf(nodeArr[1]),
                    this.timeout,
                    this.password);
        }
        return jedisPool;
    }

上面简单区分了无密码的情况,到此jedis的配置和连接池就基本搭建完了,下面就是封装使用的方法,这里以set和get为例;首先创建个JedisComponent组件,代码如下

/**
 * Created by Administrator on 2018/8/18.
 */
@Component
public class JedisComponent {

    @Autowired
    JedisPool jedisPool;

    public boolean set(String key, String val) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.set(key, val).equalsIgnoreCase("OK");
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    public <T> boolean set(String key, T t) {
        String strJson = JacksonConvert.serilize(t);
        if (strJson.isEmpty()) {
            return false;
        }
        return this.set(key, strJson);
    }

    public String get(String key) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.get(key);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    public <T> T get(String key, Class<T> tClass) {
        String strJson = this.get(key);
        return JacksonConvert.deserilize(strJson, tClass);
    }
}

有了对jedis的调用封装,我们在Controller层的测试用例如下

    @Autowired
    JedisComponent jedis;

    @GetMapping("/setJedis/{val}")
    public boolean setJedis(@PathVariable String val) {
        return jedis.set("token", val);
    }

    @GetMapping("/getJedis")
    public String getJedis() {
        return jedis.get("token");
    }
运行set和get的接口效果如
1
2

用云栖社区APP,舒服~

【云栖快讯】诚邀你用自己的技术能力来用心回答每一个问题,通过回答传承技术知识、经验、心得,问答专家期待你加入!  详情请点击
分享到:

相关文章

网友评论