redis整合springboot

springboot与jedis的整合

1、创建SpringBoot工程

使用idea自带的Spring Initializr创建一个基本的SpringBoot工程。
​​在这里插入图片描述

2、修改POM文件

工程创建成功后,修改pom文件,添加所需的jar包

org.springframework.boot spring-boot-starter-data-redis redis.clients jedis 3.1.0 org.projectlombok lombok 1.18.8 provided

3、添加所需配置

application.properties配置

Redis服务器地址

redis.host=127.0.0.1

Redis服务器连接端口

redis.port=6379

Redis服务器连接密码(默认为空)

redis.password=null
redis.timeout=30000

连接池最大连接数(使用负值表示没有限制)

redis.maxTotal=30

连接池中的最大空闲连接

redis.maxIdle=10
redis.numTestsPerEvictionRun=1024
redis.timeBetweenEvictionRunsMillis=30000
redis.minEvictableIdleTimeMillis=1800000
redis.softMinEvictableIdleTimeMillis=10000

连接池最大阻塞等待时间(使用负值表示没有限制)

redis.maxWaitMillis=1500
redis.testOnBorrow=true
redis.testWhileIdle=true
redis.blockWhenExhausted=false
redis.JmxEnabled=true
RedisConfig配置文件

@Configuration
@PropertySource(“classpath:application.properties”)
public class RedisConfig {
@Value("${redis.host}")
private String host;

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

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

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

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

@Value("${redis.blockWhenExhausted}")
private Boolean blockWhenExhausted;

@Value("${redis.JmxEnabled}")
private Boolean JmxEnabled;

@Bean
public JedisPool jedisPoolFactory() {
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxIdle(maxIdle);
    jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
    // 连接耗尽时是否阻塞, false报异常,true阻塞直到超时, 默认true
    jedisPoolConfig.setBlockWhenExhausted(blockWhenExhausted);
    // 是否启用pool的jmx管理功能, 默认true
    jedisPoolConfig.setJmxEnabled(JmxEnabled);
    JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
    return jedisPool;
}

}

4、编写代码

编写RedisUtil工具类

@Component
public class RedisUtil {

@Autowired
private JedisPool jedisPool;

/**
 * 向Redis中存值,永久有效
 */
public String set(String key, String value) {
    Jedis jedis = null;
    try {
        jedis = jedisPool.getResource();
        return jedis.set(key, value);
    } catch (Exception e) {
        return "0";
    } finally {
        jedis.close();
    }
}

/**
 * 根据传入Key获取指定Value
 */
public String get(String key) {
    Jedis jedis = null;
    String value;
    try {
        jedis = jedisPool.getResource();
        value = jedis.get(key);
    } catch (Exception e) {
        return "0";
    } finally {
        jedis.close();
    }
    return value;
}

/**
 * 校验Key值是否存在
 */
public Boolean exists(String key) {
    Jedis jedis = null;
    try {
        jedis = jedisPool.getResource();
        return jedis.exists(key);
    } catch (Exception e) {
        return false;
    } finally {
        jedis.close();
    }
}

/**
 * 删除指定Key-Value
 */
public Long del(String key) {
    Jedis jedis = null;
    try {
        jedis = jedisPool.getResource();
        return jedis.del(key);
    } catch (Exception e) {
        return 0L;
    } finally {
        jedis.close();
    }
}

/**
 * 分布式锁
 * @param key
 * @param value
 * @param time 锁的超时时间,单位:秒
 *
 * @return 获取锁成功返回"OK",失败返回null
 */
public String getDistributedLock(String key,String value,int time){
    Jedis jedis = null;
    String ret = "";
    try {
        jedis = jedisPool.getResource();

        ret = jedis.set(key, value, new SetParams().nx().ex(time));
        return ret;
    } catch (Exception e) {
        return null;
    } finally {
        jedis.close();
    }
}

}

编写Controller,便于从浏览器进行测试

@RestController
@Slf4j
public class RedisController {

@Autowired
private RedisUtil redisUtil;

@RequestMapping("/testDistributedLock")
public String testSetIfNotExists(@RequestParam("name") String name,
                                 @RequestParam("value") int age){
    log.info("******testSetIfNotExists******");

    int time = 10;//超时时间写死为10秒
    String ageStr = String.valueOf(age);
    String s = redisUtil.getDistributedLock(name, ageStr, time);

    log.info("******s是否为null:" + (s == null));
    log.info("******s=" + s);

    return s;
}

}

5、启动测试

启动SpringBoot工程,打开浏览器进行测试

http://localhost:8080/testDistributedLock?name=jack&value=25

浏览器成功响应OK

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值