Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >高性能缓存系统Memcached在ASP.NET MVC中应用

高性能缓存系统Memcached在ASP.NET MVC中应用

作者头像
Ryan_OVO
发布于 2023-10-18 12:09:18
发布于 2023-10-18 12:09:18
26005
代码可运行
举报
文章被收录于专栏:程序随笔程序随笔
运行总次数:5
代码可运行

在Memcached中实体类型未经序列化不能在Memcached中缓存,因此需要对实体类进行处理,才能缓存下来.

Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

我们可以使用Memcached缓存string类型等已经内部实现了序列化的类型,但是对于我们自定义的类型,我们并不能在Memcached中缓存下来,因为Memcached只能缓存序列化之后的数据,因此,在这里我们将自定义的实体类型序列化一下就可以在Memcached中存储了。

首先下载windows平台下的memcached,然后安装。安装完之后就是启动memcached服务了,你可以在cmd下用dos命令输入,也可以在计算机管理->服务->memcached->启动.来开启服务.

随后就是在项目中引入相关dll: Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 在项目的引用中引入Memcached.ClientLibrary.dll

随后就是编写程序了,在这里创建一个MVC程序: 在Models文件夹中创建一个类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Serializable]
public class VIP
{
public string UserName { get; set; }

public int? Vip { get; set; }

public DateTime? VipEndDate { get; set; }

public string Mail { get; set; }

public string QQ { get; set; }
}

若没有标注为可序列化,则后续运行程序将会报错。

随后创建一个MemcachedHelper类来辅助编程.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MemcachedHelper
{
public static MemcachedClient mclient;

static MemcachedHelper()
{
string[] serverlist = new string[] { "127.0.0.1:11211" };

SockIOPool pool = SockIOPool.GetInstance("First");
pool.SetServers(serverlist);
pool.Initialize();
mclient = new MemcachedClient();
mclient.PoolName = "First";
mclient.EnableCompression = false;
}

public static bool set(string key, object value, DateTime expiry)
{
return mclient.Set(key, value, expiry);
}

public static object Get(string key)
{
return mclient.Get(key);
}

}

最后就是Controller里面的具体实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class EntityMemcachedController : Controller
    {
        //
        // GET: /EntityMemcached/
        /// <summary>
        /// 序列化实体类为字节数组,将其存储到Memcached中,以缓存数据,从而减轻访问压力....
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            var vipInfo = new List<VIP>{
                new VIP{ UserName="张三", Vip=1, QQ="3123456", Mail="3123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(1) },
                new VIP{ UserName="李四", Vip=1, QQ="4123456", Mail="4123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(2) },
                new VIP{ UserName="王五", Vip=1, QQ="5123456", Mail="5123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(3) },
                new VIP{ UserName="赵六", Vip=1, QQ="6123456", Mail="6123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(4) },
                new VIP{ UserName="刘七", Vip=1, QQ="7123456", Mail="7123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(5) }
            };

            
            if (Request.Cookies["_EntityMemcached"] == null)
            {
                string sessionId = Guid.NewGuid().ToString();
                Response.Cookies["_EntityMemcached"].Value = sessionId;
                Response.Cookies["_EntityMemcached"].Expires = DateTime.Now.AddMinutes(1);//设置cookie过期时间

                MemcachedHelper.set(sessionId, vipInfo, DateTime.Now.AddMinutes(1));//设置缓存过期时间

                return Content("Memcached分布式缓存设置成功!!!");
            }
            else
            {
                string key = Request.Cookies["_EntityMemcached"].Value.ToString();

                object obj = MemcachedHelper.Get(key);
                List<VIP> info = obj as List<VIP>;

                if (info != null)
                {
                    return View(info);
                }

            }

            return Content("若显示则有'bug'");
        }

看看实现:

然后退出来,重新点击”实现memcached缓存”

 我设置了一分钟之内的缓存,因此在这一分钟之内将一直是这个界面,不得不说memcached还是不错!后续接着研究OutputCached + Monogodb的缓存策略

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MemCache在win7上的可视化配置以及Nodejs/Net应用
惯例科普:MemCache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。这是一套开放源代码软件,以BSD license授权发布。 MemCache 官网:http://memcached.org/ 安装步骤: 1、下载安装MemCache服务。 2、安装MemCache可视化监视工具MemCacheD Manager。 3、下载Net类库,使用Mem
磊哥
2018/05/08
1K0
MemCache在win7上的可视化配置以及Nodejs/Net应用
分享一下cookies操作(增、删、改、查)小经验
前段时间在做一个 SSO(Single Sign On),用cookies去存Token 网站保存用户信息这类都用的cookies 以前觉得cookies操作无非就那么几种,但是“杯具事件”还是很多的 下面分享一下对cookies的简单操作 -----------------------------------------------------操作----------------------------------------------------------- 1.添加cookies(用cookies
Porschev
2018/01/16
8080
分布式缓存系统Memcached简介与实践
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵
指尖改变世界
2019/05/25
4480
服务端(.Net)如何操作Cookies?
【摘要】Cookie是浏览器支持的,以键值对的方式存储变量和值,并保存至客户端的文本对象。通常在前端我们使用JavaScript能够很方便地操作Cookie。但是,有时候我们在服务端也需要对保存在客户端的Cookie进行操作,比如进行身份验证等。那么,基于.NET技术,在服务端我们如何操作Cookie呢?
高一峰
2020/09/22
1.6K0
Memcached使用实例
package com.memcached.util; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.management.ManagementFactory; import java.text.SimpleDateFormat; im
用户1220053
2018/02/09
7730
Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
  首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl、PHP为主。 仅仅memcached网站上列出的语言就有:Perl、PHP、Python、Ruby、C#、C/C++以及Lua等。
Edison Zhou
2018/08/20
9980
Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
  应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性。
Edison Zhou
2018/08/20
6240
Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
Memcached三种客户端的使用
注:该方式与第一种类似,只是在set方法的时候,传入参数顺序调换。缓存时间需注意,若memcached的服务端装在windows上,可能会出现运行错误。
一觉睡到小时候
2019/07/03
1.2K0
Windows 下使用 Memcached
Memcached 的使用其实就是客户端-服务器模式,所以服务端安装好之后还需要有一个客户端来连接服务端,然后才能进行存取键值对等操作。
LeoXu
2018/08/15
9890
ASP.NET Cookie
MaybeHC
2024/04/23
1610
ASP.Net Core 5.0 MVC Session的添加,及它与Cookie的关系
 从上图中,我们可以看出 session的值,并不会存储在客户端(浏览器),而是会以AspNetCore.Session的形式 将用户SessionId 存储在 浏览器 Cookie 键值对中,以便在下一次请求中方便识别身份。
明志德道
2023/10/21
2920
ASP.Net Core 5.0 MVC Session的添加,及它与Cookie的关系
ASP.NET Core 中的 JWT 鉴权实现
在当今的软件开发中,安全性和用户认证是至关重要的方面。JSON Web Token(JWT)作为一种流行的身份验证机制,因其简洁性和无状态特性而被广泛应用于各种应用中,尤其是在 ASP.NET Core 项目里。本文将详细介绍如何在 ASP.NET Core 应用中实现 JWT 鉴权,确保应用能够安全地验证用户身份并授权访问特定资源。
郑子铭
2025/03/10
2770
ASP.NET Core 中的 JWT 鉴权实现
Memcached 简单利用和简单了解(Mac的安装和使用)
Memcached 是一种用于分布式应用的一种缓存机制。应用也比较广泛。这里来学习一下。 首先Memcached 是分布式网站架构都需要用到的缓存机制。缓存就是服务器利用多余的空间上开辟了一个储存空间,在这片储存区域中,我们放入key-value形式的数据。这样的话,前端发来的请求在这片缓存中如果可以得到解决,就不要去访问数据库了。在Web中,最耗费时间的操作就是去数据库中查询,取出数据。如果一个界面,每次都要加载固定的信息,这些信息储存在数据库中,那么每次很多用户同时加载,就要耗费很长时间,但是把这些数据
ShenduCC
2018/04/27
8460
Memcached 简单利用和简单了解(Mac的安装和使用)
Java开发中的Memcache原理及实现
七、Memcached 客户端程序 Memcached的java客户端已经存在三种了: ? 官方提供的基于传统阻塞io由Greg Whalin维护的客户端 ? Dustin Sallings实现的
全栈程序员站长
2022/07/05
3600
springboot之集成Memcached
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
Vincent-yuan
2020/11/26
9040
Memcached使用小记
该文章简单记录一下在Windows平台下安装与配置Memcached的方法,Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
写代码的猿
2019/04/11
5010
Memcached使用小记
ASP.NET中Cookie跨域的问题及解决代码
http://www.liyumei.net.cn/post/share18.html
跟着阿笨一起玩NET
2018/09/20
1.9K0
Django学习-第十四讲:文件上传、cookie、session、memcached
1.在前端中,我们需要填入一个form标签,然后在这个form标签中指定enctype="multipart/form-data",不然就不能上传文件。
小海怪的互联网
2019/10/08
1.2K0
MemCache – SpringBoot整合
面试的时候被问过:有没有使用过MemoryCache。讲实话:我个人认为这个内存数据库跟Redis没法比,可能我只了解Redis。我整理一些资料关于MemoryCache的,防止以后项目用到了,不用临时看了。
收心
2022/11/18
1.7K0
flea-cache使用之Memcached接入
spring-context-support-4.3.18.RELEASE.jar
huazie
2024/10/11
1870
flea-cache使用之Memcached接入
相关推荐
MemCache在win7上的可视化配置以及Nodejs/Net应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验