redis实现分布式锁以及redission使用

分布式环境有很多问题,比如你前一个请求访问的是服务器A,第二个请求访问到了服务器B,就会发生并发重复插入问题,这个时候需要依赖单点来实现分布锁,而redission就是。
第一步、引入redis和redisson依赖
第二步、创建redission工具类且测试
public class RedissonUtils {    private static Logger logger = LoggerFactory.getLogger(RedissonUtils.class);
    private static RedissonUtils redissionUtils;
    private RedissonUtils (){}
    public static RedissonUtils getInstance(){
        if(redissionUtils == null)
            synchronized(RedissonUtils.class){
                if(redissionUtils == null)redissionUtils = new RedissonUtils();
            }
        return redissionUtils;
    }
    public RedissonClient getRedisson(Config config){
        RedissonClient redisson = Redisson.create(config);
        logger.info("成功连接Redis Server");
        return redisson;
    }
    public RedissonClient getRedisson(String ip,String port){
        Config config = new Config ();
        config.useSingleServer().setAddress(ip+":"+port);
        RedissonClient redisson = Redisson.create(config);
        logger.info("成功连接Redis server ");
        return redisson;
    }
    public void closeRedisson(RedissonClient redisson){
        redisson.shutdown();
        logger.info("成功关闭redis Client连接");
    }
    public <T> RBucket<T> getRBucket(RedissonClient redisson, String objectName){
        RBucket<T> bucket = redisson.getBucket(objectName);
        return bucket;
    }
    public <K,V> RMap<K,V> getMap(RedissonClient redisson,String objectName){
        RMap<K,V> map = redisson.getMap(objectName);
        return map;
    }
    public <V>RSortedSet<V> getRSortedSet(RedissonClient redisson,String objectName){
        RSortedSet<V> sortedSet = redisson.getSortedSet(objectName);
        return sortedSet;
    }
    public <V> RSet<V> getRSet(RedissonClient redisson ,String objectName){
        RSet<V> rSet = redisson.getSet(objectName);
        return rSet;
    }
    public <V> RList<V> getList(RedissonClient redisson, String objectName){
        RList<V> rList = redisson.getList(objectName);
        return rList;
    }
    public <V> RQueue<V> getQueue(RedissonClient redisson,String objectName){
        RQueue<V> rQueue = redisson.getQueue(objectName);
        return rQueue;
    }
    public <V> RDeque<V> getDeque(RedissonClient redisson,String objectName){
        RDeque<V> rDeque = redisson.getDeque(objectName);
        return rDeque;
    }
    public RLock getRLock(RedissonClient redisson,String objectName){
        RLock rLock = redisson.getLock(objectName);
        return rLock;
    }
    public RAtomicLong getRAtomicLong(RedissonClient redisson,String objectName){
        RAtomicLong rAtomicLong = redisson.getAtomicLong(objectName);
        return rAtomicLong;
    }
    public RCountDownLatch getRCountDownLatch(RedissonClient redisson,String objectName){
        RCountDownLatch rCountDownLatch = redisson.getCountDownLatch(objectName);
        return rCountDownLatch;
    }
    public <M> RTopic<M> getRTopic (RedissonClient redisson,String objectName){
        RTopic<M> rTopic = redisson.getTopic(objectName);
        return rTopic;
    }
    @Test
    public void test() throws InterruptedException{
        Config config = new Config();
        SingleServerConfig singleServerConfig = config.useSingleServer();
        singleServerConfig.setAddress("127.0.0.1:6379");
        singleServerConfig.setPassword("123456");
        RedissonClient redissonClient = RedissonUtils.getInstance().getRedisson(config);
        RBucket<Object> rBucket = RedissonUtils.getInstance().getRBucket(redissonClient,"key");
        while (true){
            RLock lock = redissonClient.getLock("lock");
            lock.tryLock(0,1, TimeUnit.SECONDS);
            try {
                System.out.println("执行");
            }finally {
                lock.unlock();
            }
        }
    }
以上是 redis实现分布式锁以及redission使用 的全部内容, 来源链接: utcz.com/z/515633.html








