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