你的数据库只有一个进程用,而绝不会另外被改变数据?
把整个表放入缓存,那其实就是滥用缓存的。缓存利用率这么低,那是多么奢侈的事情啊。
缓存中应该放的是比较前端的东西,例如根据某个sql语句的查询结果,那么只要这个sql语句涉及的数据库表没有改变,这个sql语句的查询就不会改变,因此就可以放到缓存里。
并不是放整个数据表。
例如csdn的首页,假设是这样的 sql 语句:
select top 40 ....n个字段里列表..... from [帖子] where [1级栏目]='.NET‘ order by [最后更新时间] desc
你可以用它或者它的md5作为缓存的key,用查询结果(序列化为实体对象集合)作为value,保存到缓存集合中。这样就能对于重复几千次的查询,直接返回“查询结果”而无须查询数据库了。
这里并不是把什么 [帖子] 表里的几千万条帖子放到缓存里,而是仅仅放40条而已。
而且不同的缓存单元,完全可能有从相同的表中查询的记录。因为缓存技术根本不纠结数据库表,而是真正从前端查询出发来缓存的。
那种纠结于数据库表、把数据库表放到缓存中的做法,其实不叫做缓存。叫做“内存数据库”。把它叫做“缓存”的人往往都是图省事,任性地滥用内存,糊弄老板和投资人的。那就是在背后的关系数据库之前再弄一层“内存数据库”额外机制,而不是缓存概念。