C#如何使用Redis缓存?完整操作指南一文搞懂

来源:AI视频音频作者:多肉头衔:草根站长
导读:本期聚焦于小伙伴创作的《C#如何使用Redis缓存?完整操作指南一文搞懂》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何使用Redis缓存?完整操作指南一文搞懂》有用,将其分享出去将是对创作者最好的鼓励。

在C#项目里集成Redis缓存是提升系统性能的常见方案,通过缓存高频访问的数据,可以减少数据库查询次数,加快接口响应速度。下面将从基础到进阶介绍完整的操作方式。

C#如何使用Redis缓存?完整操作指南一文搞懂

环境准备与依赖引入

首先需要在本地或者服务器安装Redis服务,Windows环境可以下载对应的安装包完成部署,Linux环境可以通过包管理器快速安装。之后在C#项目中引入操作Redis的常用依赖StackExchange.Redis,可以通过NuGet包管理器搜索安装,也可以在项目文件里添加对应的PackageReference配置。

安装完成后,需要先创建Redis连接对象,这是后续所有操作的基础。连接字符串需要包含Redis服务的地址、端口以及可选的密码、默认数据库编号等信息。

using StackExchange.Redis;

// 创建Redis连接
private static ConnectionMultiplexer redisConnection;
public static ConnectionMultiplexer GetRedisConnection()
{
    if (redisConnection == null || !redisConnection.IsConnected)
    {
        // 连接字符串格式:地址:端口,password=密码,defaultDatabase=数据库编号
        string redisConnectionString = "127.0.0.1:6379,password=123456,defaultDatabase=0";
        redisConnection = ConnectionMultiplexer.Connect(redisConnectionString);
    }
    return redisConnection;
}

基础缓存操作

字符串类型缓存读写

字符串是Redis最常用的数据类型,适合存储简单的键值对数据,比如用户会话信息、配置项等。下面是字符串类型的写入、读取、删除操作示例。

using StackExchange.Redis;
using System;

public class RedisStringHelper
{
    private static IDatabase redisDb = GetRedisConnection().GetDatabase();

    // 写入字符串缓存,设置过期时间为30分钟
    public static bool SetStringCache(string key, string value)
    {
        return redisDb.StringSet(key, value, TimeSpan.FromMinutes(30));
    }

    // 读取字符串缓存
    public static string GetStringCache(string key)
    {
        return redisDb.StringGet(key);
    }

    // 删除指定缓存
    public static bool DeleteCache(string key)
    {
        return redisDb.KeyDelete(key);
    }
}

哈希类型缓存操作

哈希类型适合存储结构化的对象数据,比如用户信息、商品详情等,不需要把整个对象序列化后存储,可以直接操作单个字段。

public class RedisHashHelper
{
    private static IDatabase redisDb = GetRedisConnection().GetDatabase();

    // 设置哈希字段值
    public static bool SetHashField(string key, string field, string value)
    {
        return redisDb.HashSet(key, field, value);
    }

    // 获取哈希字段值
    public static string GetHashField(string key, string field)
    {
        return redisDb.HashGet(key, field);
    }

    // 获取整个哈希对象的所有字段和值
    public static HashEntry[] GetAllHashFields(string key)
    {
        return redisDb.HashGetAll(key);
    }
}

常见缓存场景实现

缓存穿透处理

缓存穿透是指查询不存在的数据,导致请求直接落到数据库上,大量这类请求会压垮数据库。常见的处理方式是缓存空值,同时设置较短的过期时间。

public static string GetUserInfoWithPenetrationHandle(string userId)
{
    string cacheKey = $"user_info_{userId}";
    string cacheValue = redisDb.StringGet(cacheKey);
    // 缓存存在且不是空值标记,直接返回
    if (!string.IsNullOrEmpty(cacheValue) && cacheValue != "null")
    {
        return cacheValue;
    }
    // 缓存是空值标记,说明之前查询过不存在的数据,直接返回空
    if (cacheValue == "null")
    {
        return null;
    }
    // 缓存不存在,查询数据库
    string dbValue = QueryUserFromDb(userId); // 假设的数据库查询方法
    if (!string.IsNullOrEmpty(dbValue))
    {
        // 数据库存在数据,写入缓存,过期时间30分钟
        redisDb.StringSet(cacheKey, dbValue, TimeSpan.FromMinutes(30));
        return dbValue;
    }
    else
    {
        // 数据库不存在数据,缓存空值标记,过期时间5分钟,避免缓存穿透
        redisDb.StringSet(cacheKey, "null", TimeSpan.FromMinutes(5));
        return null;
    }
}

缓存过期与更新

缓存需要设置合理的过期时间,避免数据长期不一致。当数据库数据更新时,需要同步更新或者删除对应的缓存,保证缓存和数据库的数据一致性。

// 更新用户信息后同步删除缓存
public static void UpdateUserInfoAndDeleteCache(string userId, string newUserInfo)
{
    // 更新数据库
    UpdateUserInDb(userId, newUserInfo); // 假设的数据库更新方法
    // 删除对应的缓存
    string cacheKey = $"user_info_{userId}";
    redisDb.KeyDelete(cacheKey);
}

注意事项

  • Redis连接对象建议使用单例模式,避免频繁创建连接消耗资源
  • 缓存的过期时间需要根据业务场景合理设置,热点数据可以设置长一点,变更频繁的数据设置短一点
  • 批量操作缓存时可以使用Redis的事务或者管道功能,提升操作效率
  • 生产环境建议给Redis设置访问密码,避免未授权访问
实际开发中可以根据业务需求封装更通用的缓存操作类,减少重复代码,提升开发效率。

C#Redis缓存StackExchange_Redis缓存操作缓存策略修改时间:2026-07-16 05:12:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。