1、先查缓存,缓存不存在查数据库,数据库中如果存在则存入缓存
问题:大量不存在的数据导致数据库的查询频次高,有900多万次;因为该功能上线默认为不存在,所以正常用户访问也是每次都查询
2、先查缓存,缓存中不存在查数据库,数据库如果存在则存结果入缓存;如果不存在则存-1入缓存;
数据库的查询次数明显降低为不到50万
3、先查bloom过滤器,如果不存在则返回;如果存在则查询缓存,缓存中不存在查数据库,数据库如果存在则存结果入缓存,设置bloom过滤器
开发库中memorys表是redis中数据大小
7391未设置之前的信息
127.0.0.1:7391> info
used_memory:857656
used_memory_human:837.55K
设置1000万 bit后的信息:
used_memory:2958968
used_memory_human:2.82M
设置10亿 bit后的信息:
used_memory:126693872
used_memory_human:120.82M
设置100亿 bit后的信息:
used_memory:541955448
used_memory_human:516.85M
设置100万个key为uif:userid,field为aqs,value:-1后
used_memory:121227320
used_memory_human:115.61M
设置1万个最大值为100亿的key为uif:userid,field为aqs,value:-1后
used_memory:2134728
used_memory_human:2.04M
写入1000万个1至文件.txt中,较快,大小为9.53M
在目前的大小下,占用内存较小;
结论:根据最大值和值的稀疏程度来确定使用哪种方案
如果最大值较大且值比较稀,则选择使用方案2;否则可以使用方案1