看数据量呗,如果数据量较小,可以把发送的号码、内容和时间放在内存中做缓存,如果认为内容太长占用内存太多,可以考虑取hash值存储,10分钟没有发送则失效(可以用一个线程循环扫描)。如果数据量较大,则可以考虑建一个缓存表,工作原理与前面一样,只是把存放在内存中的存放在数据库中了。不过一般10分钟应该不会有太多吧。如果小于几十万这种数量级,可以考虑放在内存中,这样性能会比较好。

解决方案 »

  1.   


    List来做这个不太合适吧,除非你的数据量非常小。
    如果你的数据量稍微大一点,查找号码将会耗费大量的时间。因为List查找只能是遍历,没有更好的办法。为什么不用OSCache之类的缓存框架呢,应该能省很多事情。
      

  2.   

    用memcached  把号码+内容作为key存10分钟  用key判断  如果存在return false
      

  3.   

    定义一个容器(根据实际数据量选择内存,数据库,文件等)(号码+内容)做摘要(sh1,md5都可以)作为唯一标识(map的key,数据库中的主键等)拿小数据量用map来说var map(str,date);
    var key = hash(num+mess);
    var date=map.get(key);
    if(date=null) send();
    else if(nowDate-date > 10min) send(); map.put(key,nowDate);
      

  4.   

    简单的一个小例子 public static final Map<Integer, Long> cache = new HashMap<Integer, Long>(); public static void main(String[] args) { String phone = "13xxxxxxxxx";
    String msg = "xxxxxxxx"; StringBuilder builder = new StringBuilder(); Integer key = builder.append(phone).append(msg).hashCode();
    if (cache.containsKey(key)) {
    Long lastTime = cache.get(key);
    if ((System.currentTimeMillis() - lastTime) < 600000) {
    // TODO:
    } else {
    cache.remove(key);
    }
    } else {
    cache.put(key, System.currentTimeMillis());
    } }