设计Redis缓存池该如何限制创建数量,让后面的创建进入等待

import java.util.Stack;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class Caches {
    /** 缓存池*/
    static Stack<RedisCache> Caches;
    /** 在线数*/
    static int online = 0;

    static {
        Caches = new Stack<RedisCache>();
    }

    static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock ();

    /**
     * 获取缓存对象
     * @return
     */
    public static RedisCache GetCache(){
        online++;
        RedisCache c = null;
        var w = lock.writeLock();
        w.lock();
        if(Caches.size() > 0){
            c = Caches.pop();
        }
        w.unlock();
        return null == c?NewCache():c;
    }

    /**
     * 创建缓存对象
     * @return
     */
    private static RedisCache NewCache(){
        //这里修改ip
        return new RedisCache("localhost",6379);
    }

    /**
     * 缓存用完了
     * @param c 缓存对象
     */
    public static void SetCache(RedisCache c){
        online--;
        var w = lock.writeLock();
        w.lock();
        if(Caches.size() < 100){
            Caches.push(c);
        }
        w.unlock();
        c = null;
    }


}

求解

两个Stack 比如: 一个放核心缓存的 20个 setcache前判断时候达到20了,达到就放另一个stack 然后在getcache里面递减成功后,取出第二个Stack的一个再放到第一个中

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y