From bfd4fd8e4a05a681ec10a47992294cf752a764c4 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期一, 02 三月 2026 15:10:58 +0800
Subject: [PATCH] 添加Redis服务与缓存增强

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs |   75 +++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs
index ce7a585..5f6d4ef 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs
@@ -144,5 +144,80 @@
 
             keys.ToList().ForEach(item => _cache.Remove(item));
         }
+
+        public bool TryAdd(string key, string value, int expireSeconds = -1)
+        {
+            if (Exists(key)) return false;
+            return Add(key, value, expireSeconds);
+        }
+
+        public bool TryAdd<T>(string key, T value, int expireSeconds = -1) where T : class
+        {
+            if (Exists(key)) return false;
+            return AddObject(key, value, expireSeconds);
+        }
+
+        public bool TryGetValue(string key, out string? value)
+        {
+            value = _cache.Get(key)?.ToString();
+            return value != null;
+        }
+
+        public bool TryGetValue<T>(string key, out T? value) where T : class
+        {
+            if (_cache.TryGetValue(key, out object? obj) && obj != null)
+            {
+                value = obj as T ?? JsonConvert.DeserializeObject<T>(obj.ToString() ?? "");
+                return value != null;
+            }
+            value = default;
+            return false;
+        }
+
+        public bool TryRemove(string key, out string? value)
+        {
+            value = _cache.Get(key)?.ToString();
+            if (value == null) return false;
+            _cache.Remove(key);
+            return true;
+        }
+
+        public bool TryUpdate(string key, string newValue, int expireSeconds = -1)
+        {
+            if (!Exists(key)) return false;
+            Remove(key);
+            Add(key, newValue, expireSeconds);
+            return true;
+        }
+
+        public string GetOrAdd(string key, string value, int expireSeconds = -1)
+        {
+            var existing = _cache.Get(key)?.ToString();
+            if (existing != null) return existing;
+            Add(key, value, expireSeconds);
+            return value;
+        }
+
+        public string GetOrAdd(string key, Func<string, string> valueFactory, int expireSeconds = -1)
+        {
+            var existing = _cache.Get(key)?.ToString();
+            if (existing != null) return existing;
+            var value = valueFactory(key);
+            Add(key, value, expireSeconds);
+            return value;
+        }
+
+        public T GetOrAdd<T>(string key, Func<string, T> valueFactory, int expireSeconds = -1) where T : class
+        {
+            if (_cache.TryGetValue(key, out object? obj) && obj != null)
+            {
+                if (obj is T t) return t;
+                var deserialized = JsonConvert.DeserializeObject<T>(obj.ToString() ?? "");
+                if (deserialized != null) return deserialized;
+            }
+            var value = valueFactory(key);
+            AddObject(key, value, expireSeconds);
+            return value;
+        }
     }
 }

--
Gitblit v1.9.3