0f6dc0f2创建于 2024年12月3日历史提交

memorycache 库

介绍

一个内存缓存库

1 支持缓存的读写操作

场景:

  1. 支持缓存的读写操作 是否商用:是 目标:支持缓存的读写操作

1.1 缓存读写

1.1.1 主要接口
public class LruDiskCache {
    /* 默认缓存最大容量 */
    public static let DEFAULT_MAX_SIZE: Int64 = 3 * 1024 * 1024

    /* 默认缓存路径 */
    public static let DEFAULT_PATH: String = "./cache"

    /* 默认缓存路径名 */
    public static let DEFAULT_NAME: String = "LruDiskCache"

    /*
     * 默认构造,构造一个 LruDiskCache 缓存类
     * 参数 path - 缓存路径,默认 ./cache/LruDiskCache, path 为非法目录路径时,抛 MemoryCacheException
     * 参数 maxSize - 缓存最大容量,默认 DEFAULT_MAX_SIZE, 如果大于 DEFAULT_MAX_SIZE 或者小于1 则抛 MemoryCacheException
     */
    public init(path!: String = DEFAULT_PATH + FileUtils.SEPARATOR + DEFAULT_NAME, maxSize!: Int64 = DEFAULT_MAX_SIZE)

    /*
     * 获取缓存目录路径
     * 返回值 String - 缓存目录路径
     */
    public func getPath(): String

    /*
     * 获取缓存表
     * 返回值 CustomMap<String, DiskCacheEntry> - 缓存表
     */
    public func getCacheMap(): CustomMap<String, DiskCacheEntry>

    /*
     * 获取缓存当前容量
     * 返回值 Int64 - 缓存当前容量
     */
    public func getSize(): Int64 

    /*
     * 获取缓存最大容量
     * 返回值 Int64 - 缓存最大容量
     */
    public func getMaxSize(): Int64

    /*
     * 设置缓存最大容量, 如果大于 DEFAULT_MAX_SIZE 或者小于1 则抛 MemoryCacheException
     * 参数 size - 缓存最大容量
     */
    public func setMaxSize(size: Int64)

    /*
     * 保存缓存值
     * 参数 key - 缓存键
     * 参数 context - 缓存值
     */
    public func set(key: String, context: String)

    /*
     * 保存缓存值
     * 参数 key - 缓存键
     * 参数 context - 缓存值
     */
    public func set(key: String, context: Array<UInt8>) 

    /*
     * []操作符,保存缓存值,等同于 set
     * 参数 key - 缓存键
     * 参数 context - 缓存值
     */
    public operator func [](key: String, context: String)

    /*
     * []操作符,保存缓存值,等同于 set
     * 参数 key - 缓存键
     * 参数 context - 缓存值
     */
    public operator func [](key: String, context: Array<UInt8>)

    /*
     * 读取缓存值
     * 参数 key - 缓存键
     * 返回值 Array<UInt8> - 读取缓存值
     */
    public func get(key: String): Array<UInt8>

    /*
     * 根据键值判断缓存是否存在
     * 参数 key - 缓存键
     * 返回值 Bool - 是否存在
     */
    public func contains(key: String):Bool

    /*
     * 移除缓存值
     * 参数 key - 缓存键
     */
    public func remove(key: String): Unit 

}

public class FifoCache <: Cache {
    /*
     * 默认构造,构造一个 FifoCache 缓存类
     * 参数 capacity - 缓存容量, 小于1抛 MemoryCacheException
     */
    public init(capacity: Int64)

    /*
     * 根据键值判断缓存是否存在
     * 参数 key - 缓存键
     * 返回值 Bool - 是否存在
     */
    public func contains(key: String): Bool

    /*
     * 获取缓存容量
     * 返回值 Int64 - 缓存容量
     */
    public func getCapacity(): Int64

    /*
     * 设置缓存容量
     * 参数 capacity - 缓存容量, 容量小于1时抛 MemoryCacheException
     */
    public func setCapacity(capacity: Int64)

    /*
     * 清空缓存
     */
    public func clear(): Unit

    /*
     * 读取缓存值
     * 参数 key - 缓存键
     * 返回值 Option<String>  - 读取缓存值
     */
    public func get(key: String): Option<String> 

    /*
     * 保存缓存值
     * 参数 key - 缓存键
     * 参数 value - 缓存值
     */
    public func put(key: String, value: String)

    /*
     * 移除队列缓存值
     * 返回值 Option<String> - 移除的值
     */
    public func remove(): Option<String>
}

public class MemoryCache <: Cache {
    /*
     * 默认构造,构造一个 MemoryCache 缓存类
     * 参数 capacity - 缓存容量, 小于1抛 MemoryCacheException
     */
    public init(capacity: Int64)

    /*
     * 根据键值判断缓存是否存在
     * 参数 key - 缓存键
     * 返回值 :Bool - 是否存在
     */
    public func contains(key: String): Bool

    /*
     * 获取缓存容量
     * 返回值 Int64 - 缓存容量
     */
    public func getCapacity(): Int64

    /*
     * 设置缓存容量
     * 参数 capacity - 缓存容量,容量小于1时抛 MemoryCacheException
     */
    public func setCapacity(capacity: Int64)

    /*
     * 清空缓存
     */
    public func clear(): Unit

    /*
     * 读取缓存值
     * 参数 key - 缓存键
     * 返回值 Option<String>  - 读取缓存值
     */
    public func get(key: String): Option<String>

    /*
     * 保存缓存值
     * 参数 key - 缓存键
     * 参数 value - 缓存值
     */
    public func put(key: String, value: String): Unit

    /*
     * 移除队列缓存值
     * 返回值 Option<String> - 移除的值
     */
    public func remove(key: String): Option<String>

}

public interface Cache {
    /*
     * 读取缓存值
     * 参数 key - 缓存键
     * 返回值 Option<String> - 缓存值
     */
    func get(key: String): Option<String>
    
    /*
     * 保存缓存值
     * 参数 key - 缓存键
     * 参数 value - 缓存值
     */
    func put(key: String, value: String): Unit
}

public class CustomMap<K, V> where K <: Hashable & Equatable<K> {
    /*
     * 获取第一个键值, CustomMap 为空时抛 NoneValueException
     * 返回值 k - 键值
     */
    public func getFirstKey(): k

    /*
     * 判断键值是否存在
     * 参数 k - 键值
     * 返回值 Bool - 是否存在
     */
    public func hasKey(k: K):Bool

    /*
     * 执行自定义函数,对每一对键值对进行自定义操作
     * 参数 fn: (K, V) -> Unit - 自定义函数
     */
    public func each(fn: (K, V) -> Unit)

    /*
     * 根据缓存的key值获取对应的缓存内容
     * 参数 key - 键
     * 返回值 ?V - 值
     */
    public func get(key: K): ?V

    /*
     * 判断是否为空
     * 返回值 Bool - 是否为空
     */
    public func isEmpty(): Bool

    /*
     * 删除指定的键值对
     * 参数 key - 键值
     * 返回值 Bool - 是否删除
     */
    public func remove(key: K): Bool

    /*
     * 获取当前大小
     * 返回值 Int64 - 缓存大小
     */
    public func size(): Int64

    /*
     * 清空数据
     */
    public func clear()
    
    /*
     * 获取所有键值
     * 返回值 EquatableCollection<K> - 键值
     */
    public func keys(): EquatableCollection<K>
}

public class MemoryCacheException <: Exception {
    /*
     * 默认构造
     */
    public init()

    /*
     * 构造
     * 参数 msg - 异常信息
     */
    public init(msg: String)

    /*
     * 转换字符串
     * 返回值 String - 异常信息字符串
     */
    public func toString(): String
}

public class DiskCacheEntry {
    /*
     * 获取 name 值
     * 返回值 String - name 值
     */
    public func getName(): String

    /*
     * 获取 size 值
     * 返回值 Int64 - size 值
     */
    public func getSize(): Int64

    /*
     * 转换字符串
     * 返回值 String - 转换字符串,格式为 name - size
     */
    public func toString(): String
}