有一个应用户是根据IP做限制,比如:一个页面同一IP在一定时间内只能访问一次,我把IP信息信息保存在HashTable中,但是随着访问量的增加HashTable占的内存太多了,帮忙提个建议,怎么在内存中保存这个信息会省点内存呢,多谢

解决方案 »

  1.   

    说了一点反应都没有,你数据结构的基础也太差了。参考 http://bbs.csdn.net/topics/360200867你的问题本质上和统计海量文本中出现了多少种不同的单词,以及每个单词的出现次数,是一样的。
      

  2.   

    每个不同的IP只相当于一个4个字符长度的单词。(标准单词每个字符是26个选择之一,你是256个之一)你海量输入的IP就好比包含这些单词的文本。
      

  3.   

    放到数据库不好么
    load
    {
    获取ip
    从数据库取出该ip最近一次登录时间,
    now-上一次登录时间   是否大于 规定的时间吧该次登录时间存到数据库
    }
      

  4.   

    1. hashtable 本来就是一个散列函数,使用的空间大于实际空间,比较占内存。
    2.ip地址如果用string保存会比较占内存,你可以写一个struct,里面用4个byte表示,这样能省不少空间。
    最好用数据库保存。
      

  5.   

    如果是IPv4可以转成uint,否则需要4个uint的struct。
    内存不足应该使用优先队列,数据被淘汰并且在有效时间范围内的话导入数据库中。