开源框架编码技巧一(缓存设计篇)

文章介绍了Nacos中缓存的设计,包括Cache接口及其通用缓存项配置,展示了SimpleCache、AutoExpireCache(实现过期清理)、SynchronizedCache(线程安全)和LruCache(LRU缓存)四种不同的实现方式,以及如何通过CacheBuilder构建不同特性的缓存。

一、本地缓存设计

1、Nacos的缓存结构设计为例,通用缓存为例,支持不同模式的缓存,

支持更复杂功能,可以直接使用Guava和Caffine直接使用.

   ①、Cache缓存接口.

package com.alibaba.nacos.common.cache;

import java.util.concurrent.Callable;

/**
 * Cache method collection definition.
 * @author zzq
 * @date 2021/7/30
 */
public interface Cache<K, V> {

    /**
     * Cache a pair of key value. If the key value already exists, the value will be overwritten.
     * @param key cache key
     * @param val cache value
     */
    void put(K key, V val);
    
    /**
     * Take the corresponding value from the cache according to the cache key.
     * @param key cache key
     * @return cache value
     */
    V get(K key);
    
    /**
     * Get the value in the cache according to the primary key, and put it into the cache after processing by the function.
     * @param key cache key
     * @param call a function, the return value of the function will be updated to the cache
     * @return cache value
     * @throws Exception callable function interface throw exception
     */
    V get(K key, Callable<? extends V> call) throws Exception;
    
    /**
     * Take the corresponding value from the cache according to the cache key, and remove this record from the cache.
     * @param key cache key
     * @return cache value
     */
    V remove(K key);
    
    /**
     * Clear the entire cache.
     */
    void clear();
    
    /**
     * Returns the number of key-value pairs in the cache.
     * @return  number of key-value pairs
     */
    int getSize();
}

  CacheItemProperties【通用缓存项配置】

package com.alibaba.nacos.common.cache.builder;

/**
 * Cache item's own attributes.
 * @author zzq
 * @date 2021/7/30
 */
public class CacheItemProperties {
    
    private long expireNanos;
    
    public long getExpireNanos() {
        return expireNanos;
    }
    
    public void setExpireNanos(long expireNanos) {
        this.expireNanos = expireNanos;
    }
}

2、缓存实现

①、SimpleCache,不带任何功能.

package com.alibaba.nacos.common.cache.impl;

import com.alibaba.nacos.common.cache.Cache;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;

/**
 * Simple implementation of {@code Cache}.
 * @author zzq
 * @date 2021/7/30
 */
public class SimpleCache<K, V> implements Cache<K, V> {
    
    private Map<K, V> cache;
 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道之简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值