C# 实现简单的缓存工具类

简介: 基于Dictionary实现线程安全的内存缓存,支持设置过期时间,自动清理过期项。同时提供枚举转键值对列表工具,便于下拉框数据绑定,提升开发效率。

基于 Dictionary 实现内存缓存,支持设置过期时间。
public class CacheItem
{
public object Value { get; set; }
public DateTime ExpireTime { get; set; }
public bool IsExpired => DateTime.Now > ExpireTime;
}

public class MemoryCache
{
private readonly Dictionary _cache = new Dictionary();
private readonly object _lockObj = new object();

// 添加缓存
public void Set(string key, object value, TimeSpan expireTime)
{
    lock (_lockObj)
    {
        _cache[key] = new CacheItem {
            Value = value,
            ExpireTime = DateTime.Now.Add(expireTime)
        };
    }
}

// 获取缓存
public T Get<T>(string key) where T : class
{
    lock (_lockObj)
    {
        if (_cache.TryGetValue(key, out var item) && !item.IsExpired)
        {
            return item.Value as T;
        }
        _cache.Remove(key); // 清理过期缓存
        return null;
    }
}

// 移除缓存
public void Remove(string key)
{
    lock (_lockObj) _cache.Remove(key);
}

}

// 调用示例
public static void TestCache()
{
var cache = new MemoryCache();
cache.Set("user_name", "张三", TimeSpan.FromMinutes(5));
string name = cache.Get("user_name");
Console.WriteLine("缓存值: " + name);
}

  1. C# 实现枚举转下拉列表数据源
    将枚举转换为 KeyValuePair 列表,用于界面下拉列表的绑定。
    csharp
    public enum Gender { 男, 女, 未知 }

public static class EnumHelper
{
// 枚举转键值对列表
public static List> EnumToKeyValueList() where T : Enum
{
return Enum.GetValues(typeof(T))
.Cast()
.Select(e => new KeyValuePair(Convert.ToInt32(e), e.ToString()))
.ToList();
}
}

// 调用示例
public static void TestEnumToList()
{
var genderList = EnumHelper.EnumToKeyValueList();
foreach (var item in genderList)
{
Console.WriteLine($"值: {item.Key}, 名称: {item.Value}");
}
}

相关文章
|
3月前
|
C#
C# 随机数生成:Random 类用法
Random类用于生成伪随机数,适用于游戏、验证码、测试等场景。通过静态实例避免重复创建,确保随机性。提供整数、小数、布尔值及指定长度的随机字符串生成方法,使用简便且高效。注意需复用实例防止种子重复导致随机数相同。
|
3月前
|
存储 算法 C#
C# 哈希值计算:MD5/SHA256 加密
本示例展示了C#中使用MD5和SHA256算法生成哈希值的方法,适用于密码加密与数据校验。MD5安全性较低,建议仅用于非敏感场景;密码存储推荐使用SHA256配合盐值以增强安全性。
|
3月前
|
网络协议 安全 C#
C# 实现基于 TCP 的简单聊天程序(服务端)
基于TcpListener实现TCP聊天服务器,监听指定端口,接收客户端连接并实时转发消息。支持多客户端并发通信,新连接自动加入广播列表,断开后自动移除,确保线程安全与稳定运行。
|
3月前
|
JSON API C#
C# 实现简单的 HTTP 请求工具(GET/POST)
HTTP请求工具用于调用第三方API,支持GET和POST方法,实现数据获取与提交。示例代码展示通过HttpClient发送异步POST请求,处理响应并解析JSON结果,适用于高效集成外部服务。
|
3月前
|
C#
C# 实现发送邮件功能(SMTP)
通过SMTP协议实现邮件发送,支持文本与附件,需配置邮箱SMTP信息(如QQ邮箱授权码)。示例代码展示C#中如何使用SmtpClient发送邮件,适用于QQ、163、Gmail等主流邮箱服务。
|
3月前
|
存储 数据库连接 C#
C# 配置文件读取:App.config 用法
App.config用于存储程序配置(如数据库连接、接口地址),避免硬编码,提升可维护性。通过ConfigurationManager读取配置,支持字符串、整型、布尔值及连接字符串的获取,需引用System.Configuration程序集。
|
3月前
|
存储 开发框架 缓存
C# 实现图片验证码的 WebAPI 版(ASP.NET Core)
基于ASP.NET Core实现的验证码服务,生成带干扰线和随机旋转文字的4位图文验证码,支持内存存储与验证。需安装System.Drawing.Common包。
|
3月前
|
C#
C# 实现简单的 AOP(面向切面编程)
通过反射与委托实现AOP,可在方法执行前后动态添加日志、计时等横切逻辑,提升代码复用性与可维护性。
|
3月前
|
C#
C# 实现简单的定时任务工具
基于 `System.Timers.Timer` 实现定时任务,支持周期性与单次执行。通过封装 Timer 类,提供启动、停止功能,并包含异常处理,确保任务稳定运行,适用于后台定时操作场景。
|
3月前
|
C#
C# 实现图片压缩工具(基础版)
基于 System.Drawing 实现图片尺寸缩放与质量压缩,支持常见格式。通过计算缩放比例生成新图像,并调整压缩质量以减小文件大小。适用于 .NET 平台,需安装 System.Drawing.Common NuGet 包。