You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Sln.Rfid/Sln.Rfid.Cache/BaseDeviceInfoCacheService.cs

87 lines
2.6 KiB
C#

#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2025 WenJY
* CLR4.0.30319.42000
* Mr.Wen's MacBook Pro
* Sln.Rfid.Cache
* 9FBB0650-8E73-432A-9697-EC66FA442C3F
*
* WenJY
*
* 2025-11-25 14:09:44
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Sln.Rfid.Model.dao;
using Sln.Rfid.Repository.service;
using Sln.Rfid.Serilog;
using ZiggyCreatures.Caching.Fusion;
namespace Sln.Rfid.Cache
{
public class BaseDeviceInfoCacheService
{
private readonly SerilogHelper _logger;
private readonly IFusionCache _fusionCache;
private readonly IBaseDeviceInfoService _service;
public BaseDeviceInfoCacheService(SerilogHelper logger, IFusionCache fusionCache, IBaseDeviceInfoService service)
{
_logger = logger;
_fusionCache = fusionCache;
_service = service;
}
/// <summary>
/// 通过缓存获取值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public async Task<List<BaseDeviceInfo>> GetValueAsync(string key)
{
var cachedValue = await _fusionCache.GetOrDefaultAsync<List<BaseDeviceInfo>>(key).ConfigureAwait(false);
if (cachedValue != null)
{
_logger.Info($"通过Cache获取设备数据:{cachedValue.Count};条");
return cachedValue;
}
else
{
var value = _service.Query();
//将值存入缓存,设置过期时间等
await _fusionCache.SetAsync(key, value, TimeSpan.FromSeconds(30)).ConfigureAwait(false);
_logger.Info($"通过ORM获取设备数据:{value.Count};条");
return value;
}
}
public async Task<bool> SetValueAsync(string key, BaseDeviceInfo deviceInfo)
{
var isRes = _service.Update(deviceInfo);
if (isRes)
{
var value = _service.Query();
await _fusionCache.SetAsync(key, value, TimeSpan.FromSeconds(5)).ConfigureAwait(false);
}
return isRes;
}
}
}