班嘉淑 发表于 2025-5-29 20:08:10

谈谈我的缓存(一)

看了老赵写的相关缓存的话题,说实话,缓存的概念实在是很大,不过其一点不变,就是尽可能的简化处理机制,尽量的减少应用程序间的交互(不知道这样表达对不对,其实也说大不清,呵呵见谅),为此我也把我作的缓存拿出来谈一下,希望有好的地方能一起分享,不好的地方及结构,也请各位指出,让我也能进行完善。
可能会分3次讲完
第一步:先讲一下我目前的缓存结构(不好的话大家不要拍砖啊 呵呵)
第二步:讲解一下怎样实现缓存的操作,以及中间的一些问题点
第三步:缓存怎样自动更新和手动更新
 
目前该缓存方案运用于某网站,独立ip的日访问量大概在10-15万左右(应该不算多也不算少报,呵呵),至少目前而言没有任何问题.
 
特别先说明一下,以下谈的缓存只针对数据缓存而言(虽然是可以支持object类型的缓存,但是为了方便说明,还是只以数据缓存为例)
 
首先我们利用hash来构建立一个K/V结构缓存大容器,我在这个时候key表示的数据缓存(例如DBCache),而value则针对该库的缓存。(我们称这个K/V 叫CacheContainer)
CacheContainer 是可以包含数据缓存也可以包含图片等object缓存
我目前是有2种缓存一种是object类型,一种的数据类型,那么也就是说这个容器有2个value。
 
此时,我们还是建立K/V结构,来作为CacheContainer的value,这时我们的key可以是DataBaseName的名(或者其他,如果你的缓存量非常大,可能需要分割多个hash块,以便提高性能)。而value则是我们针对这个database 的缓存。(我们称这个叫CacheDBContainer)
 
我们最后一个K/V结构,则是真正的数据存放块
key可以是有CacheContainerKey+CacheDBContainerKey+SqlQuery来构造,而value则是dt来组成
 
自此我们大概容器类的缓存结构都建立完成了。我都使用Hashtable.Synchronized(new Hashtable())来解决他们直接互斥并发等问题。
 
接下来我把CacheDBContainer提炼出来,组建了一个CacheModel。看事例代码。
public CacheEnum CacheType { get; set; } 
public string CacheKey { get; set; }
public Hashtable CacheObj { get; set; }
 
其中枚举代表着那种类型的缓存,即CacheContainer的key
CacheKey代表着CacheDBContainer的key
CacheObj 当然代表了我CacheDBContainer对应key的缓存列表
 
这个Model提供了如下方法
SetCache,RemoveCache,RefreshCache等针对CacheObj的操作
 
我还创建了一个CacheModelList 来缓存了CacheModel对象,以便于不需要每次使用时都需要new 一个这样的CacheModel.
 
接下来我们先谈一下怎么进行缓存操作。
我们设计一个ICache的接口,这个接口很简单,只要实现SQL的Query方法就可以了。
例如ICache.Query(sql)。
 
重点是这个接口有2个比较重要的属性,
CacheKey:是你需要指定该接口属于那个CacheDBContainer中的那个CacheKey,
ISqlHelper:你需要把数据库操作类传进来,以便你没有命中缓存时,直接数据库查询。
 
我们可以创建一个CacheDbFactory来创建ICache,当然这个ICache接口也可以缓存起来,放到一个List里面,以便不需要每次都new一个对象出来。
 
接下来我们大致的操作代码流程就是
ICacheDb iCache=CacheDbFactory.GetCls(iSqlHelper,strCacheKey);
iCache.Query(strSql)
 
那么我们的Query是怎样实现缓存的命中呢,我们在第二篇讲

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

崔和美 发表于 2025-11-1 13:13:43

很好很强大我过来先占个楼 待编辑

溥价 发表于 2025-11-9 10:55:04

感谢分享

套缈 发表于 2025-12-7 04:37:20

用心讨论,共获提升!

辖瑁地 发表于 2025-12-16 11:23:27

这个有用。

泡市 发表于 2026-1-13 10:05:44

感谢发布原创作品,程序园因你更精彩

恙髡 发表于 2026-1-19 10:37:07

yyds。多谢分享

恃液 发表于 2026-1-21 04:02:35

懂技术并乐意极积无私分享的人越来越少。珍惜

庾芷秋 发表于 2026-1-21 12:29:25

感谢分享,下载保存了,貌似很强大

存叭 发表于 2026-1-25 11:25:51

感谢发布原创作品,程序园因你更精彩

浦乐 发表于 2026-1-25 19:37:37

喜欢鼓捣这些软件,现在用得少,谢谢分享!

套缈 发表于 2026-1-29 08:48:28

过来提前占个楼

甦忻愉 发表于 2026-1-30 02:57:26

喜欢鼓捣这些软件,现在用得少,谢谢分享!

粉押淫 发表于 2026-2-6 07:28:25

谢谢楼主提供!

诸婉丽 发表于 2026-2-8 20:23:21

这个好,看起来很实用

鄂缮输 发表于 2026-2-9 02:55:48

这个有用。

篁瞑普 发表于 2026-2-9 20:54:26

懂技术并乐意极积无私分享的人越来越少。珍惜

染罕习 发表于 2026-2-10 23:01:12

用心讨论,共获提升!

揉幽递 发表于 2026-2-11 02:49:04

很好很强大我过来先占个楼 待编辑

梅克 发表于 2026-2-11 18:22:48

过来提前占个楼
页: [1] 2
查看完整版本: 谈谈我的缓存(一)