用户缓存线程修改
parent
803ba2a86d
commit
c8f47d0a7a
|
@ -156,9 +156,9 @@ public class ThreadManager implements IManager {
|
|||
|
||||
public static void reStart(){
|
||||
LOGGER.info("重启线程池!!");
|
||||
// scheduledExecutor.shutdown();
|
||||
scheduledFutureSets.forEach(future -> future.cancel(false));
|
||||
scheduledFutureSets.clear();
|
||||
TaskKit.reset();
|
||||
go();
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.ljsd.jieling.util;
|
|||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import util.TimeUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.locks.ReadWriteLock;
|
||||
|
@ -26,7 +27,7 @@ public class DynamicLRUCache<K, V> {
|
|||
}
|
||||
|
||||
public V get(K key) {
|
||||
lock.readLock().lock();
|
||||
// lock.readLock().lock();
|
||||
try {
|
||||
TimedCacheEntry<V> entry = cache.get(key);
|
||||
if (entry != null && !isEntryExpired(entry)) {
|
||||
|
@ -35,51 +36,51 @@ public class DynamicLRUCache<K, V> {
|
|||
}
|
||||
return null;
|
||||
} finally {
|
||||
lock.readLock().unlock();
|
||||
// lock.readLock().unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public void put(K key, V value) {
|
||||
lock.writeLock().lock();
|
||||
// lock.writeLock().lock();
|
||||
try {
|
||||
if (cache.size() >= maxSize && maxSize < Integer.MAX_VALUE / 2) {
|
||||
maxSize *= 2; // 控制最大扩容限制
|
||||
}
|
||||
cache.put(key, new TimedCacheEntry<>(value));
|
||||
} finally {
|
||||
lock.writeLock().unlock();
|
||||
// lock.writeLock().unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public void remove(K key) {
|
||||
lock.writeLock().lock();
|
||||
// lock.writeLock().lock();
|
||||
try {
|
||||
cache.remove(key);
|
||||
} finally {
|
||||
lock.writeLock().unlock();
|
||||
// lock.writeLock().unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean containsKey(K key) {
|
||||
lock.readLock().lock();
|
||||
// lock.readLock().lock();
|
||||
try {
|
||||
return cache.containsKey(key);
|
||||
} finally {
|
||||
lock.readLock().unlock();
|
||||
// lock.readLock().unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public int size() {
|
||||
lock.readLock().lock();
|
||||
// lock.readLock().lock();
|
||||
try {
|
||||
return cache.size();
|
||||
} finally {
|
||||
lock.readLock().unlock();
|
||||
// lock.readLock().unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public List<V> getAll() {
|
||||
lock.readLock().lock();
|
||||
// lock.readLock().lock();
|
||||
try {
|
||||
List<V> values = new ArrayList<>();
|
||||
for (TimedCacheEntry<V> entry : cache.values()) {
|
||||
|
@ -89,28 +90,28 @@ public class DynamicLRUCache<K, V> {
|
|||
}
|
||||
return values;
|
||||
} finally {
|
||||
lock.readLock().unlock();
|
||||
// lock.readLock().unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public void shrinkToFit() {
|
||||
lock.writeLock().lock();
|
||||
try {
|
||||
// 减少缓存大小调整的频率
|
||||
if (cache.size() < maxSize / 2 && maxSize > 100) {
|
||||
maxSize /= 2; // 缩小缓存容量
|
||||
}
|
||||
Iterator<Map.Entry<K, TimedCacheEntry<V>>> iterator = cache.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Map.Entry<K, TimedCacheEntry<V>> entry = iterator.next();
|
||||
if (isEntryExpired(entry.getValue())) {
|
||||
iterator.remove(); // 使用迭代器来安全移除条目
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
lock.writeLock().unlock();
|
||||
long now = TimeUtils.now();
|
||||
// 减少缓存大小调整的频率
|
||||
if (cache.size() < maxSize / 2 && maxSize > 100) {
|
||||
maxSize /= 2; // 缩小缓存容量
|
||||
}
|
||||
LOGGER.info("当前用户缓存列表大小,num:{},max:{}", size(), maxSize);
|
||||
Iterator<Map.Entry<K, TimedCacheEntry<V>>> iterator = cache.entrySet().iterator();
|
||||
HashSet<Integer> removeUsers = new HashSet<>();
|
||||
while (iterator.hasNext()) {
|
||||
Map.Entry<K, TimedCacheEntry<V>> entry = iterator.next();
|
||||
if (isEntryExpired(entry.getValue())) {
|
||||
removeUsers.add((Integer) entry.getKey());
|
||||
}
|
||||
}
|
||||
for (Integer id : removeUsers) {
|
||||
cache.remove(id);
|
||||
}
|
||||
LOGGER.info("当前用户缓存列表大小,num:{},max:{},time:{}ms", size(), maxSize, TimeUtils.now()-now);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue