首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏NetCore 从壹开始

    MemoryCache:内存缓存

    var value = factory.GetRequiredService<IOptions<MemoryCacheOptions>>(); var cache = new MemoryCache

    56370编辑于 2023-08-23
  • 来自专栏JusterZhu

    内存缓存MemoryCache

    以下文章来源于智能大石头 ,作者智能大石头 内存缓存MemoryCache实现了ICache接口,Redis同样实现了ICache接口,两者在缓存操作上达到了高度抽象统一。 应用设计时一律使用ICache接口,开发环境装配为MemoryCache,生产环境根据分布式需要可以装配为Redis。如果应用系统没有分布式需求,继续使用MemoryCache更好。 超高性能 MemoryCache核心是并行字典ConcurrentDictionary,由于省去了序列化和网络通信,使得它具有千万级超高性能(普通台式机实测2.87亿tps)。 MemoryCache支持过期时间,默认容量10万个,未过期key超过该值后,每60秒根据LRU清理溢出部分。 常用于进程内千万级以下数据缓存场景。 缓存项未达到最大值Capacity时,MemoryCache定时检查并剔除过期项。

    1.1K20编辑于 2022-12-07
  • 来自专栏JusterZhu

    C# MemoryCache

    什么是MemoryCacheMemoryCache是一个基于内存的缓存服务,它是System.Runtime.Caching命名空间的一部分。 MemoryCache的工作原理 MemoryCache使用键值对来存储数据,数据在被添加到缓存时会附带一个过期时间。 如何使用MemoryCacheMemoryCache的工作原理 MemoryCache使用键值对来存储数据,数据在被添加到缓存时会附带一个过期时间。 如何使用MemoryCache

    67910编辑于 2023-11-27
  • 来自专栏.NET开发那点事

    MemoryCache 如何清除全部缓存?

    本来以为很简单的调用一下 MemoryCache.Clear 方法就完事了。谁知道 MemoryCache 类以及 IMemoryCache 扩展方法都没有 Clear 方法。 于是研究了一下 ,找到一些方法,下面介绍两个方法: 自定义 CacheWrapper 包装类 MemoryCache 构造 Entry 的时候支持传入 CancellationChangeToken 对象 那么我们只要对 MemoryCache 类包装一下很容易实现一个自己的 Cache 类。 _memoryCache = memoryCache; } public void Add(object key, object value, MemoryCacheEntryOptions 于是不死心继续研究,后来直接看了 MemoryCache 的代码(源码在这),开源真香。发现 MemoryCache 有个 Compact 方法好像在干删除的勾当。

    3.3K10编辑于 2021-12-21
  • 来自专栏喵叔's 专栏

    谈谈MemoryCache原生插值方式

    案例 我们都知道.NET运行时内置了常用缓存模块MemoryCache,它暴露了以下几个属性和方法: public int Count { get; } public void Compact(double 从代码中可以看出使用的是MemoryCache原生方法,但一般我们不这么用,而是使用位于同一命名空间的扩展方法 Set,代码如下: var s = new MemoryCache(new MemoryCacheOptions 为什么使用Dispose方法来向MemoryCache插值呢?这个问题在2017年开始就有人质疑这个设计,但是官方为了不引入Break Change,一直保持现状到现在。 因此根据现状,如果使用MemoryCache的原生插值方法,代码需要这么些: var s = new MemoryCache(new MemoryCacheOptions { }); using (var 总结 MemoryCache插值的实现过程很奇葩,我们应尽量使用带明确大括号范围的using语法,C#8.0推出的不带大括号的using语法糖的作用时刻在函数末尾,这会带来误解。

    44930编辑于 2021-12-31
  • 来自专栏精益码农

    浅谈MemoryCache的原生插值方式

    .NET运行时内置了常用的缓存模块:MemoryCache 标准的MemoryCache暴露了如下几个属性和方法: public int Count { get; } public void Compact ---- 但是看官们一般不会使用MemoryCache的原生方法,而是使用位于同一命名空间的 扩展方法Set。 为啥要使用Dispose方法来向MemoryCache插值? 不能使用一个明确的Commit方法吗? ---- 基于此现状,我们如果使用MemoryCache的原生插值方法, 需要这样: var s = new MemoryCache(new MemoryCacheOptions { }); using Last MemoryCache插值的实现过程很奇葩 尽量使用带明确大括号范围的using语法,C#8.0推出的不带大括号的using语法糖的作用时刻在函数末尾,会带来误导。

    79620编辑于 2022-01-24
  • 来自专栏喵叔's 专栏

    分析一个错误使用MemoryCache导致的BUG

    这个Bug是我在项目中发现的,原因是MemoryCache使用不当造成了一个不小的Bug,虽说这个Bug很大部分人都知道,但是我觉得还是分享出来,记录一下。 GetValidValues(5).Dump(); GetValidValues(8).Dump(); List<int> GetValidValues(int valueInt) { var memoryCache = services.GetRequiredService<IMemoryCache>(); var vs= memoryCache.GetOrCreate("t1", entry => <IMemoryCache>(); var vs= memoryCache.GetOrCreate("t1", entry => { return Enumerable.Range (1, 10).ToList(); }); return vs.Where(v => v <= valueInt).ToList(); } 修改后的输出结果如下: 总结: MemoryCache

    62920发布于 2021-11-24
  • 来自专栏技术开源分享

    NetCore的缓存使用详例

    ; ​ public CacheService(IMemoryCache memoryCache) { _memoryCache = memoryCache; (cacheKey, DateTime.Now.ToString()); ​ //get cache Console.WriteLine(_memoryCache.Get(cacheKey 如果缓存不存在,写入 //原始写法 string cacheKey = "timestamp"; if (_memoryCache.Get(cacheKey) ! Console.WriteLine(_memoryCache.Get(cacheKey)); } ​ //新写法 var dataCacheValue = _memoryCache.GetOrCreate (cacheKey); ​ //场景 判断缓存是否存在的同时取出缓存数据 _memoryCache.TryGetValue(cacheKey, out string cacheValue

    95420发布于 2021-03-31
  • 来自专栏程序员互动联盟

    【专业技术】浏览器内核缓冲机制剖析

    编者按:缓存能极大提高用户体验,这一点众所周知,下面我们一起来探究Webkit里面的memorycache。 sub resource的cache则由MemoryCache管理和维护。下面我简要分析下memorycache的主要数据结构。 WebCore提供了使用主存的cache机制,称之为MemoryCacheMemoryCache中存放的数据为decode后的数据。 图12-1是MemoryCache的数据结构图。 ? 图12-1 MemoryCache数据结构图 CachedResource由HashMap统一管理,其key为resource的url,value为CachedResource对象的指针。 / 8, 16*1024*1024); 访问MemoryCache的接口为WebCore::memoryCache()。

    86850发布于 2018-03-14
  • 来自专栏只为你下

    小逗逼的连载-7.NetCore的缓存使用详例

    使用总结 通过构造函数自动注入IMemoryCache public class CacheService { private readonly IMemoryCache _memoryCache ; public CacheService(IMemoryCache memoryCache) { _memoryCache = memoryCache; } } (cacheKey, DateTime.Now.ToString()); //get cache Console.WriteLine(_memoryCache.Get(cacheKey 如果缓存不存在,写入 //原始写法 string cacheKey = "timestamp"; if (_memoryCache.Get(cacheKey) ! Console.WriteLine(_memoryCache.Get(cacheKey)); } //新写法 var dataCacheValue = _memoryCache.GetOrCreate

    57100发布于 2021-07-08
  • 来自专栏前端导学

    HTML5触摸界面设计与开发 读书笔记

    第四章 创建缓存层 //内存层 var memoryCache={}; var CACHE_TTL=864000000; var CACHE_PREFIX="ti" [key]){ if(memoryCache[key].date-Date.now()>CACHE_TTL){ return false; } return memoryCache[key].data; } obj=localStorage.getItem(key); if(obj){ [key]); return false; } memoryCache[key]=obj; return obj.data; } } setCache('lilu',39); getCached('lilu'); console.log(memoryCache['tililu

    1.1K10发布于 2019-05-26
  • 来自专栏移动开发面面观

    Glide缓存探密Glide的缓存策略

    Glide将内存分为两块儿:ActiveCache和MemoryCacheMemoryCache中存放尚未显示的Bitmap,而ActiveCache中则存放正在显示的Bitmap的弱引用。 这样,当MemoryCache被填满时,多余的Bitmap被挤出MemoryCache。 同时会以可复用Bitmap的形式加入到BitmapPool中。 下面,我们就来看看,MemoryCache 和 ActiveCache之间是如何协作的。 如果Bitmap的引用计数为0,则会将其从ActiveCache中引出,放入MemoryCache中。 在放入MemoryCache的过程中,如果MemoryCache已满,可能会将MemoryCache中老的图片挤入BitmapPool中。

    1.5K21发布于 2018-07-03
  • 来自专栏博客园

    持久化方式

    public class HomeController : Controller { IMemoryCache _memoryCache; public HomeController (IMemoryCache memoryCache) {//使用注入 _memoryCache = memoryCache; } public IActionResult Index() { //添加缓存 _memoryCache.Set<String>("key", _memoryCache.Set("key1", "val1", new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes (2))); //设置绝对过期时间两分钟 _memoryCache.Set("key2", "val2", new MemoryCacheEntryOptions

    56320发布于 2018-08-31
  • Go开发遇见的一次Data Race

    模拟原代码中的 MemoryCache type MemoryCache struct { store Store mu sync.Mutex // 外部锁 } func NewMemoryCache(store Store) *MemoryCache { return &MemoryCache{ store: store, } } (*MemoryCache).Set() main.go:61 +0xd8 main.main.func1() main.go:77 +0xf1 main.main.func3( 仔细看代码可以发现,加锁的时候 对象为 MemoryCache,而 GetLength()的调用者则为 LRUCache,解释一下就是。 MemoryCache 相当于 青帮,58 行的加锁操作则为 ,帮派保护了帮派成员免收外部帮派欺负。相应的 GetLength()是直接帮派内部发生了内讧,从而导致问题无法解决。

    15100编辑于 2025-05-26
  • 来自专栏.Net、.Net Core 、Docker

    Redis--Memched--Cache缓存介绍使用

    如何使用 新建一个CacheHelper公共类 public class CacheHelper { private static IMemoryCache _memoryCache ; public CacheHelper(IMemoryCache memoryCache) { _memoryCache = memoryCache new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromSeconds(expireDate)); _memoryCache.Set _memoryCache.TryGetValue<T>(cacheKey, out T cacheEntry)) { return default ().GetField("_entries", flags).GetValue(_memoryCache); var cacheItems = entries as IDictionary

    1K40发布于 2019-09-11
  • 来自专栏码农阿宇

    C# Memory Cache 踩坑记录

    解决方案1 我们认为每个任务要取的数据大相径庭,因此我们考虑对这个过程进行修改,加入MemoryCache把数据库中读取到的数据进行缓存. 该死 MemoryCache 毁我老脸,丢我精度,拿命来!!!!! 这样会改变数据精度的MemoryCache又有何用??  机智的我,似乎早已看穿了一切,这肯定不是MenoryCache的锅!!! 不一样的MemoryCache 我从https://referencesource.microsoft.com 中扒出了MemoryCache的源码一探究竟. ? 定位到MemoryCache中的AddOrGetExisting方法,我们看到,其实我们把数据存储到该缓存的过程本质是把该对象存到一个名为_entries的         Hashtable 中,同样

    1.6K10发布于 2019-02-14
  • 来自专栏饭勺oO的技术博客

    造轮子之多语言管理

    ; public EFStringLocalizer(WheelDbContext db, IMemoryCache memoryCache) { _db = db; _memoryCache = memoryCache; } public LocalizedString this[string GetString(string name) { if (_memoryCache.TryGetValue<string>($"{CultureInfo.CurrentCulture.Name ; public EFStringLocalizer(WheelDbContext db, IMemoryCache memoryCache) { _db = db; _memoryCache = memoryCache; } public LocalizedString this[string

    57060编辑于 2023-10-18
  • 来自专栏向治洪

    android之listview缓存图片(缓存优化)

    先放上内存缓存类的代码MemoryCache.java: public class MemoryCache {   private static final String TAG = "MemoryCache current allocated size // 缓存只能占用的最大堆内存 private long limit = 1000000;// max memory in bytes public MemoryCache     }   public void setLimit(long new_limit) {            limit = new_limit;           Log.i(TAG, "MemoryCache [java] view plaincopy public class MemoryCache {   private Map<String, SoftReference<Bitmap>> cache  memoryCache = new MemoryCache();       FileCache fileCache;   private Map<ImageView, String> imageViews

    2.1K90发布于 2018-01-29
  • 来自专栏桑榆肖物

    在Identity框架中使用RoleBasedAuthorization

    internal class MyRolePermission : IRolePermission { private readonly IMemoryCache _memoryCache; private readonly string cachekey = "Role_Permission_"; public MyRolePermission(IMemoryCache memoryCache , IServiceProvider _sp) { _memoryCache = memoryCache; _roleManager = _sp.CreateScope Task<List<Claim>> GetRolePermissionClaimsByName(string roleName) { var claims = await _memoryCache.GetOrCreateAsync

    48420编辑于 2022-11-18
  • 来自专栏cnblogs

    karma与webpack结合

    preprocessors节点都是指向单元测试的入口文件(test/index.js) 4.创建需要测试的源码与单元测试文件 1.src/cache/index.js:cache模块导出接口,本次只导出的memoryCache.js ,代码如下: export { default as MemoryCache } from '. /memoryCache'; 2.src/cache/memoryCache.js:实现缓存数据的操作,也是需要单元测试的类,代码如下: export default class MemoryCache _map = []; } } var p = MemoryCache.prototype; p.push = function(key, item){ var entry = { /src/cache/index.js').MemoryCache; describe('memoryCache test',function(){ var _memeoryCache;

    1.3K70发布于 2018-01-17
领券