共计 4 篇文章

了解一致性哈希算法

用途 一致性哈希算法是为了解决普通哈希算法的热点问题,当使用普通哈希算法来切割数据到不同的缓存服务器时。 一旦缓存服务器的数量产生变化,客户端向缓存服务器请求相应的数据就不会命中,转而请求具体的数据库服务器,从而造成 缓存击穿。 下面我们来看一下使用普通哈希算法时所带来的问题,假如我们拥有 10 台缓存服务器,那么我们在存放数据的时候可以对缓存数据项的 Key 进行哈希操作,取得其散列值,并将其与服务器数量进行取模运算,就可以得到一个服务器下标的数字。 服务器信息 = Hash(Key) % 10 例如我针对字符串 "140" ...

NuGet 手动清除缓存不起作用

问题 有时更新了一些内网的程序库/包,但仅仅是一些小的更改,不想增加版本号再推送到内网服务器。手动删除了 .nuget 文件夹下的相关包文件,但是使用 Visual Studio 重新构建的时候,其使用的包版本仍然不正确。 原因 原因未知,可能是由于缓存未清理彻底造成的。 解决 NuGet 包相关的文件夹,除了 .nuget 文件夹以外,还有其他两个缓存/临时文件夹,将这两个文件夹清空之后,程序可以正常构建。 ...

Abp 源码分析:八、缓存管理

0.简介 缓存在一个业务系统中十分重要,常用的场景就是用来储存调用频率较高的数据。Abp 也提供了一套缓存机制供用户使用,在使用 Abp 框架的时候可以通过注入 ICacheManager 来新建/设置缓存。 同时 Abp 框架也提供了 Redis 版本的 ICacheManager 实现,你也可以很方便的将现有的内存缓存替换为 Redis 缓存。 0.1 典型使用方法 public ...

在 C# 当中实现 LRU Cache

在常用的缓存设计模式当中,LRU是比较简单且常见的一种缓存设计方案,简单说来就是在缓存队列当中,使用频率越低的对象,越会被踢出队列。 原理的话很简单,我们有一个字典容器,还有一个双向链表。 字典容器则是我们缓存对象真正存储的地方,双向链表的作用则是用来记录当前缓存队列的使用频率情况,当用户命中一个缓存对象的时候,双向链表就回将这个对象的键ID放在最前面,这样就能够保证使用率最低的对象是存放在最末位。如果当我们添加了一个新的缓存对象的时候,但是字典容器满了,这个时候我们只需要找到双向链表当中最末位的那个缓存对象将其踢出队列,之后再将新的缓存对象存放到字典容器当中。 说了这么多,还是上代码吧: public class LRUCache<TKey,TValue> ...