`

memcacheq的hashtable

 
阅读更多

阅读memcacheq的hashtable实现的时候,发现在创建一个存储链表的数组时,使用void **的方法建立数组,即数组里存放的是链表指针,这样在删除元素时,只需要用一个指针的指针(保存当前链表实体的地址),这样删除就方便多了

struct entry
{
    void *k, *v;
    unsigned int h;
    struct entry *next;
};

struct hashtable {
    unsigned int tablelength;
    struct entry **table;
    unsigned int entrycount;
    unsigned int loadlimit;
    unsigned int primeindex;
    unsigned int (*hashfn) (void *k);
    int (*eqfn) (void *k1, void *k2);
};
void * hashtable_remove(struct hashtable *h, void *k)
{
    /* TODO: consider compacting the table when the load factor drops enough,
     *       or provide a 'compact' method. */

    struct entry *e;
    struct entry **pE;
    void *v;
    unsigned int hashvalue, index;

    hashvalue = hash(h,k);
    index = indexFor(h->tablelength,hash(h,k));
    pE = &(h->table[index]);
    e = *pE;
    while (NULL != e)
    {
        /* Check hash value to short circuit heavier comparison */
        if ((hashvalue == e->h) && (h->eqfn(k, e->k)))
        {
            *pE = e->next;
            h->entrycount--;
            v = e->v;
            freekey(e->k);
            free(e);
            return v;
        }
        pE = &(e->next);
        e = e->next;
    }
    return NULL;
}
 
分享到:
评论

相关推荐

    memcacheq-0.2.0.tar.gz

    标题中的"memcacheq-0.2.0.tar.gz"是一个开源软件的版本标识,它表明我们要讨论的是Memcacheq的一个特定版本,即0.2.0。Memcacheq是PHP环境中实现的消息队列系统,它利用了Memcached的高效缓存机制来处理消息传递。...

    PHP消息中间件----消息队列: MEMCACHEQ相关插件.rar

    MEMCACHEQ利用Memcache的内存存储特性,提供快速的存取性能,降低了数据库的压力,提高了系统的吞吐量。 MEMCACHEQ作为一个开源的PHP消息队列,它的主要特点包括: 1. **轻量级**:由于依赖于Memcache,其整体设计...

    MemcacheQ安装及使用方法

    **MemcacheQ** 是一款轻量级的分布式队列服务,它主要被设计用来处理大量数据的异步处理。在本文中,我们将详细介绍如何安装和使用MemcacheQ,以及其依赖的组件BerkeleyDB和libevent。 ### 一、安装 #### 1. 安装...

    解析linux下安装memcacheq(mcq)全过程笔记.docx

    【标题】:“解析Linux下安装memcacheq(mcq)全过程笔记” 【描述】:这篇文档详细介绍了在Linux环境中安装memcacheq的过程,memcacheq是一个轻量级的分布式消息队列服务,适用于缓解高并发环境下的系统压力。 ...

    解析linux下安装memcacheq(mcq)全过程笔记

    Linux环境下安装MemcacheQ(mcq)的全过程涉及多个步骤,包括安装前的准备、安装过程以及如何启动MemcacheQ服务。以下是从标题、描述和部分内容中提取的知识点: 1. MemcacheQ的应用背景和必要性 - 高并发Web应用...

    Linux 下安装 memcached 及 memcacheq的方法

    在Linux系统中,Memcached和Memcacheq是两种常用的内存缓存系统。Memcached是一个高性能、分布式的内存对象缓存系统,用于减少数据库负载,提高网站性能。而Memcacheq是Memcached的一个增强版本,增加了队列管理功能...

    Memcache学习资料

    文档从缓存原理到实际应用,简明扼要的讲解了Memcached通俗易懂容易理解。

    message_system_test_report.rar_ActiveMQ java_activemq_httpsqs_me

    本测试报告涉及到多个消息队列服务的安装部署及性能测试,包括ActiveMQ、HTTPSQS、Kestrel和MemcacheQ。下面将对这些知识点进行详细的阐述。 首先,ActiveMQ是Apache软件基金会开发的一款开源消息代理,它是基于...

    微博架构与平台安全介绍

    在第二个阶段,微博架构继续改进,采用异步方式,使用MemcacheQ增强系统的稳定性。在高并发下,系统的稳定性极大提高。为了解决单点故障和数据压力问题,微博架构采用了静态内容CDN加速和数据压力及峰值的解决方法。...

    QCon 北京 2010大会演讲之:构建可扩展微博架构,演讲者:Tim Yang,新浪微博技术架构师

    在新浪微博的实际应用中,使用了轻量级的消息队列产品,如Twitter的Kestrel、Erlang实现的RabbitMQ以及广泛使用的Memcacheq。 异步设计不仅降低了发表操作的复杂性,还确保了系统的响应速度和稳定性,从而能够有效...

    关于php 高并发解决的一点思路

    我的思路如下(伪代码): sql1:查询商品库存 if(库存数量 > 0) { //生成订单... sql2:同时库存-1 } 当没有并发时,上面的流程看起来是再正常不过...这里我可使用消息队列,我们常用到Memcacheq、Radis。 比如:有100张

    RabbitMQ技术详解

    - **MemcacheQ (mcq)**:这是一个轻量级、与memcache协议兼容的持久化消息队列,适合对性能要求高的场景。 - **MSMQ**:微软的Message Queuing服务,适用于Windows环境,简单且有限制,但可通过与其他框架结合增强...

    新浪微博架构与平台安全PPT学习教案.pptx

    为了提高发表速度和系统的可靠性,引入了异步处理机制,如MemcacheQ和stats queue,进一步提升了在高并发下的系统稳定性。同时,数据库层面引入了InnoDB引擎,以解决MyISAM的锁表问题,通过PHP中的libmemcached替换...

    新浪微博架构与平台安全演讲稿

    此外,引入了异步处理,如发表异步化,使用MemcacheQ增强了系统的可靠性,并增加了stats queue,以适应大规模运维。 然而,随着系统继续高速发展,新的挑战接踵而至,如单点故障、"雪崩"效应、国内网络环境的复杂性...

    微博架构与平台安全

    此外,发表过程被异步化,使用MemcacheQ进行队列管理,提升了系统的稳定性和可靠性。 随着用户基数的持续扩大,微博面临了单点故障、访问速度和数据压力等问题。为解决这些问题,微博转向了服务化的架构,将平台...

    Memcached相关资料

    例如,`memcacheq启动参数.txt`可能包含了这些参数的详细说明。 7. **安全与稳定性**:虽然Memcached默认不提供安全性措施,如认证和加密,但在生产环境中通常需要配合防火墙规则或代理服务来增加安全性。此外,...

Global site tag (gtag.js) - Google Analytics