崛起于Springboot2.X + Redis单机(15)

こ雲淡風輕ζ 提交于 2019-11-29 08:26:56

《SpringBoot2.X心法总纲》

1、pom添加依赖

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

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

<dependency>
   <groupId>commons-lang</groupId>
   <artifactId>commons-lang</artifactId>
   <version>2.5</version>
</dependency>
<dependency>
   <groupId>com.google.collections</groupId>
   <artifactId>google-collections</artifactId>
   <version>1.0</version>
</dependency>

    这四个依赖的作用,第一个是集成redis,第二个集成jedis,第三个和第四个是封装jedis工具类的实现,以后我们可以直接调用操作redis就好,非常方便,大多数公司开发用的就是这种方案。

2、配置文件redis

    记住timeout和wait后面要加ms,这是springboot2.0的特性,不然会出现红色标记错误,不和以前1.X一样只写一个数字就可以了

spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.timeout=10000ms

spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1ms
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.max-idle=8

3、配置类config

@Configuration
@EnableCaching
public class RedisCacheConfiguration extends CachingConfigurerSupport {

    Logger logger = LoggerFactory.getLogger(RedisCacheConfiguration.class);

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

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

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

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

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

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

    @Bean
    public JedisPool redisPoolFactory() {
        
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        
        jedisPoolConfig.setMaxIdle(maxIdle);

        jedisPoolConfig.setMaxWaitMillis(Long.valueOf(maxWaitMillis.substring(0,maxWaitMillis.length()-2)));

        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, Integer.valueOf(timeout.substring(0,timeout.length()-2)));

        return jedisPool;
    }
}

4、jedis的service的封装

public interface ICacheService {

 /**
 * 设置键值
 * @param key
 * @param value
 * @return
 */
String set(String key, String value);

/**
 *
 * @param key
 * @param increament
 * @return
 */
Long incrBy(String key, long increament);

}
@Component
public class CacheSingleService implements ICacheService {

    @Autowired
    private JedisPool jedisPool;

  public String set(String key, String value){
    Jedis jedis = null;
    try {
        jedis = getResource();
        return jedis.set(key, value);
    } finally {
        returnResource(jedis);
    }
}

 public Long incrBy(String key, long increament) {
    Long i = null;
    Jedis jedis = null;
    try {
        jedis = getResource();
        i = jedis.incrBy(key, increament);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        returnResource(jedis);
    }
    return i;
       }
  }
}
@Component
public class CacheService {

    private static final String PLATFORM_KEY_PRE = "DTB_";

    @Autowired
    private CacheSingleService cacheSingleService;

    private ICacheService cacheService;

    @PostConstruct
    private void init(){
        this.cacheService = cacheSingleService;
    }

    protected String getStrKey(String key){
        String result = PLATFORM_KEY_PRE+key;
        return result;

    }

 public void set(String key, String value) throws Exception{
    key = getStrKey(key);
    cacheService.set(key, value);
 }
 public Long incrBy(String key, long increament){
    key = getStrKey(key);
    return cacheService.incrBy(key, increament);
 }

}

并没有把所有的servie里面设计redis的所有方法写出来,写出两个大概步骤就好了

5、测试

写controller,以后我们直接调用CacheService就好了,直接使用redis的方法,因为我们刚刚在service中封装了设计redis的所有方法,上面是两个,但是公司中会封装几十个

@Autowired
CacheService cacheService;

@RequestMapping(value = "/redis/test2")
public String test2() throws Exception {
    cacheService.set("mjt01","测试jedis");

    return cacheService.get("mjt01");
}

测试成功!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!