在ASP.NET MVC中使用Redis

一.Redis基本认知

1.含义: REmote DIctionary Server(Redis) | 是一个key-value存储系统 
2.特性: 
2.1 持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用; 
2.2 支持丰富的数据类型,如:Strings, Lists, Hashes, Sets 及 Ordered Sets ; 
2.3 多个操作支持事务,任意单个操作都是原子性的,即要么成功执行要么失败完全不执行; 
2.4 丰富的特性:支持发布/订阅 , 通知 ,Key过期等 
3.常用命令 
3.1 Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务,使用中Redis分为服务端(redis-server)和客户端(redis-cli); 
客户端是一个管理控制台,服务端负责redis的具体实现以及处理客户端的命令并提供服务;服务端启动时需要配置IP和端口。 
$redis-cli 连接本地Redis服务; 
$ redis-cli -h host -p port -a password 连接远程Redis服务

3.2 可通过 CONFIG 命令查看或设置配置项: 
CONFIG GET CONFIG_SETTING_NAME 
CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

3.3 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 
String(字符串):基本的类型,是二进制安全的,可以包含任何数据 
SET name “csdn” 
GET name 
Hash(哈希):key->多个filed->多个value。是一个键值(key=>value)对集合,是一个string类型的field和value的映射表。 
HMSET myhash field1 “Hello” field2 “World” 
HGET myhash field1 
List(列表):简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边 l)或者尾部(右边 r)。 
lpush csdn “Hello” 
rpush csdn “World” 
lrange csdn 0 2 
Set(集合):string类型的无序集合,不允许重复的成员,通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 
sadd csdn redis 
smembers csdn 
zset(sorted set:有序集合):是string类型元素的集合,但每个member都会关联一个double类型的score。redis正是通过分数来为集合中的成员进行从小到大的排序。 
zadd csdn 1 redis 
ZRANGE csdn 0 10 WITHSCORES

HyperLogLog结构:是用来做基数统计的算法,见菜鸟教程HyperLogLog

3.4 Redis的发布/订阅 
发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 
Redis 客户端可以订阅任意数量的频道。 
使用命令:SUBSCRIBE redisChat 订阅频道(channel),频道由Redis服务端进行维护,其余客户端通过命令:PUBLISH redisChat “Message” 来向redisChat频道 发布消息。

3.5 事务 
Redis 事务可以一次执行多个命令, 并且带有以下三个特征: 
a. 批量操作在发送 EXEC 命令前被放入队列缓存。 
b.收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。也就是Redis的命令执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制。 
c.在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段: 
开始事务。 
命令入队。 
执行事务。

以命令MULTI开始一个事务,以命令EXEC触发一个事务。

3.6 Redis 数据备份策略的选择:完整备份(RDB)和增量备份(AOF) 
转发自Redis持久化存储(AOF与RDB两种模式)

二.在ASP.NET MVC中使用Redis

1.首先把Demo贴出来吧,有积分请移步CSDN下载,然后补充下载是百度云下载

Demo可以正常运行,但仍有许多不完善的地方,以后想起来再回来修改修改,截图如下: 

2.在.NET体系里,可以使用两个外部的DLL来模拟Redis-client,对Redis-server进行操作:一个是ServiceStack.Redis,另外一个是StackExchange.Redis。这两个包都可以在Nuget中搜索到。 
Demo中使用的是StackExchange.Redis。它的参考文档点这儿

示例代码如下:

private void test1()
        {
            //step-1: 设置Redis链接
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
            //ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");
            string config = redis.Configuration;

            //step-2: Accessing a redis database 连接到Redis数据库
            IDatabase db = redis.GetDatabase();

            //step-3: 通过db使用Redis API (http://redis.io/commands)
            db.StringSet("mykey", "myvalue",new TimeSpan(0,10,0),When.Always,CommandFlags.None);
            string value = string.Empty;
            if (db.KeyExists("mykey"))
            {
                value = db.StringGet("mykey");
            }
        }

        private void test2()
        {
            //step-1: 设置Redis链接
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");

            //step-2: 创建连接到特定服务的 PUB/SUB 连接
            ISubscriber sub = redis.GetSubscriber();

            //step-3: 订阅频道,并处于监听状态,接受消息并处理
            string result = string.Empty;
            sub.Subscribe("messages", (channel, message) =>{
                result = string.Format("Channel:{0} ; Message:{1} .", channel.ToString(), message);
            });
        }

        private void test3()
        {
            //step-1: 设置Redis链接
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");

            //step-2: 创建连接到特定服务的 PUB/SUB 连接
            ISubscriber sub = redis.GetSubscriber();

            //step-3: 在另一个进程或是机器上,发布消息
            sub.Publish("messages", "hello");
        }

详情可以看Demo里面的RedisHelper。

三.Redis更新策略探究

1.单台服务器下如何保持与数据库的数据一致 
2.多台服务器下如何使用分布式缓存

哈哈 这一部分还没怎么实际操作过,所以留待以后有了实操经验了再来更新。

原文地址:https://www.cnblogs.com/yelanggu/p/10205001.html

时间: 2024-09-30 11:23:25

在ASP.NET MVC中使用Redis的相关文章

log4net 使用总结- (2)在ASP.NET MVC 中使用

log4net在ASP.NET MVC中的配置,还有一种配置方式,即不在web.config中,而是单独新建一个log4net.config 在根目录下 第一.引用log4net.dll 第二.在站点根目录下增加log4net.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="

ASP.NET MVC中使用异步控制器

线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个版本,才能趋于规范. ASP.NET MVC 中为什么需要使用异步呢,IIS有一个线程池来处理用户的请求,当一个新的请求过来时,将调度池中的线程以处理该请求,然而,但并发量很高的情况下,池中的线程已经不能够满足这么多的请求时候,池中的每一个线程都处于忙的状态则在处理请求时将阻塞处理请求的线程,并且该

ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也没什么大的差别. 在ASP.NET应用程序里使用ASP.NET AJAX访问WebService通常都是通过ScriptMananger引入WebService生成客户端代理的方法,同时也可以使用Microsoft Ajax Library来完成.本文将介绍在ASP.NET MVC中使用ASP.NE

ASP.NET MVC中使用FluentValidation验证实体

1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的验证方式,同时FluentValidation还提供了表达式链式语法. 2.安装FluentValidation FluentValidation地址:http://fluentvalidation.codeplex.com/ 使用Visual Studio的管理NuGet程序包安装FluentVa

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!!  2.关于任务跟踪管理系统项目中遇到的Windows服务以及Webservice的综合应用的问题. 大家好这是我第二次写博客 ,写的不好请大家多多谅解, 希望大家可以多多指正. 二:我稍微的整理了一下关于这个分布式定时器需求:1.根据任务跟踪管理系统中的数据库的AnswerSheet 表格中找到客户编

Asp.Net MVC中DropDownListFor的用法(转)

2016.03.04 扩展:如果 view中传入的是List<T>类型 怎么使用 DropList 既然是List<T> 那么我转化成 T  List<T>的第一个,最后一个不就是M吗? @Html.DropDownListFor(model=>model.First().Title, ViewData["Title"] as List<SelectListItem>, "标题", @"dropdown

ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败

在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加在Model里面.) 第一步:引用下面这个命名空间 第二步:添加验证 第三步:启动调试,出现以下问题: 解决方法: 超链接中包含了解决这个问题的详细介绍,也就是通过Code First数据库迁移的方式让Entity Framework帮助我们自动调整数据库里面的架构. 解决这个问题最简单的方法就是将

关于asp.net MVC 中的TryUpdateModel方法

有比较才会有收货,有需求才会发现更多. 在传统的WebFormk开发工作中,我们常常会存在如下的代码块 //保存 protected void btnSubmit_Click(object sender, EventArgs e) { try { BLL.MoneyBll cun = new BLL.MoneyBll(); Model.Money m1 = new Model.Money(); m1.Commany = int.Parse(this.Commany.Text); m1.Count

在asp.net mvc中使用PartialView返回部分HTML段

问题链接: MVC怎样实现异步调用输出HTML页面 该问题是个常见的 case, 故写篇文章用于提示新人. 在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewResultBase 同一时候它还有个兄弟PartialViewResult 相信聪明的你已经知道了它俩的差别了,没错 一个用于返回总体,还有一个返回局部(部分). 如果我有这样一个需求,输入username,然后返回相关信息.之前的做法可能会是用json格式来返回用户的相关信息,然后到页面去渲染相关 的