看数据量呗,如果数据量较小,可以把发送的号码、内容和时间放在内存中做缓存,如果认为内容太长占用内存太多,可以考虑取hash值存储,10分钟没有发送则失效(可以用一个线程循环扫描)。如果数据量较大,则可以考虑建一个缓存表,工作原理与前面一样,只是把存放在内存中的存放在数据库中了。不过一般10分钟应该不会有太多吧。如果小于几十万这种数量级,可以考虑放在内存中,这样性能会比较好。
调试欢乐多
List来做这个不太合适吧,除非你的数据量非常小。
如果你的数据量稍微大一点,查找号码将会耗费大量的时间。因为List查找只能是遍历,没有更好的办法。为什么不用OSCache之类的缓存框架呢,应该能省很多事情。
var key = hash(num+mess);
var date=map.get(key);
if(date=null) send();
else if(nowDate-date > 10min) send(); map.put(key,nowDate);
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());
} }