缓存碎语二_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 缓存碎语二

缓存碎语二

 2015/3/11 23:16:00  Darren Ji  程序员俱乐部  我要评论(0)
  • 摘要:缓存很多条数据,但只读取其中的一部分数据,如何处理?比如在缓存中保存了100条数据,但读取分页数据,比如每次分页只读取10条数据。这种情况下,可以把这100条数据拆分成10次分别保存起来。每一个缓存项的key需要特别的设计,比如:01-10-products,02-10-products......如何避免缓存一些不需要的数据?比如:publicclassTeacher{publicintId{get;set;}publicstringName{get;set;
  • 标签:缓存

缓存很多条数据,但只读取其中的一部分数据,如何处理?

 

比如在缓存中保存了100条数据,但读取分页数据,比如每次分页只读取10条数据。这种情况下,可以把这100条数据拆分成10次分别保存起来。每一个缓存项的key需要特别的设计,比如:01-10-products, 02-10-products......

 

如何避免缓存一些不需要的数据?

 

比如:

monospace; width: 100%; margin: 0em; background-color: #f0f0f0">public class Teacher
{
    public int Id{get;set;}
    public string Name{get;set;}
    public Department Department{get;set;}
}
public class Department
{
    public int Id{get;set;}
    public string Name{get;set;}
}

 

这里只想把Teacher缓存起来,但是,如果采用.NET默认的序列化机制,即在Teacher这个类上打上Serializable特性,序列化Teacher的时候,也会把引用属性Department对应的类Department一同序列化。

 

解决这个问题的方法是:在不需要被序列化的类上打上[NonSerialized]特性,或者实现ISerializable接口自定义序列化的逻辑。

 

如何实现通过不同的key读取相同的缓存项?

 

比如缓存产品,有时候把产品名作为key保存起来,有时候通过集合索引来从缓存中获取产品,这时候我们可以把不同形式的key连接成字符串作为key。

var product = GetProduct();
cache["prod_1"] = product;
......
var cacheProduct = cache["prod_1"];

 

参考资料:汪洋的"DotNet"公众号。

发表评论
用户名: 匿名