Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >asp.net性能优化之使用Redis缓存(入门)

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

作者头像
张哥编程
发布于 2024-12-21 12:03:33
发布于 2024-12-21 12:03:33
910
举报
文章被收录于专栏:云计算linux云计算linux

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系统服务: 3.

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将参数写入配置文件 1 2 3 4 5 6 7 8 9

<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读取配置文件参数类 1 2 3 4 5 6 7 8 9

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,以及其他的一些操作类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84

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测试页面前后台代码 1 2 3 4 5 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> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

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秒内再次访问读取缓存中数据

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redis缓存服务搭建及实现数据读写
发现博客园中好多大牛在介绍自己的开源项目是很少用到缓存,比如Memcached、Redis、mongodb等,今天得空抽时间把Redis缓存研究了一下,写下来总结一下,跟大家一起分享 一下。由于小弟水平有限又是第一次接触Redis,有些的不对的地方欢迎指出纠正。
写代码的猿
2019/04/11
6790
Redis缓存服务搭建及实现数据读写
分布式中使用Redis实现Session共享(一)
用户1168362
2018/01/05
2.3K0
分布式中使用Redis实现Session共享(一)
Redis从入门到精通(二)C#中使用redis及封装Redis工具类
上一篇讲述了安装redis《Redis总结(一)Redis安装》,同时也大致介绍了redis的优势和应用场景。本篇着重讲解.NET中如何使用redis和C#。
架构师精进
2020/05/24
10.3K0
全网最完整的Redis入门指导
本文提供全网最完整的Redis入门指导教程,下面我们从下载Redis安装包开始,一步一步的学习使用。
Kiba518
2020/06/16
9540
c# RedisHelper
使用redis组件如下,至于为什么使用3.9版本,是因为4.0开始商业了,限制了次数
冰封一夏
2019/09/11
2K0
C# 通过ServiceStack 操作Redis——String类型的使用及示例
我这里就用别人已经封装好的Reids操作类来和大家一起参考了下,看看怎么使用ServiceStack.Redis 操作Redis数据
明志德道
2023/10/21
3710
C# 通过ServiceStack 操作Redis——String类型的使用及示例
基于Redis缓存的Session共享(附源码)
    在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion共享用的最多的应该是SQLServer数据库实现,我之前参与的一个项目么么亲子社区就是用的SQLSERVER实现不同子域名之间的Session共享。先打个广告嘿嘿,么么亲子网:enmuo.com,i.enmuo.com就是通过SQLSERVER实现Session共享 欢迎大家访问。
写代码的猿
2019/04/11
1K0
基于Redis缓存的Session共享(附源码)
C# Redis的五大数据结构相关操作及应用场景
下面额代码类均是通过 ServiceStack.Redis 来对Redis进行各种操作
明志德道
2023/10/21
6920
C#   Redis的五大数据结构相关操作及应用场景
Redis学习系列二之.Net开发环境搭建及基础数据结构String字符串
Redis有5种基本数据结构,分别是string、list(列表)、hash(字典)、set(集合)、zset(有序集合),这是必须掌握的5种基本数据结构.注意Redis作为一个键值对缓存系统,其所有的数据结构,都以唯一的key(字符串)作为名称,然后通过key来获取对应的数据.
郑小超.
2018/12/28
6730
ASP.NET Core微服务(六)——【redis操作】
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
红目香薰
2022/11/28
6580
教你写个简单的 Redis Client 框架 - .NET Core
最近叶老板写了个 FreeRedis,刚好前段时间在学习 Redis,于是跟风试试也写一个简单的 RedisClient。目前 FreeRedis 处于初级阶段,需要更多人的参与、测试,有兴趣大家一起参与贡献:
痴者工良
2021/04/26
1.3K0
Asp.net之真假分页大揭秘、使用AspNetPager实现真分页
最近在web界面的时候,遇到了一些非常现实的问题。最让人头疼的问题就是显示数据中的书画作品。这些书画作品都会以图片的形式展示给用户。 起初做的时候并没有想太多,只按着最简单的方式将所有的图片从数据库中查出来并显示在界面中,做完界面之后,自己在数据库中添加了一些数据做测试,发现每次打开网页都很慢。由于原来看视频的时候就知道真假分页,但是当时对于分页并没有深刻的体会,不知道真假分页的优缺点。由于每次打开网页都很慢,让我一下想起来了分页这件事。 面对几十条的数据,网页都会显示特别慢,如果面对上千上万条的记录时,网页就不知道慢成什么样子了,此时系统就可以说报废了。今天我们从本质上将分页问题解决掉。
程序猿小亮
2021/01/28
1.2K0
ASP.NET Core中使用Graylog记录日志
通常POST请求数据都在请求体中,ASP.NET Core中HttpRequest类型的Body属性是HttpRequestStream类型,该类型源码在Github上可以看到,但在Google和微软关方文档中都没搜索到。反编译Microsoft.AspNetCore.Server.Kestrel.Core.dll只找到了同样继承自ReadOnlyStream的FrameRequestStream
雪飞鸿
2019/02/25
1K0
ASP.NET Core 2.0下使用Redis——基于CSRedis实现
前几天挖了个坑,今天就来填这个坑了。关于在ASP.NET Core 2.0下使用Redis的问题,目前StackExchange.Redis已经支持.Net Core 2.0了,而微软提供的Microsoft.Extensions.Caching.Redis.Core方法,也是对StackExchange.Redis的一种官方封装,是基于StackExchange.Redis的,但是大家反映StackExchange.Redis在.Net Core下高并发容易出现死锁问题,目前没有解决办法。 本例是基于CSRedis来实现的,CSRedis 是国外大神写的,经过少量修改,现已支持 .NETCore 使用方法,先新建一个Redis缓存的类库,我这里命名为:Biz126.RedisCache,在该类库下新增一个名为RedisHelper的Redis帮助类:
徐大嘴
2019/03/21
5K0
WPF配置文件读写
XML配置 项目配置 /// <summary> /// 读取设置 /// </summary> /// <param name="settingName"></param> /// <returns></returns> public static string GetSettingString(string settingName) { try { string settingString = ConfigurationManager.AppSettings[settin
码客说
2021/07/19
1.1K0
AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和Sql Server的缓存管理和使用ObjectBuil
       这两天 PetShop is Evil?等对PetShop 的讨论很多,我在这里也发一篇凑凑热闹。我下面主要是对Asp.net 2.0新增的缓存管理方面的内容和PetShop 4的缓存处
张善友
2018/01/29
1.1K0
asp.net core 上使用redis探索(3)--redis示例demo
由于是基于.net-core平台,所以,我们最好是基于IDistributedCache接口来实现。ASP.NET-CORE下的官方redis客户端实现是基于StackExchange的。但是官方提供的IDistributeCache接口中的方法只是增删改查,我们可以继续拓展,增加订阅/发布,消息队列,当然这些方法必须是基于底层的StackExchange相对应的方法来做的。 如果我们要实现自己的Redis客户端,同时不使用底层的StackExchange驱动,可以派生一个继承自IDistributedCache的接口,定义自己需要的方法,例如:
Ryan_OVO
2023/10/19
3120
App.config和Web.config配置文件的自定义配置节点
  昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新。左查右查终于发现了问题。App.config配置文件中的配置貌似出现了问题。查找节点发现是如下节点:
aehyok
2018/08/31
1K0
App.config和Web.config配置文件的自定义配置节点
StackExchange.Redis通用封装类分享
首先是 ConnectionMultiplexer 的封装,ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,所以不需要在每个操作中不停的创建该对象的实例,一般都是使用单例来创建和存放这个对象,这个在官网上也有说明。
yaphetsfang
2020/07/30
1.4K0
StackExchange.Redis通用封装类分享
WinForm中使用XML文件存储用户配置及操作本地Config配置文件
大家都开发winform程序时候会大量用到配置App.config作为保持用户设置的基本信息,比如记住用户名,这样的弊端就是每个人一些个性化的设置每次更新程序的时候会被覆盖。
跟着阿笨一起玩NET
2018/09/19
3.2K0
推荐阅读
相关推荐
Redis缓存服务搭建及实现数据读写
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档