asp.net core 使用 Redis 和 Protobuf 进行 Session 缓存

目录

  • Redis 介绍

  • asp.net core Session 介绍

  • Redis & Session 实例讲解

  • Session的使用

  • 使用 Protobuf 给 Session添加扩展方法

Redis 介绍

下面是Redis官网的介绍:

Redis is an open source (BSD licensed), in-memory data structure store, used as database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

Redis 是一个开源的(基于BSD许可),内存数据存储结构,常用作数据库,缓存,和消息队列。它支持如字符串、哈希表、列表、集合、排序集范围查询、位图、hyperloglogs半径和地理空间索引与查询。Redis内置主从连接,Lua脚本、LRU回收,事务和不同级别文件持久化,并提供了利用集群的主从切换和自动分区等来保证高可用性。

Redis的深入介绍我就直接开传送门了,不是本篇的重点,但是我给你们整理了一下,你们还是要感谢我滴:

redis 高可用部署及监控:http://blog.sina.com.cn/s/blog_75ad98f30101fwqj.html
redis 主从连接:http://www.tuicool.com/articles/fAnYFb
redis 事务: http://redisbook.readthedocs.io/en/latest/feature/transaction.html
redis 内存回收LRU:http://www.open-open.com/lib/view/open1427547789059.html
redis 数据持久化:http://qifuguang.me/2015/10/13/Redis%E6%8C%81%E4%B9%85%E5%8C%96/

以上知识学习完,使用和面试时应付Redis的提问应该不成问题了。

asp.net core session 介绍

session本身是一个很难解释的名词,在http中session代表服务器与浏览器的一次会话过程,这个过程可能一直,也可能间断的。

asp.net core中的session以中间件的方式提供给我们来使用。

下面来看一下使用方法:
首先,添加session的NuGet包Microsoft.AspNetCore.Http.Abstractions到项目中,在startup.cs文件的ConfigureServices(IServiceCollection services)函数中,使用app.UseSession()app.UseCaching()来使用session.

//在使用session之前要注入cacheing,因为session依赖于cache进行存储
services.AddCaching();services.AddSession();

添加了session之后就需要有存储session的地方,可以使用内存存储,也可以使用其他自定义存储,比如redis或者SQL Server等。

// 重要: session的注册必须在UseMvc之前,因为MVC里面要用 app.UseSession();app.UseMvc(routes =>
{routes.MapRoute(        name: "default",        template: "{controller}/{action}/{id?}",        defaults: new { controller = "Home", action = "Index" });
});

Redis & Session 实例讲解

要在Session中使用Redis,只需要把services.AddCaching();换成services.AddDistributedRedisCache();就可以了,如下:

services.AddDistributedRedisCache(option => {//redis 数据库连接字符串        option.Configuration = Configuration.GetConnectionString("RedisConnection");//redis 实例名        option.InstanceName = "master";}
);

Session的使用

在 asp.net core 的 MVC Controller 中,你可以HttpContext.Session来获取Session对象。

如果不是在 Controller 中需要使用 Session 的话,可以使用IHttpContextAccessor这个接口通过注入的方式来获取Session。

以下是在 Controller 中使用Session,需要引入Microsoft.AspNetCore.Http空间:

 

以下是在除了 Controller 的其他地方使用 Session:


使用 Protobuf 给 Session添加扩展方法

默认情况下,我们只能存储byte[]到我们的Session当中,这让我们使用起来很不方便,在Microsoft.HttpCore.Extension中 Microsoft 给提供了一个SetString,SetInt32 和GetString,GetInt32的方法,但是在很多情况下,我们是需要使用Session来存储一个对象的,那么此时就需要给Session添加一个扩展方法。

为了追求效率和性能,我们选择Google的Protobuf序列化组件,而不使用Json.Net,在性能方面,Protobuf要比XML或者Json效率高很多。

在Nuget包中引入protobuf-net


使用Protobuf-net序列化,需要在序列化的对象打上[ProtoContract][ProtoMember]等标记。

Ps:目前Redis的扩展Microsoft.Extensions.DependencyInjection下面的AddDistributedRedisCache还不支持RC2,可以去github上搜索源代码,添加到项目中

相关文章:


原文地址:http://www.cnblogs.com/savorboard/p/5592948.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java后台 flex前台例子_flex+blazeds+java后台消息推送(简单示例)

现在有个问题需要大家思考一下,有个已经上线了的项目,有好好几千甚至上万的客户在使用了。现在项目开发商想发布一个通知。在今天下午6点需要重新启动服务器,想让在线的人在在预定的时间内都收到消息,让大家做好相应的准备&#x…

Java和Android中的注解

转载自 Java和Android中的注解1.引言 从JDK1.5开始,引入了注解类Annotation,Annotation其实是一种接口,可以作用于类、方法、属性等等 ,它可以通过反射机制来访问annotation信息,获取所加上注解信息,做相应…

第二章 指南(4.3)添加 View

原文:Adding a view作者:Rick Anderson翻译:魏美娟(初见)校对:赵亮(悲梦)、高嵩(Jack)、娄宇(Lyrics)、许登洋(Seay)、姚阿勇(Dr.Yao) 本节将修改 HelloWorldController 类,把使用 Razor 视图模…

java多表查询返回数据_spring data jpa如何在多张数据库表中查询返回某些字段值?...

对于多表联查需要使用springdata jpa的Query标注实现,例如最代码的我的私信列表的查询:public static final String POSTREPOSITORY_FINDALLBYTYPEANDGROUPBYUSERID "select id from (select id,target_id,case when user_id?1 and type?2 then …

JAVA反射修改常量,以及其局限

转载自 JAVA反射修改常量,以及其局限问题,以及一个解决方案 今天公司的JAVA项目碰到一个问题:在生成xls文件的时候,如果数据较多,会出现ArrayIndexOutOfBoundsException。Google发现是项中所用的jxl包(开源…

java出代码1601_LeetCode 1601. 最多可达成的换楼请求数目

题目描述我们有 n 栋楼,编号从 0 到 n - 1 。每栋楼有若干员工。由于现在是换楼的季节,部分员工想要换一栋楼居住。给你一个数组 requests ,其中 requests[i] [fromi, toi] ,表示一个员工请求从编号为 fromi 的楼搬到编号为 toi …

asp.net core 中间件详解及项目实战

前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的Hello World,如果你觉得本篇文章对你有用的话,不妨…

一分钟实现分布式锁

转载自 一分钟实现分布式锁一、缘起 分布式环境下,多台机器上多个进程对一个数据进行操作,如果不做互斥,就有可能出现“余额扣成负数”,或者“商品超卖”的情况,如何实现简易分布式锁,对分布式环境下的临界…

java建立线性表的链式结构_Java实现线性表的链式存储

本文实例为大家分享了Java实现线性表的链式存储,供大家参考,具体内容如下链表:一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。package algorithm.datastructure.linklist;import java.ut…

dotnet core 开发体验之Routing

开始 回顾上一篇文章:dotnet core开发体验之开始MVC 里面体验了一把mvc,然后我们知道了aspnet mvc是靠Routing来驱动起来的,所以感觉需要研究一下Routing是什么鬼。 Routing简单使用体验 首先我们用命令yo aspnet创建一个新的空web项目。(Yeo…

线程间协作的两种方式:wait、notify、notifyAll和Condition

转载自 线程间协作的两种方式:wait、notify、notifyAll和Condition在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继…

格密码基础:q-ary格

目录 一. 格密码的重要性 二. 格密码基础 2.1 格点的另一种理解方式 三. q-ary格 3.1 q-ary垂直格 3.2 q-ary格 3.3 二者结合 四. 论文中的q-ary格 4.1 定理1 4.2 定理2 4.3 定理3 一. 格密码的重要性 格密码的基础是研究格点上的困难问题,这种格点使用…

java动脑公开课_java课堂动手动脑

实验任务一:阅读并运行示例PassArray.java.1)源代码:package demo;//PassArray.java//Passing arrays and individual array elements to methodspublic class PassArray {public static void main(String[] args) {int a[] { 1, 2, 3, 4, 5 };String o…

dotnet core开发体验之开始MVC

开始 在上一篇文章:dotnet core多平台开发体验 ,体验了一把dotnet core 之后,现在想对之前做的例子进行改造,想看看加上mvc框架是一种什么样的体验,于是我就要开始诞生今天的这篇文章来分享我的感受了。 一、项目改造加…

Java时间处理第三方包:Joda-Time

转载自 Java时间处理第三方包:Joda-TimeJoda-Time provides a quality replacement for the Java date and time classes.Joda-Time is the de facto standard date and time library for Java prior to Java SE 8. Users are now asked to migrate to java.time (…

Visual Studio Code五月版本更新

开源项目、跨平台代码编辑器Visual Studio Code刚发布了其1.2版本(虽然说是2016年5月发布,但其实是在6月交付的)。和往常一样,这次发布的版本中对于很大一部分功能都进行了改善,其中最值得关注的可能是一种全新整合的终…

关于SimpleDateFormat时间格式化线程安全问题

转载自 关于SimpleDateFormat时间格式化线程安全问题昨天推送的文章《关于创建和销毁对象》一文中,2.1重复利用对象这一小节所举的SimpleDateFormat格式化时间的例子是不合适的,因为多线程场景下,SimpleDateFormat存在线程安全问题。在此&am…

聊聊ASP.NET Core默认提供的这个跨平台的服务器——KestrelServer

跨平台是ASP.NET Core一个显著的特性,而KestrelServer是目前微软推出了唯一一个能够真正跨平台的Server。KestrelServer利用一个名为KestrelEngine的网络引擎实现对请求的监听、接收和响应。KetrelServer之所以具有跨平台的特质,源于KestrelEngine是在一…

pdfbox java.lang.outofmemoryerror_Apache PDFBox 1.8.11 发布,Java 的 PDF 处理类

Apache PDFBox 1.8.11 发布,此版本是个增量 bug 修复版本,包括大量 bug 修复和改进。现已提供下载:主要改进内容:Bug 修复[PDFBOX-962] - All sort of Problems when importing Xfdf files into PDFs ->damaged pdfs and NPEs[…

Java8 Striped64 和 LongAdder

转载自 Java8 Striped64 和 LongAdder 数据 STRIPING 根据维基百科的这段说明:In computer data storage, data striping is the technique of segmenting logically sequential data, such as a file, so that consecutive segments are stored on different phys…