【个人博客搭建】(15)Redis缓存使用

1、下载nuget包:StackExchange.Redis; 并引用

复制代码
using StackExchange.Redis;

2、配置信息

cs 复制代码
  /* Redis缓存配置 */
  "Redis": {
    "Enabled": true,
    "ConnectionString": "127.0.0.1:6379,password=123456"
  }

3、配置模型

cs 复制代码
  public class RedisConfig
  {
      public bool Enabled { get; set; }
      public string ConnectionString { get; set; }

  }

4、编写帮助类

cs 复制代码
    public class RedisHelper
    {
        private static bool enabled = AppSettings.app(new string[] { "Redis", "Enabled" }).ToUpper() == "TRUE" ? true : false;
        private static string connectionString = AppSettings.app(new string[] { "Redis", "ConnectionString" });

        private static ConnectionMultiplexer redis;
        private static IDatabase db;

        private static bool isRun = false;

        static RedisHelper()
        {
            if (enabled)
            {
                if (IsRedisRunning())
                {
                    // 创建连接
                    redis = ConnectionMultiplexer.Connect(connectionString);
                    db = redis.GetDatabase();
                }
            }
            else
            {
                isRun = false;
            }

        }

        /// <summary>
        /// 创建模型
        /// </summary>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        static RedisConfig GetRedisConfig()
        {
            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new Exception("未获取到配置的Redis连接字符串信息!请检查");
            }

            var redisConfig = new RedisConfig()
            {
                Enabled = enabled,
                ConnectionString = connectionString,
            };
            return redisConfig;
        }

        /// <summary>
        /// 判断Redis是否在运行
        /// </summary>
        /// <returns></returns>
        static bool IsRedisRunning()
        {
            try
            {
                // 创建Redis连接
                ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(connectionString);

                // 获取Redis数据库实例
                IDatabase db = connection.GetDatabase();

                // 创建GUID、随机数
                Random random = new Random();
                var testValue = Guid.NewGuid().ToString() + "|" + random.Next(0, 100).ToString();

                // 执行一个简单的SET命令
                db.StringSet("testKey", testValue);

                // 执行一个简单的GET命令
                string value = db.StringGet("testKey");

                // 关闭连接
                connection.Close();

                // 如果能够成功执行SET和GET命令,则认为Redis正在运行
                isRun = true;
                return value == testValue;
            }
            catch (Exception ex)
            {
                // 发生异常,可能是Redis未启动或连接失败
                Console.WriteLine("Error: Redis运行失败。" + ex.Message);
                return false;
            }
        }





        #region 增删改查 (启动 && 在运行)


        // 添加数据
        public static void Add(string key, string value)
        {
            if (isRun)
            {
                db.StringSet(key, value);
            }
        }

        // 查询数据
        public static string Get(string key)
        {
            if (isRun)
            {
                return db.StringGet(key);
            }
            return "";
        }

        // 更新数据
        public static void Update(string key, string value)
        {
            if (isRun)
            {
                db.StringSet(key, value);
            }
        }

        // 删除数据
        public static void Delete(string key)
        {
            if (isRun)
            {
                db.KeyDelete(key);
            }
        }


        #endregion

    }

帮助类里边有对Redis是否运行进行了一个判断,防止不使用的兄弟在不使用该功能的是否不会出错。

还可以考虑在需要但是没运行时添加日志记录,或者使用其他类似于队列等后续处理

5、测试。

我们可以在用户登录的时候进行缓存token信息。(后续会对其进行过期处理)

cs 复制代码
var token = JwtHelper.GenerateToken(jwtClaim);
RedisHelper.Add("Login:" + para.UserName, token);
return ApiResultHelper.Success(token);

使用":"划分文件夹。Login为文件夹名称。

6、结果:

正常运行的话是会存入进去的。

不启动或未启动Redis服务时,是不写入的。

7、其他

以上就是对Redis的简单应用了。

在在增删改查的操作中,我们也可以添加一个是否存在key的判断。

相关推荐
军训猫猫头4 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
咖啡啡不加糖4 小时前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
MickeyCV4 小时前
使用Docker部署MySQL&Redis容器与常见命令
redis·mysql·docker·容器·wsl·镜像
肥仔哥哥19305 小时前
springCloud2025+springBoot3.5.0+Nacos集成redis从nacos拉配置起服务
redis·缓存·最新boot3集成
不爱写代码的玉子6 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#
呼拉拉呼拉7 小时前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超7 小时前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
开开心心就好8 小时前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法
我命由我1234510 小时前
Spring Boot 项目集成 Redis 问题:RedisTemplate 多余空格问题
java·开发语言·spring boot·redis·后端·java-ee·intellij-idea
一名用户10 小时前
unity实现自定义粒子系统
c#·unity3d·游戏开发