linux c/c++ 后台开发常用组件之: 高性能local cache

缓存在后台开发中是经常使用的,通常有通用的缓存服务,开源的有memcache, redis,  但是在数据量不是特别大,性能要求极高的情况,以及减少搭建和维护专门的缓存服务的成本,本地缓存具有很好的性能以及减少运维成本,本地缓存可以显著的减少网络开销,带来更高的性能,还可以避免缓存服务单点问题 ,下面是自己封装的一个基于LRU缓存淘汰算法的多线程安全LRU缓存组件,已经在项目中使用,性能比memcache高出很多。

/***************************************
function: local lru cache
author: liuyi
date: 2018.07.26
version: 2.0
****************************************/

#ifndef LOCAL_CACHE_H
#define LOCAL_CACHE_H

#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <vector>
#include <map>
#include <time.h>
#include <pthread.h>
#include <unistd.h>
using namespace std;

static int max_sleep_time = 2;
static int max_traversal_count = 10;

template<class T1, class T2>
class local_cache
{
public:
        struct cache_data
        {
            time_t begin_time;
            int expire_time;
            T2 data;
        };

        local_cache()
        {
        }

        ~local_cache()
        {
        }
        
        static void* lru_thread(void *args)
        {
            local_cache *p = (local_cache*)(args);
            while(1)
            {
                sleep(max_sleep_time);
                int count = p->lru_remove(max_traversal_count);
            }
            return NULL;
        }

        int lru_remove(int max_traversal_count)
        {
            int count = 0;
            vector<int> rand_map_index_vect;
            get_rand_map_index(m_multi_map_vect.size()/8 + 1, rand_map_index_vect);
            for(size_t i = 0; i < rand_map_index_vect.size(); i++)
            {
                size_t index = rand_map_index_vect[i];
                pthread_mutex_lock(m_multi_map_vect[index].second);
                if(m_multi_map_vect[index].first->size() >= (m_slot_max_size / 2));
                {
                    typename map<T1, cache_data>::iterator it = m_multi_
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux C/C++ 后台开发实践》是一本介绍在Linux环境下使用C/C++进行后台开发的实践指南。 该书主要分为以下几个部分: 第一部分是介绍Linux基础知识,包括Linux操作系统的原理、常用命令等。这部分的目的是为读者打下Linux基础,为后面的主题提供必要的背景知识。 第二部分是介绍C/C++语言的基础知识,包括语法、指针、内存管理等。这部分的目的是让读者熟悉C/C++语言的基本特性,为后续的后台开发做好准备。 第三部分是介绍Linux下的网络编程,包括Socket编程、网络通信协议等。这部分的目的是让读者了解网络编程的基本原理并能够使用C/C++进行网络通信。 第四部分是介绍多线程编程和进程间通信,包括线程的创建与同步、进程间的通信机制等。这部分的目的是让读者了解多线程编程和进程间通信的原理,并能够使用C/C++进行相关的开发。 第五部分是介绍常用后台开发框架和技术,包括数据库访问、消息队列、Web服务等。这部分的目的是让读者了解后台开发常用的框架和技术,并能够使用C/C++进行相关的开发。 通过阅读《Linux C/C++ 后台开发实践》,读者可以系统地了解并掌握在Linux环境下使用C/C++进行后台开发的基本技能。这本书的内容丰富、深入浅出,适合有一定编程基础的读者阅读,并可以作为后台开发工程师的参考书籍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值