我正在尝试使用MaxMind GeoIP数据库,我注意到C API提供了许多不同的缓存模式作为GeoIP_open
初始化调用的标志。
GEOIP_MEMORY_CACHE
GEOIP_CHECK_CACHE
GEOIP_INDEX_CACHE
GEOIP_MMAP_CACHE
这些是标志位,所以你可以提供它们的任何一组,但是没有关于这些标志意味着什么或它们做什么,或者(或许最重要的)它们如何相互作用的文档。
benchmarks page表示GEOIP_MEMORY_CACHE
使GEOIP_CHECK_CACHE
更快,{{1}}使其变慢,但没有迹象表明您为什么要使用(或不使用)任何这些标志
答案 0 :(得分:4)
他们的github页面描述了这些缓存的目的。
GEOIP_STANDARD - Read database from file system. This uses the least memory.
GEOIP_MEMORY_CACHE - Load database into memory. Provides faster performance but uses more memory.
GEOIP_CHECK_CACHE - Check for updated database. If database has been updated, reload file handle and/or memory cache.
GEOIP_INDEX_CACHE - Cache only the the most frequently accessed index portion of the database, resulting in faster lookups than GEOIP_STANDARD, but less memory usage than GEOIP_MEMORY_CACHE. This is useful for larger databases such as GeoIP Organization and GeoIP City. Note: for GeoIP Country, Region and Netspeed databases, GEOIP_INDEX_CACHE is equivalent to GEOIP_MEMORY_CACHE.
GEOIP_MMAP_CACHE - Load database into mmap shared memory. MMAP is not available for 32bit Windows.
可以使用位运算符组合这些选项。例如,您可以通过调用以下方法同时使用GEOIP_MEMORY_CACHE和GEOIP_CHECK_CACHE: GeoIP_open(“/ path / to / GeoIP.dat”,GEOIP_MEMORY_CACHE | GEOIP_CHECK_CACHE);