zoukankan      html  css  js  c++  java
  • springboot + redis(单机版)

      本次和大家分享的是在springboot集成使用redis,这里使用的是redis的jedis客户端(这里我docker运行的redis,可以参考 docker快速搭建几个常用的第三方服务),如下添加依赖:

    <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的接口效果如:

  • 相关阅读:
    项目结队开发---NABC分析(成员)
    梦断代码读后感(二)
    梦断代码读后感(一)
    首尾相连的循环数组求其子数组最大值
    子数组求和之大数溢出
    梦断代码读后感——终结
    软件工程结对开发——一维最大子数组求和溢出问题
    结对开发——求环形一维数组最大子数组的和
    结对开发——电梯调度问题需求分析
    软件工程——求二维数组所有子矩阵的和的最大值
  • 原文地址:https://www.cnblogs.com/wangrudong003/p/9497871.html
Copyright © 2011-2022 走看看