- 定义连接池
package cn.cao.config; import org.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(); }
来源:oschina
链接:https://my.oschina.net/u/3270060/blog/4705233