asp.net性能优化之使用Redis缓存(入门)

发布时间 - 2026-01-10 23:21:22    点击率:

1:使用Redis缓存的优化思路

redis的使用场景很多,仅说下本人所用的一个场景:

1.1对于大量的数据读取,为了缓解数据库的压力将一些不经常变化的而又读取频繁的数据存入redis缓存

大致思路如下:执行一个查询

1.2首先判断缓存中是否存在,如存在直接从Redis缓存中获取。

1.3如果Redis缓存中不存在,实时读取数据库数据,同时写入缓存(并设定缓存失效的时间)。

1.4缺点,如果直接修改了数据库的数据而又没有更新缓存,在缓存失效的时间内将导致读取的Redis缓存是错误的数据。

2:Redis傻瓜式安装

2.1双击执行redis-2.4.6-setup-64-bit.exe程序(下载地址:https://github.com/dmajkic/redis/downloads)

2.2可以将此服务设置为windows系统服务:

2.3测试是否安装成功:

再回到redis文件夹下,找到redis-cli.exe文件,它就是Redis客户端程序。打开,输入:

Set test 123

即在Redis中插入了一条key为test,value为123的数据,继续输入:get test

得到value保存的数据123。

如果想知道Redis中一共保存了多少条数据,则可以使用:keys * 来查询:

3:asp.net使用Redis缓存简单示例

3.1测试Demo的结构

3.2添加引用

3.3将参数写入配置文件

 <appSettings>
 <add key="WriteServerList" value="127.0.0.1:6379" />
 <add key="ReadServerList" value="127.0.0.1:6379" />
 <add key="MaxWritePoolSize" value="60" />
 <add key="MaxReadPoolSize" value="60" />
 <add key="AutoStart" value="true" />
 <add key="LocalCacheTime" value="1800" />
 <add key="RecordeLog" value="false" />
 </appSettings>

3.4读取配置文件参数类

 public class RedisConfigInfo
 {
  public static string WriteServerList = ConfigurationManager.AppSettings["WriteServerList"];
  public static string ReadServerList = ConfigurationManager.AppSettings["ReadServerList"];
  public static int MaxWritePoolSize = Convert.ToInt32(ConfigurationManager.AppSettings["MaxWritePoolSize"]);
  public static int MaxReadPoolSize = Convert.ToInt32(ConfigurationManager.AppSettings["MaxReadPoolSize"]);
  public static int LocalCacheTime = Convert.ToInt32(ConfigurationManager.AppSettings["LocalCacheTime"]);
  public static bool AutoStart = ConfigurationManager.AppSettings["AutoStart"].Equals("true") ? true : false;
 }

3.5连接Redis,以及其他的一些操作类

public class RedisManager
 {
  private static PooledRedisClientManager prcm;
  /// <summary>
  /// 创建链接池管理对象
  /// </summary>
  private static void CreateManager()
  {
   string[] writeServerList = SplitString(RedisConfigInfo.WriteServerList, ",");
   string[] readServerList = SplitString(RedisConfigInfo.ReadServerList, ",");
   prcm = new PooledRedisClientManager(readServerList, writeServerList,
        new RedisClientManagerConfig
        {
         MaxWritePoolSize = RedisConfigInfo.MaxWritePoolSize,
         MaxReadPoolSize = RedisConfigInfo.MaxReadPoolSize,
         AutoStart = RedisConfigInfo.AutoStart,
        });
  }
  private static string[] SplitString(string strSource, string split)
  {
   return strSource.Split(split.ToArray());
  }
  /// <summary>
  /// 客户端缓存操作对象
  /// </summary>
  public static IRedisClient GetClient()
  {
   if (prcm == null)
    CreateManager();
   return prcm.GetClient();
  }
  /// <summary>
  /// 缓存默认24小时过期
  /// </summary>
  public static TimeSpan expiresIn = TimeSpan.FromHours(24);
  /// <summary>
  /// 设置一个键值对,默认24小时过期
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="key"></param>
  /// <param name="value"></param>
  /// <param name="redisClient"></param>
  /// <returns></returns>
  public static bool Set<T>(string key, T value, IRedisClient redisClient)
  {
   return redisClient.Set<T>(key, value, expiresIn);
  }
  /// <summary>
  /// 将某类数据插入到list中
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="key">一般是BiaoDiGuid</param>
  /// <param name="item"></param>
  /// <param name="redisClient"></param>
  public static void Add2List<T>(string key, T item, IRedisClient redisClient)
  {
   var redis = redisClient.As<T>();
   var list = redis.Lists[GetListKey(key)];
   list.Add(item);
  }
  /// <summary>
  /// 获取一个list
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="key"></param>
  /// <param name="redisClient"></param>
  /// <returns></returns>
  public static IRedisList<T> GetList<T>(string key, IRedisClient redisClient)
  {
   var redis = redisClient.As<T>();
   return redis.Lists[GetListKey(key)];
  }
  public static string GetListKey(string key, string prefix = null)
  {
   if (string.IsNullOrEmpty(prefix))
   {
    return "urn:" + key;
   }
   else
   {
    return "urn:" + prefix + ":" + key;
   }
  }
 }

3.6测试页面前后台代码

<form id="form1" runat="server">
 <div>
  <asp:Label runat="server" ID="lbtest"></asp:Label>
  <asp:Button runat="server" ID ="btn1" OnClick="btn1_Click" Text="获取测试数据"/>
 </div>
 </form>
protected void btn1_Click(object sender, EventArgs e)
  {
   string UserName;
   //读取数据,如果缓存存在直接从缓存中读取,否则从数据库读取然后写入redis
   using (var redisClient = RedisManager.GetClient())
   {
    UserName = redisClient.Get<string>("UserInfo_123");
    if (string.IsNullOrEmpty(UserName)) //初始化缓存
    {
     //TODO 从数据库中获取数据,并写入缓存
     UserName = "张三";
     redisClient.Set<string>("UserInfo_123", UserName, DateTime.Now.AddSeconds(10));
     lbtest.Text = "数据库数据:" + "张三";
     return;
    }
    lbtest.Text = "Redis缓存数据:" + UserName;
   }
  }

测试结果图

首次访问缓存中数据不存在,获取数据并写入缓存,并设定有效期10秒

10秒内再次访问读取缓存中数据

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# asp.net  # 性能优化  # Redis教程(十四):内存优化介绍  # C++开发的Redis数据导入工具优化  # Redis优化经验总结(必看篇)  # 详谈redis优化配置和redis.conf说明(推荐)  # node上的redis调用优化示例详解  # Redis 2.8-4.0过期键优化过程全纪录  # redis分布式锁优化的实现  # Redis进行相关优化详解  # 配置文件  # 共保  # 客户端  # 首次  # 下载地址  # 其他的  # 想知道  # 不存在  # 双击  # 将此  # 则可  # 设置为  # 数据库中  # 即在  # 中不  # 内将  # 键值  # 是否存在  # 再回  # 存了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Swift开发中switch语句值绑定模式  linux写shell需要注意的问题(必看)  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  如何快速生成可下载的建站源码工具?  Android实现代码画虚线边框背景效果  jQuery 常见小例汇总  如何快速重置建站主机并恢复默认配置?  什么是javascript作用域_全局和局部作用域有什么区别?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel如何创建自定义Facades?(详细步骤)  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何安全更换建站之星模板并保留数据?  Android滚轮选择时间控件使用详解  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  如何挑选优质建站一级代理提升网站排名?  Laravel如何实现事件和监听器?(Event & Listener实战)  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel如何升级到最新版本?(升级指南和步骤)  如何确保西部建站助手FTP传输的安全性?  大同网页,大同瑞慈医院官网?  Laravel如何使用Blade组件和插槽?(Component代码示例)  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel如何使用Blade模板引擎?(完整语法和示例)  🚀拖拽式CMS建站能否实现高效与个性化并存?  如何获取免费开源的自助建站系统源码?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何在阿里云ECS服务器部署织梦CMS网站?  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  如何快速搭建高效可靠的建站解决方案?  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何在云主机上快速搭建多站点网站?  网站制作报价单模板图片,小松挖机官方网站报价?  如何在Windows服务器上快速搭建网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  js实现获取鼠标当前的位置  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  如何在Windows虚拟主机上快速搭建网站?  如何快速搭建高效服务器建站系统?  如何在服务器上配置二级域名建站?  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何快速启动建站代理加盟业务?  如何在 React 中条件性地遍历数组并渲染元素  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)