Guava缓存实现

public interface LocalCacheService {
    void addChannel(String id, Channel channel);

    Channel getChannel(String id);

    boolean isChannelExists(String id);

    void removeChannel(String id);

    long getConnectNum();
}


/**
 * @author jacky
 */
@Service
public class LocalCacheServiceImpl implements LocalCacheService {

    private static final Logger LOGGER = LoggerFactory.getLogger(LocalCacheService.class);

    @Value("${channel_cache_max_size:100000}")
    private int cacheMaxSize;

    // channel cache 超时时间(秒)
    @Value("${cache_expire_after_access_seconds:600}")
    private int cacheExpireAfterAccessSeconds;

    // channel cache 日志打印间隔时间(分钟)
    @Value("${cache_stats_schedule_minutes:2}")
    private int cacheStatsScheduleMinutes;

    private Cache<String, Channel> channelCache;


    @PostConstruct
    private void init() {
        channelCache = CacheBuilder.newBuilder()
                .maximumSize(cacheMaxSize)
                .expireAfterAccess(cacheExpireAfterAccessSeconds, TimeUnit.SECONDS)
                .recordStats()
                .removalListener(new RemovalListener<String, Channel>() {
                    @Override
                    public void onRemoval(RemovalNotification<String, Channel> notification) {
                        LOGGER.info("channel cache remove: {}, cause: {}.", notification.getKey(), notification.getCause());
                    }
                })
                .build();

        Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                channelCache.cleanUp();
                LOGGER.info("session cache size:{}, stats:{}.", channelCache.size(), channelCache.stats());
            }
        }, cacheStatsScheduleMinutes, cacheStatsScheduleMinutes, TimeUnit.MINUTES);
    }

    @Override
    public void addChannel(String id, Channel channel) {
        channelCache.put(id, channel);
    }

    @Override
    public Channel getChannel(String id) {
        return channelCache.getIfPresent(id);
    }

    @Override
    public boolean isChannelExists(String id) {
        return null != channelCache.getIfPresent(id);
    }

    @Override
    public void removeChannel(String id) {
        channelCache.invalidate(id);
    }

    @Override
    public long getConnectNum() {
        return channelCache.size();
    }


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值