欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springboot + redis(单机版)

程序员文章站 2022-10-18 14:08:49
本次和大家分享的是在springboot集成使用redis,这里使用的是redis的jedis客户端(这里我docker运行的redis,可以参考 docker快速搭建几个常用的第三方服务),如下添加依赖: 然后需要redis的相关配置(这里我的redis密码是空),在application.yml ......

  本次和大家分享的是在springboot集成使用redis,这里使用的是redis的jedis客户端(这里我docker运行的redis,可以参考 ),如下添加依赖:

<dependency>
  <groupid>redis.clients</groupid>
  <artifactid>jedis</artifactid>
</dependency>

  然后需要redis的相关配置(这里我的redis密码是空),在application.yml设置如:

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

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

 1  @value("${spring.redis.single}")
 2     private string strsinglenode;
 3 
 4     @value("${spring.redis.jedis.pool.max-idle}")
 5     private integer maxidle;
 6 
 7     @value("${spring.redis.jedis.pool.max-active}")
 8     private integer maxactive;
 9 
10     @value("${spring.redis.jedis.pool.max-wait}")
11     private integer maxawait;
12 
13     @value("${spring.redis.timeout}")
14     private integer timeout;
15 
16     @value("${spring.redis.password}")
17     private string password;

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

 1     /**
 2      * jedis配置
 3      *
 4      * @return
 5      */
 6     public jedispoolconfig getjedispoolconfig() {
 7         jedispoolconfig config = new jedispoolconfig();
 8         config.setmaxidle(maxidle); #最大空闲数
 9         config.setmaxwaitmillis(maxawait); #最大等待时间
10         config.setmaxtotal(maxactive); #最大连接数
11         return config;
12     }

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

 1   /**
 2      * 获取jedispool
 3      *
 4      * @return
 5      */
 6     @bean
 7     public jedispool getjedispool() {
 8         jedispoolconfig config = getjedispoolconfig();
 9         system.out.println("strsinglenode:" + this.strsinglenode);
10         string[] nodearr = this.strsinglenode.split(":");
11 
12         jedispool jedispool = null;
13         if (this.password.isempty()) {
14             jedispool = new jedispool(
15                     config,
16                     nodearr[0],
17                     integer.valueof(nodearr[1]),
18                     this.timeout);
19         } else {
20             jedispool = new jedispool(
21                     config,
22                     nodearr[0],
23                     integer.valueof(nodearr[1]),
24                     this.timeout,
25                     this.password);
26         }
27         return jedispool;
28     }

  上面简单区分了无密码的情况,到此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层的测试用例如下:

 1   @autowired
 2     jediscomponent jedis;
 3 
 4     @getmapping("/setjedis/{val}")
 5     public boolean setjedis(@pathvariable string val) {
 6         return jedis.set("token", val);
 7     }
 8 
 9     @getmapping("/getjedis")
10     public string getjedis() {
11         return jedis.get("token");
12     }

  运行set和get的接口效果如:

springboot + redis(单机版)

springboot + redis(单机版)