Browse Source

Compatible with the new version of `HybridCache`.

pull/22811/head
maliming 9 months ago
parent
commit
6b0097a379
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 2
      Directory.Packages.props
  2. 4
      framework/src/Volo.Abp.Caching/Volo/Abp/Caching/AbpCachingModule.cs
  3. 15
      framework/src/Volo.Abp.Caching/Volo/Abp/Caching/Hybrid/AbpHybridCache.cs

2
Directory.Packages.props

@ -88,7 +88,7 @@
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.4" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.4" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.4" />
<PackageVersion Include="Microsoft.Extensions.Caching.Hybrid" Version="9.1.0-preview.1.25064.3" />
<PackageVersion Include="Microsoft.Extensions.Caching.Hybrid" Version="9.4.0" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.4" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.4" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.4" />

4
framework/src/Volo.Abp.Caching/Volo/Abp/Caching/AbpCachingModule.cs

@ -1,7 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
using System;
using Microsoft.Extensions.Caching.Hybrid;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.Caching.Hybrid;
using Volo.Abp.Json;
using Volo.Abp.Modularity;
@ -28,9 +26,7 @@ public class AbpCachingModule : AbpModule
context.Services.AddSingleton(typeof(IDistributedCache<>), typeof(DistributedCache<>));
context.Services.AddSingleton(typeof(IDistributedCache<,>), typeof(DistributedCache<,>));
#pragma warning disable EXTEXP0018
context.Services.AddHybridCache().AddSerializerFactory<AbpHybridCacheJsonSerializerFactory>();
#pragma warning restore EXTEXP0018
context.Services.AddSingleton(typeof(IHybridCache<>), typeof(AbpHybridCache<>));
context.Services.AddSingleton(typeof(IHybridCache<,>), typeof(AbpHybridCache<,>));

15
framework/src/Volo.Abp.Caching/Volo/Abp/Caching/Hybrid/AbpHybridCache.cs

@ -75,7 +75,7 @@ public class AbpHybridCache<TCacheItem, TCacheKey> : IHybridCache<TCacheItem, TC
protected HybridCache HybridCache { get; }
protected IDistributedCache DistributedCacheCache { get; }
protected IDistributedCache DistributedCache { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
@ -105,7 +105,7 @@ public class AbpHybridCache<TCacheItem, TCacheKey> : IHybridCache<TCacheItem, TC
ServiceProvider = serviceProvider;
DistributedCacheOption = distributedCacheOption.Value;
HybridCache = hybridCache;
DistributedCacheCache = distributedCache;
DistributedCache = distributedCache;
CancellationTokenProvider = cancellationTokenProvider;
Logger = NullLogger<AbpHybridCache<TCacheItem, TCacheKey>>.Instance;
KeyNormalizer = keyNormalizer;
@ -215,10 +215,15 @@ public class AbpHybridCache<TCacheItem, TCacheKey> : IHybridCache<TCacheItem, TC
}
}
var bytes = await DistributedCacheCache.GetAsync(NormalizeKey(key), token);
if (bytes != null)
if (await DistributedCache.GetAsync(NormalizeKey(key), token) != null)
{
return ResolveSerializer().Deserialize(new ReadOnlySequence<byte>(bytes, 0, bytes.Length));;
// Because HybridCache wraps the cache in L2(distributed cache), we can’t unwrap it directly and can only retrieve the value through its API
return await HybridCache.GetOrCreateAsync(
key: NormalizeKey(key),
factory: async cancel => await factory(),
options: optionsFactory?.Invoke(),
tags: null,
cancellationToken: token);
}
value = await factory();

Loading…
Cancel
Save