缓存碎语二

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

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

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

比如:

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"公众号。

时间: 2024-10-19 01:31:53

缓存碎语二的相关文章

Solr4.8.0源码分析(19)之缓存机制(二)

Solr4.8.0源码分析(19)之缓存机制(二) 前文<Solr4.8.0源码分析(18)之缓存机制(一)>介绍了Solr缓存的生命周期,重点介绍了Solr缓存的warn过程.本节将更深入的来介绍下Solr的四种缓存类型,以及两种SolrCache接口实现类. 1.SolrCache接口实现类 前文已经提到SolrCache有两种接口实现类:solr.search.LRUCache 和 solr.search.LRUCache. 那么两者具体有啥区别呢? 1.1 solr.search.LR

[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能

[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种.NET中特别重要的缓布技术Cache.利用Cache提升程序性能. 1. 缓存Cache的命名空间 .NET中对缓存有两个命名空间 命名空间1:System.Web.Caching 命名空间2:System.Runtime.Caching 引用范围:这两个命名空间,都可以在Web和非WEB应用程序中

那些年我们一起追过的缓存写法(二)

引言 感谢园子里的同学对上一篇的支持,很高兴楼主的一些经验及想法能够对大家有一些帮助. 上次主要讨论缓存读写这块各种代码实现.本篇是就上次的问题接着来,继续看那些年我们各种缓存用法. 目录 一:缓存预热 二:多级缓存 2.1 介绍 2.2 线程缓存 2.3 内存缓存 2.4 文件缓存 2.5 分布式缓存 2.6 DB缓存 三:多层缓存 四:总结 一:缓存预热 上次有同学问过.在第一次加载时,我们的缓存都为空,怎么进行预热. 单机Web情况下,一般我们使用RunTimeCache.相对于这种情况下

.net redis数据缓存(二) redis操作List集合带分页

1.编写一个简单的redishelper类库,封装ServiceStack.Redis 1 public class RedisHelper 2 { 3 #region 基本用户名密码,使用配置文件 4 /// <summary> 5 /// 写入redis服务器的ip+port 6 /// </summary> 7 public static string WriteServerList = ConfigurationManager.AppSettings["Write

全面剖析Smarty缓存机制二[清除缓存方法]

前段时间,写了一篇 Smaryt缓存机制的几种缓存方式 ,详细介绍了三种缓存方式:全局缓存.部分缓存.局部缓存,以及通过is_cache()判断是否存在缓存来进行缓存生成.本来这篇早该完成,由于时间关系推到今天,还好思绪没有忘掉,闲话不多说,今天主要讲解Smarty缓存机制中如何清除缓存以及缓存集合的使用技巧,下面步入正题. 一.普通清除缓存方法总所周知,当你看了上一篇文章,会知道通过如下方法,对Smarty的缓存进行清除:代码示例:$smarty->clear_cache("index.

LAMP与LNMP加速与缓存优化(二)

开始配置软件,具体软件安装,可以看 LAMP与LNMP加速与缓存优化(一) vi     /application/php/lib/php.ini lamp extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/" extension = memcache.so                                                            

asp.net缓存(二)

ASP.NET页面局部缓存 有时缓存整个页面是不现实的,因为页的某些部分可能在每次请求时都需要变化.在这些情况下,只能缓存页的一部分.顾名思义,页面部分缓存是将页面部分内容保存在内存中以便响应用户请求,而页面其他部分内容则为动态内容.页面部分缓存的实现包括两种方式:控件缓存和替换后缓存. 1. 控件缓存(也称为片段缓存) 这种方式允许将需要缓存的信息包含在一个用户控件内,然后,将该用户控件标记为可缓存的,以此来缓存页面输出的部分内容.该选项允许缓存页面中的特定内容,而没有缓存整个页面,因此,每次

深入System.Web.Caching命名空间 教你Hold住缓存管理(二)

本文分三篇,从缓存所在命名空间System.Web.Caching开始,详细的介绍.NET框架提供的缓存类和操作方法.看完之后你将学会: 第一篇-如何实现简单的数据缓存 第二篇-缓存从文件中读取的数据,并通过文件依赖实现缓存数据的及时更新 第三篇-缓存数据库中的整张表,并通过数据库依赖实现缓存数据的及时更新 在学习了第一篇Cache类的用法后,下面我们来继续看看如果缓存从文件中读取的的数据,并通过缓存依赖类CacheDependency实现缓存数据的及时更新. 一,缓存依赖类CacheDepen

Python之路第一课Day10--随堂笔记(异步IO\数据库\队列\缓存之二)

一.RabbitMQ队列 1.安装: a.官网: 安装 http://www.rabbitmq.com/install-standalone-mac.html b.安装python rabbitMQ module pip install pika or easy_install pika or 源码 https://pypi.python.org/pypi/pika 2.实现最简单的队列通信 a.示意图 3.代码: a.send端 #!/usr/bin/env python import pik