using Atomx.Common.Constant; using Atomx.Common.Entities; using Microsoft.EntityFrameworkCore; namespace Atomx.Data.CacheServices { public partial interface ICacheService { /// /// 通过文化名城获取对应的本地化译文 /// /// /// Task> GetLocaleResourcesAsync(string culture); /// /// 添加或更新文化本地化信息 /// /// /// Task SetLocaleResources(LocaleResource localeResource); /// /// 删除文化本地化资源信息 /// /// /// Task DeleteLocaleResources(LocaleResource localeResource); /// /// 重载本地化资源 /// /// /// Task ReloadLocaleResources(string culture); /// /// 移除文化本地化资源缓存 /// /// /// Task RemoveLocaleResources(string culture); /// /// 指定文化本地化资源获和名城获取译文 /// /// /// /// Task GetLocaleResourcesString(string culture, string name); } public partial class CacheService : ICacheService { /// /// 通过文化名城获取对应的本地化译文,如果缓存不存在则从数据库加载 /// /// /// public async Task> GetLocaleResourcesAsync(string culture) { var key = $"{CacheKeys.LocaleResourcePrefix}{culture}"; var cacheData = GetCache>(key); if (cacheData == null) { var language = await GetLanguageByCulture(culture); if (language == null) { return null; } var data = await _dbContext.LocaleResources.Where(p => p.LanguageId == language.Id).ToDictionaryAsync(p => p.Name, p => p.Value); if (data.Any()) { cacheData = data; SetCache(key, cacheData); } } return cacheData; } /// /// 添加或更新文化本地化信息 /// /// /// public async Task SetLocaleResources(LocaleResource localeResource) { var language = await GetLanguageById(localeResource.LanguageId); if (language == null) { return; } var key = $"{CacheKeys.LocaleResourcePrefix}{language.Culture}"; var data = await GetLocaleResourcesAsync(language.Culture); if (data.ContainsKey(localeResource.Name)) { data[localeResource.Name] = localeResource.Value; } else { data.Add(localeResource.Name, localeResource.Value); } SetCache(key, data); } /// /// 删除文化本地化资源信息 /// /// /// public async Task DeleteLocaleResources(LocaleResource localeResource) { var language = await GetLanguageById(localeResource.LanguageId); if (language == null) { return; } var key = $"{CacheKeys.LocaleResourcePrefix}{language.Culture}"; var data = await GetLocaleResourcesAsync(language.Culture); data.Remove(localeResource.Name); } /// /// 重载本地化资源 /// /// /// public async Task ReloadLocaleResources(string culture) { var key = $"{CacheKeys.LocaleResourcePrefix}{culture}"; var cacheData = await GetCacheAsync>(key); var language = await GetLanguageByCulture(culture); if (language == null) { return; } var data = await _dbContext.LocaleResources.Where(p => p.LanguageId == language.Id).ToDictionaryAsync(p => p.Name, p => p.Value); if (data.Any()) { cacheData = data; await SetCacheAsync(key, cacheData); } } /// /// 移除文化本地化资源缓存 /// /// /// public async Task RemoveLocaleResources(string culture) { var key = $"{CacheKeys.LocaleResourcePrefix}{culture}"; await Remove(key); } /// /// 指定文化本地化资源获和名城获取译文 /// /// /// /// public async Task GetLocaleResourcesString(string culture, string name) { var key = $"{CacheKeys.LocaleResourcePrefix}{culture}"; var cacheData = await GetCacheAsync>(key); if (cacheData == null) { return string.Empty; } if (cacheData.TryGetValue(name, out string value)) { return value; } else { return string.Empty; } } } }