net MVC + Redis(hash入库+log4net集成)

https://www.cnblogs.com/hoyu/p/9063675.html

博客四元素

既然要写一个博客类的网站,那就应该知道博客的相关信息。

标题 作者 时间 内容

title author time content

因为之前有了解过Redis,所以有点纠结于数据的存储方式,最终决定还是按照书上写的一步一步来,搞完了之后再决定是不是需要做修改。

书中介绍的存储方式如下:

post:count title 小猿的博客

author 小猿

time 2018.5.17

content 世界如此美妙,我却选择的程序员

看的出来博客的所有内容都是以HashSet形式存储的(目前状态),保证存储内容的唯一性取决于post:count的count,这个count应该类似于自增变量。

既然是面向对象编程,第一件事肯定是创建一个实体类;

using System;

using System.Collections.Generic;

using System.Text;

using Blog.Common;

namespace Blog.Models

{

public class BLogModel

{

public BLogModel(string title, string author, DateTime time, string content)

{

bool flag = true;

if (!title.IsNullOrEmpty())

this.title = title;

else

flag = false;

    if (!author.IsNullOrEmpty())
this.author = author;
else
flag = false; if (time == null)
flag = false;
else
this.time = time; if (!content.IsNullOrEmpty())
this.content = content;
else
flag = false; if(flag==false)
{
throw new ApplicationException("创建BLogModel实体有必填字段为空");
}
}
public string title { get; set; } public string author { get; set; } public DateTime time { get; set; } public string content { get; set; }

}

}

创建这个实体类,我住了定义字段之外主要做了两件事。

①由于在我的SDK里没有找到判空的方法,所以给string写一个扩展方法IsNullOrEmpty;

②每一个博客对象都应该是完整的即每个字段都是必填项,因为使用的是Redis存储也就只能在C#中判断必填项了;

这里还说到另外一个问题,通常情况下需要建立文章缩略名称和文章ID的关联关系。这样做的目的是为了确保文章的唯一性和符合网站网址规范上的一些操作。但是现在还不打算启用这一操作。

纠结的入库方式

本来我想的是在控制器中获得数据然后调用RedisCommon的方法获取一个连接对象添加一下就行了,但是代码写了很长一行才搞定exist的判断,有点忍不了。还是决定把所有数据都扔给RedisCommon类叫他来完成这件事情。

首先一打开这个类我就决定先写一个扩展方法(我可能最近比较迷恋写扩展),和之前的ToDic正好相反,这次是把Dictionary

public static HashEntry[] ToHashEntry(this Dictionary<string, string> dic)

{

List list = new List();

foreach (var item in dic.Keys)

{

list.Add(new HashEntry(item, dic[item]));

}

    return list.ToArray();
}

写这个方法的目的是感觉以后会有很多的字典转成HashEntry数组的情况,使用起来可能比较方便,然后就可以开心的写入库方法了。

public static void SetBLog(BLogModel bLog)

{

string postCount = GetData().StringIncrement("post:count").ToString();

Dictionary<string, string> dic = new Dictionary<string, string>();

dic.Add("title", bLog.title);

dic.Add("author", bLog.author);

dic.Add("time", bLog.time.ToString());

dic.Add("content", bLog.content);

    try
{
GetData().HashSet("post:"+postCount, dic.ToHashEntry());
}
catch (Exception e)
{
throw e;
}
}

虽然还不想使用缩略名称和ID关联关系的这个功能,但还是写上吧,省的以后费事。

public static bool SetSlugToId(string slug, string id)

{

if (!GetData().HashExists("slug.to.id", slug))

{

GetData().HashSet("slug.to.id", slug, id);

return true;

}

return false;

}

集成log4net

log4net就很熟悉了,虽然可以把各种日志都打到数据库中,但是感觉最实用的还是日志文件。

所以起手式还是dotnet cli命令dotnet add package log4net

这里提一下,准备以后有时间了解一下bower,如果可以搞定的话,就玩一下。

然后操作步骤如下文

创建一个文件,起名叫log4net.config。

在项目起始方法中加载log4net。

创建一个全局异常类,其实可以不用这个类的,但是感觉还不错就加进来了。

log4net.config

在Startup文件中加载log4net,其实比原来就多加了三行代码。

这里需要说的就是创建静态ILoggerRepository的时候需要导包,最机智的方法自然就是dotnet new sln创建一个解决方案,把项目填进去,用VS解决这件事。

public static ILoggerRepository repository{get;set;}

public Startup(IConfiguration configuration)

{

Configuration = configuration;

    //加载log4net日志配置文件
repository = LogManager.CreateRepository("NETCoreRepository");
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
}

全局异常类

using log4net;

using Microsoft.AspNetCore.Mvc.Filters;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

namespace Blog

{

public class HttpGlobalExceptionFilter : IExceptionFilter

{

private ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(HttpGlobalExceptionFilter));

public void OnException(ExceptionContext context)

{

log.Error(context.Exception);

}

}

}

log的使用方式,一般情况下吧log对象放在基类中就够用了。

protected static ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(HttpGlobalExceptionFilter));

log.Info("log test fisish");

MVC + Redis的更多相关文章

  1. Asp.net MVC + Redis(hash入库+log4net集成)

    博客四元素 既然要写一个博客类的网站,那就应该知道博客的相关信息. 标题 作者 时间 内容 title author time content 因为之前有了解过Redis,所以有点纠结于数据的存储方式 ...

  2. 使用maven简单搭建Spring mvc + redis缓存

    注:此文参考并整合了网上的文章 <spring缓存机制>:http://blog.csdn.net/sidongxue2/article/details/30516141 <配置 S ...

  3. spring mvc redis消息队列

    通常情况下,为了提高系统开发的灵活性和可维护度,我们会采用消息队列队系统进行解耦.下面是一个采用spring redis实现的消息队列实例,但此实例会由于网络延迟和阻塞等情况导致消息处理的延时,因而不 ...

  4. spring mvc+redis实现微信小程序登录

    本文将详细的介绍微信小程序的登录流程以及在ssm框架下如何实现小程序用户登录 登录流程概要 主要的登录流程可以参考官方提供的一张流程图: 1.微信前台页面: 在微信版本更新之后,提高了安全机制,我们需 ...

  5. Asp.net MVC + Redis(Linux安装Redis)

    最近有幸在工作中用到了redis,玩的还算开心.但是发现Redis在Windows上并不是满血状态的,所以决定安装一个Linux的虚拟机,让Redis在Linux上运行. 虚拟环境 虚拟机,我已经玩了 ...

  6. Spring MVC Redis 整合笔记

    extends:http://blog.csdn.net/defonds/article/details/48716161, http://blog.csdn.net/java2000_wl/arti ...

  7. MVC SSO登陆 的麻烦事~

    前段时间用MVC + Redis 做session搞了个简单的单点登录Web站.真是日了狗的问题多. 今天正好睡不着,做个备忘笔记>_< 实现方法很简单,无非就是从重载个Controlle ...

  8. 从头开始搭建分布式日志平台的docker环境

    上篇(spring mvc+ELK从头开始搭建日志平台)分享了从头开始搭建基于spring mvc+redis+logback+logstash+elasticsearch+kibana的分布式日志平 ...

  9. Spring批量更新batchUpdate提交和Hibernate批量更新executeUpdate

    1:先看hibernate的批量更新处理. 版本背景:hibernate 5.0.8 applicationContext.xml 配置清单: <?xml version="1.0&q ...

随机推荐

  1. C# 定时无操作则退出登陆,回到登陆界面。

    有时候根据需求需要为程序添加在规定的时间内无操作则退出当前的登陆程序的功能,如下代码模拟描述的需求功能. using System; using System.Collections.Generic; ...

  2. Tomcat8 连接池

    1.所有的tomcat项目共用一个连接池配置 1.1 修改conf->context.xml文件,在Context节点下配置 <Resource name="jdbc/myDat ...

  3. C# 把时间 月 //把第一个0替换为空

    string str = "2019-01"; //name: "2019-01月" str = str.Substring(str.Length - , ); ...

  4. 多目标跟踪笔记二:Efficient Algorithms for Finding the K Best Paths Through a Trellis

    Abstract 本文提出了一种新的方法来寻找不相交k最优路径.最坏情况下计算复杂度为N3log(N).该方法比WVD算法(https://www.cnblogs.com/walker-lin/p/1 ...

  5. 比n大的最小不重复数

    void Calculate(int a) { int pa = a; ; ] = {}; //将pa按位存储到数组b ) { b[count++] = pa%; pa = pa/; } bool f ...

  6. 关于MySQL中自增的理解和设置

    show create table t10;--查看表的创建结果 show create table t10\G;--竖列查看 --设置自增为20 ); insert into t2(name) va ...

  7. H5 web存储

    H5提供了两种在客户端存储数据的方式:localStorage 持久化的本地存储(浏览器关闭重新打开数据依然存在)sessionStorage 针对一个session的本地存储之前这些都是由cooki ...

  8. Python-程序的控制结构

    程序的分支结构 >单分支结构 根据判断条件结果而选择不同向前路径的运行方式 if <条件>: <语句块> 代码示例: guess = eval(input()) if g ...

  9. JS判断浏览器类型和屏幕分辨率来调用不同的CSS样式

    代码如下: <!-- if (window.navigator.userAgent.indexOf("MSIE")>=1) { var IE1024="&qu ...

  10. [Poj2112][USACO2003 US OPEN] Optimal Milking [网络流,最大流][Dinic+当前弧优化]

    题意:有K个挤奶机编号1~K,有C只奶牛编号(K+1)~(C+K),每个挤奶机之多能挤M头牛,现在让奶牛走到挤奶机处,求奶牛所走的最长的一条边至少是多少. 题解:从起点向挤奶机连边,容量为M,从挤奶机 ...