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

相关推荐
HBryce2422 分钟前
缓存-基础概念
java·缓存
IT技术分享社区4 小时前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
羊小猪~~4 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
minihuabei5 小时前
linux centos 安装redis
linux·redis·centos
monkey_meng7 小时前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
想要打 Acm 的小周同学呀7 小时前
LRU缓存算法
java·算法·缓存
hlsd#7 小时前
go 集成go-redis 缓存操作
redis·缓存·golang
镰刀出海7 小时前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试
奶糖趣多多9 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt10 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存