【个人博客搭建】(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的判断。

相关推荐
xiaoshuaishuai81 小时前
C# AI实现PR处理、单元测试
开发语言·c#·log4j
LONGZHIQIN1 小时前
C#基础复习笔记
开发语言·笔记·c#
程序员佳佳1 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
品尚公益团队4 小时前
C#在asp.net网页开发中的带cookie登录实现
前端·c#·asp.net
吴可可1234 小时前
C#自定义CAD多段线零件实体
c#
Devin~Y4 小时前
电商场景下的Java面试实战:从Spring Boot微服务到Kafka、Redis与AI RAG
java·spring boot·redis·elasticsearch·spring cloud·微服务·kafka
CallmeFoureyes4 小时前
使用 C# 提取 Word 文档中的表格数据
开发语言·c#·word
斯蒂文6684 小时前
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
缓存·中间件
思麟呀4 小时前
在C++基础上理解CSharp-7
java·jvm·c++·c#
风若飞5 小时前
Tomcat 9.0.118 分布式 Redis Session 配置指南
redis·分布式·tomcat