|
|
@@ -0,0 +1,128 @@
|
|
|
+package com.dongzili.data.mapdb;//package com.kqns.dataservice.common.mapdb;
|
|
|
+//
|
|
|
+//import com.kqns.dataservice.custom.user.entity.ApiAccessLog;
|
|
|
+//import lombok.RequiredArgsConstructor;
|
|
|
+//import org.mapdb.DB;
|
|
|
+//import org.mapdb.HTreeMap;
|
|
|
+//import org.mapdb.IndexTreeList;
|
|
|
+//import org.springframework.scheduling.annotation.Async;
|
|
|
+//import org.springframework.scheduling.annotation.Scheduled;
|
|
|
+//import org.springframework.stereotype.Service;
|
|
|
+//
|
|
|
+//import java.util.ArrayList;
|
|
|
+//import java.util.List;
|
|
|
+//import java.util.Map;
|
|
|
+//import java.util.concurrent.locks.ReadWriteLock;
|
|
|
+//import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|
|
+//
|
|
|
+//@Service
|
|
|
+//@RequiredArgsConstructor
|
|
|
+//public class MapDbService {
|
|
|
+// private final DB db; // 直接注入DB对象
|
|
|
+// private final HTreeMap<String, ApiAccessLog> dataMap;
|
|
|
+// private final IndexTreeList<ApiAccessLog> dataList;
|
|
|
+//
|
|
|
+// // 使用读写锁确保线程安全
|
|
|
+// private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
|
|
|
+//
|
|
|
+// public void put(String key, ApiAccessLog value) {
|
|
|
+// rwLock.writeLock().lock();
|
|
|
+// try {
|
|
|
+// dataMap.put(key, value);
|
|
|
+// db.commit(); // 显式提交
|
|
|
+// } catch (Exception e) {
|
|
|
+// db.rollback(); // 回滚事务
|
|
|
+// throw new RuntimeException("Transaction failed", e);
|
|
|
+// } finally {
|
|
|
+// rwLock.writeLock().unlock();
|
|
|
+// }
|
|
|
+// }
|
|
|
+// public void batchUpdate(Map<String, ApiAccessLog> entries) {
|
|
|
+// rwLock.writeLock().lock();
|
|
|
+// try {
|
|
|
+// dataMap.putAll(entries);
|
|
|
+// db.commit(); // 提交事务
|
|
|
+// } catch (Exception e) {
|
|
|
+// db.rollback(); // 回滚事务
|
|
|
+// throw new RuntimeException("Transaction failed", e);
|
|
|
+// }finally {
|
|
|
+// rwLock.writeLock().lock();
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// public Object get(String key) {
|
|
|
+// rwLock.readLock().lock();
|
|
|
+// try {
|
|
|
+// return dataMap.get(key);
|
|
|
+// } finally {
|
|
|
+// rwLock.readLock().unlock();
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Async
|
|
|
+// public void add(ApiAccessLog value){
|
|
|
+// rwLock.writeLock().lock();
|
|
|
+// try{
|
|
|
+// dataList.add(value);
|
|
|
+// db.commit(); // 提交事务
|
|
|
+// }catch (Exception e){
|
|
|
+// db.rollback(); // 回滚事务
|
|
|
+// throw new RuntimeException("Transaction failed", e);
|
|
|
+// } finally {
|
|
|
+// rwLock.writeLock().unlock();
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// public void addBatch(List<ApiAccessLog> values){
|
|
|
+// rwLock.writeLock().lock();
|
|
|
+// try{
|
|
|
+// dataList.addAll(values);
|
|
|
+// db.commit(); // 提交事务
|
|
|
+// }catch (Exception e){
|
|
|
+// db.rollback(); // 回滚事务
|
|
|
+// throw new RuntimeException("Transaction failed", e);
|
|
|
+// } finally {
|
|
|
+// rwLock.writeLock().unlock();
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// public List<ApiAccessLog> getAll(){
|
|
|
+// rwLock.readLock().lock();
|
|
|
+// try{
|
|
|
+// List<ApiAccessLog> returnList = new ArrayList<>(dataList);
|
|
|
+// dataList.clear();
|
|
|
+// return returnList;
|
|
|
+// } finally {
|
|
|
+// rwLock.readLock().unlock();
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// public List<ApiAccessLog> getList(int from, int to){
|
|
|
+// rwLock.readLock().lock();
|
|
|
+// try{
|
|
|
+// return dataList.subList(from, to);
|
|
|
+// } finally {
|
|
|
+// rwLock.readLock().unlock();
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// public List<ApiAccessLog> getList(int size){
|
|
|
+// rwLock.readLock().lock();
|
|
|
+// try{
|
|
|
+// List<ApiAccessLog> list = dataList.subList(0, Math.min(size, dataList.size()));
|
|
|
+// List<ApiAccessLog> returnList = new ArrayList<>(list);
|
|
|
+// dataList.removeAll(list);
|
|
|
+// return returnList;
|
|
|
+// } finally {
|
|
|
+// rwLock.readLock().unlock();
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+//
|
|
|
+// @Scheduled(cron = "0/5 * * * * ?")
|
|
|
+// public void doHandlerApiAccessLog(){
|
|
|
+//
|
|
|
+// System.out.println("size: "+dataList.size());
|
|
|
+// }
|
|
|
+//
|
|
|
+//}
|