SpringBoot学习之Redis做分布式锁

添加Jedis依赖

 <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.2.0</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
</dependencies>

新建CallwithJedis接口类

package org.hx.distribute_lock;

import redis.clients.jedis.Jedis;

public interface CallwithJedis {
    void call(Jedis jedis);
}

新建Redis类

package org.hx.distribute_lock;

import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class Redis {
    private JedisPool jedisPool;
    public Redis(){
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
        //连接池最大空闲数
        config.setMaxIdle(300);
        //最大连接数
        config.setMaxTotal(1000);
        //连接最大等待时间,如果是-1表示没有限制
        config.setMaxWaitMillis(10000);
        //在空闲时检查有效性
        config.setTestOnBorrow(true);
        /**
          * 1. Redis 地址
          * 2. Redis 端口
          * 3. 连接超时时间
          * 4. 密码
         * */
        jedisPool = new JedisPool(config,"192.168.133.8",6379,10000,"hx");

    }
    public void execute(CallwithJedis callwithJedis){
        try(Jedis jedis = jedisPool.getResource()){
            callwithJedis.call(jedis);
        }
    }
}

新建LockTest类

package org.hx.distribute_lock;

import redis.clients.jedis.params.SetParams;

public class LockTest {
    public static void main(String[] args) {
        Redis redis = new Redis();
        redis.execute(jedis -> {
            String set = jedis.set("k1","v1",new SetParams().nx().ex(5));
            if (set != null && "OK".equals(set)){
                //给锁添加一个过期时间,防止应用在运行过程中抛出异常导致锁无法得到及时释放
                jedis.expire("k1",5);
                //没人占位
                jedis.set("name","hx");
                String name = jedis.get("name");
                System.out.println("name: "+name);
                jedis.del("k1");
            }
            else {
                //有人占位
            }
        });
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值