MVC + Redis
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的更多相关文章
- Asp.net MVC + Redis(hash入库+log4net集成)
博客四元素 既然要写一个博客类的网站,那就应该知道博客的相关信息. 标题 作者 时间 内容 title author time content 因为之前有了解过Redis,所以有点纠结于数据的存储方式 ...
- 使用maven简单搭建Spring mvc + redis缓存
注:此文参考并整合了网上的文章 <spring缓存机制>:http://blog.csdn.net/sidongxue2/article/details/30516141 <配置 S ...
- spring mvc redis消息队列
通常情况下,为了提高系统开发的灵活性和可维护度,我们会采用消息队列队系统进行解耦.下面是一个采用spring redis实现的消息队列实例,但此实例会由于网络延迟和阻塞等情况导致消息处理的延时,因而不 ...
- spring mvc+redis实现微信小程序登录
本文将详细的介绍微信小程序的登录流程以及在ssm框架下如何实现小程序用户登录 登录流程概要 主要的登录流程可以参考官方提供的一张流程图: 1.微信前台页面: 在微信版本更新之后,提高了安全机制,我们需 ...
- Asp.net MVC + Redis(Linux安装Redis)
最近有幸在工作中用到了redis,玩的还算开心.但是发现Redis在Windows上并不是满血状态的,所以决定安装一个Linux的虚拟机,让Redis在Linux上运行. 虚拟环境 虚拟机,我已经玩了 ...
- Spring MVC Redis 整合笔记
extends:http://blog.csdn.net/defonds/article/details/48716161, http://blog.csdn.net/java2000_wl/arti ...
- MVC SSO登陆 的麻烦事~
前段时间用MVC + Redis 做session搞了个简单的单点登录Web站.真是日了狗的问题多. 今天正好睡不着,做个备忘笔记>_< 实现方法很简单,无非就是从重载个Controlle ...
- 从头开始搭建分布式日志平台的docker环境
上篇(spring mvc+ELK从头开始搭建日志平台)分享了从头开始搭建基于spring mvc+redis+logback+logstash+elasticsearch+kibana的分布式日志平 ...
- Spring批量更新batchUpdate提交和Hibernate批量更新executeUpdate
1:先看hibernate的批量更新处理. 版本背景:hibernate 5.0.8 applicationContext.xml 配置清单: <?xml version="1.0&q ...
随机推荐
- Monkey测试总结
Monkey测试总结 1.什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等), 实 ...
- html base 又一重大发现
base 一个曾经不记得的标签,虽然接触Javaweb这么久了,但是还有很多基础性的东西都被我忽略掉了,还有很多基础但实用的技巧应该没有被我发现,虽然不使用这些技巧对功能实现没有多大影响.但是,发现这 ...
- 实例分割:MaskXRCnn 与Visual Genome数据集
一.VG数据集 机器学习领域的突破突然让计算机获得了以未曾有的高精度识别图像中物体的能力--几乎达到了让人惊恐的程度.现在的问题是机器是否还能更上层楼,学会理解这些图片中所发生的事件. Visual ...
- [源码阅读]RocketMQ-策略篇
一:为什么要阅读rocketmq的源码? 1 可以了解mq的底层实现逻辑. 二:打算怎么读,行动路径是哪儿些? 1: 本地启动 2 分步调试 3 fork项目,添加中文注释,提交到自己的代码库.并改 ...
- Android之Fragment的优点和作用
一:什么是Fragment 碎片.片段.其目的是为了解决不同屏幕分辩率的动态和灵活UI设计.大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产 ...
- dva相关文档
https://dvajs.com/guide/getting-started.html#%E5%AE%9A%E4%B9%89-model-------dva.js https://dvajs.com ...
- ffmpeg从内存读取文件
正常情况,ffmpeg直接从文件读取 AVFormatContext * _ctx = NULL; avformat_open_input(&_ctx, _filePath, 0, 0); 我 ...
- tomcat8安装及配置
首先是解压版的安装.很简单,直接解压到要安装的位置就OK了. 2.启动 bin目录下,执行startup.bat文件 3.浏览器中打开地址http://localhost:8080/
- JavaScript day3(数据类型)
数据类型(data type) JavaScript提供七种不同的数据类型(data types),它们是string(字符串), symbol(符号), number(数字), undefined( ...
- pandas - 案例(美国各州人口普查)
需求: 导入文件,查看原始数据 将人口数据和各州简称数据进行合并 将合并的数据中重复的abbreviation列进行删除 查看存在缺失数据的列 找到有哪些state/region使得state的值为N ...