redis分布式锁redisson

coding

  1. 定义连接池

package cn.cao.config;

import org.redisson" title="redisson">redisson.Redisson;

import org.redisson.api.RedissonClient;

import org.redisson.config.Config;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

* redisson 配置类

* Created on 2020/11/01

*/

@Configuration

public class RedissonConfig {

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

private String host;

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

private String port;

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

private String password;

@Bean

public RedissonClient getRedisson(){

Config config = new Config();

config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password);

//添加主从配置

// config.useMasterSlaveServers().setMasterAddress("").setPassword("").addSlaveAddress(new String[]{"",""});

// config.useClusterServers().addNodeAddress(host).setPassword(password);

return Redisson.create(config);

}

}

2,redisson 操作类

package cn.cao.config;

import lombok.Getter;

import org.redisson.Redisson;

import org.redisson.api.*;

import org.redisson.config.Config;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.io.IOException;

/**

* redisson操作类

*/

@Service("redissonService")

public class RedissonService {

@Autowired

private RedissonClient redissonClient;

public void getRedissonClient() throws IOException {

Config config = redissonClient.getConfig();

System.out.println(config.toJSON().toString());

}

/**`

* 获取字符串对象

*

* @param objectName

* @return

*/

public <T> RBucket<T> getRBucket(String objectName) {

RBucket<T> bucket = redissonClient.getBucket(objectName);

return bucket;

}

/**

* 获取Map对象

*

* @param objectName

* @return

*/

public <K, V> RMap<K, V> getRMap(String objectName) {

RMap<K, V> map = redissonClient.getMap(objectName);

return map;

}

/**

* 获取有序集合

*

* @param objectName

* @return

*/

public <V> RSortedSet<V> getRSortedSet(String objectName) {

RSortedSet<V> sortedSet = redissonClient.getSortedSet(objectName);

return sortedSet;

}

/**

* 获取集合

*

* @param objectName

* @return

*/

public <V> RSet<V> getRSet(String objectName) {

RSet<V> rSet = redissonClient.getSet(objectName);

return rSet;

}

/**

* 获取列表

*

* @param objectName

* @return

*/

public <V> RList<V> getRList(String objectName) {

RList<V> rList = redissonClient.getList(objectName);

return rList;

}

/**

* 获取队列

*

* @param objectName

* @return

*/

public <V> RQueue<V> getRQueue(String objectName) {

RQueue<V> rQueue = redissonClient.getQueue(objectName);

return rQueue;

}

/**

* 获取双端队列

*

* @param objectName

* @return

*/

public <V> RDeque<V> getRDeque(String objectName) {

RDeque<V> rDeque = redissonClient.getDeque(objectName);

return rDeque;

}

/**

* 获取锁

*

* @param objectName

* @return

*/

public RLock getRLock(String objectName) {

RLock rLock = redissonClient.getLock(objectName);

return rLock;

}

/**

* 获取读取锁

*

* @param objectName

* @return

*/

public RReadWriteLock getRWLock(String objectName) {

RReadWriteLock rwlock = redissonClient.getReadWriteLock(objectName);

return rwlock;

}

/**

* 获取原子数

*

* @param objectName

* @return

*/

public RAtomicLong getRAtomicLong(String objectName) {

RAtomicLong rAtomicLong = redissonClient.getAtomicLong(objectName);

return rAtomicLong;

}

/**

* 获取记数锁

*

* @param objectName

* @return

*/

public RCountDownLatch getRCountDownLatch(String objectName) {

RCountDownLatch rCountDownLatch = redissonClient.getCountDownLatch(objectName);

return rCountDownLatch;

}

/**

* 获取消息的Topic

*

* @param objectName

* @return

*/

public <M> RTopic<M> getRTopic(String objectName) {

RTopic<M> rTopic = redissonClient.getTopic(objectName);

return rTopic;

}

}

3,使用

RLock lock = redissonService.getRLock("lock");

try {

if (lock.tryLock(5, 6, TimeUnit.SECONDS)) {

try {

Integer ip = (Integer) redisUtil.get("ip3");

// 业务代码

log.info("进入业务代码: " + ip);

System.out.println(ip);

System.out.println(Thread.currentThread().getName());

redisUtil.set("ip3", ip - 1);

} catch (Exception e) {

e.printStackTrace();

} finally {

//释放

lock.unlock();

}

} else {

// 超过过时s 获取不到锁

log.info("没有获取到分布式锁");

}

} catch (InterruptedException e) {

e.printStackTrace();

}

以上是 redis分布式锁redisson 的全部内容, 来源链接: utcz.com/z/510147.html

回到顶部