Cache.h 1.5 KB
Newer Older
G
groot 已提交
1 2 3 4 5 6 7 8
////////////////////////////////////////////////////////////////////////////////
// Copyright 上海赜睿信息科技有限公司(Zilliz) - All Rights Reserved
// Unauthorized copying of this file, via any medium is strictly prohibited.
// Proprietary and confidential.
////////////////////////////////////////////////////////////////////////////////

#pragma once

G
groot 已提交
9 10 11
#include "LRU.h"
#include "utils/Log.h"

G
groot 已提交
12 13 14
#include <string>
#include <mutex>
#include <atomic>
G
groot 已提交
15
#include <set>
G
groot 已提交
16 17

namespace zilliz {
J
jinhai 已提交
18
namespace milvus {
G
groot 已提交
19 20
namespace cache {

G
groot 已提交
21
template<typename ItemObj>
G
groot 已提交
22 23 24
class Cache {
public:
    //mem_capacity, units:GB
G
groot 已提交
25
    Cache(int64_t capacity_gb, uint64_t cache_max_count);
G
groot 已提交
26 27 28
    ~Cache() = default;

    int64_t usage() const { return usage_; }
G
groot 已提交
29 30
    int64_t capacity() const { return capacity_; } //unit: BYTE
    void set_capacity(int64_t capacity); //unit: BYTE
G
groot 已提交
31

G
groot 已提交
32 33 34
    double freemem_percent() const { return freemem_percent_; };
    void set_freemem_percent(double percent) { freemem_percent_ = percent; }

G
groot 已提交
35 36
    size_t size() const;
    bool exists(const std::string& key);
G
groot 已提交
37 38
    ItemObj get(const std::string& key);
    void insert(const std::string& key, const ItemObj& item);
G
groot 已提交
39 40 41
    void erase(const std::string& key);
    void print();
    void clear();
G
groot 已提交
42 43

private:
G
groot 已提交
44 45 46 47 48
    void free_memory();

private:
    int64_t usage_;
    int64_t capacity_;
G
groot 已提交
49
    double freemem_percent_;
G
groot 已提交
50

G
groot 已提交
51
    LRU<std::string, ItemObj> lru_;
G
groot 已提交
52 53 54 55
    mutable std::mutex mutex_;
};

}   // cache
J
jinhai 已提交
56
}   // milvus
G
groot 已提交
57 58
}   // zilliz

G
groot 已提交
59
#include "cache/Cache.inl"