在ASP.NET MVC中使用Redis

时间:2022-09-10 21:36:17

一.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可以正常运行,但仍有许多不完善的地方,以后想起来再回来修改修改,截图如下: 
在ASP.NET MVC中使用Redis

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.多台服务器下如何使用分布式缓存

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

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

  1. 最新 .NET Core 中 WebSocket的使用 在Asp.Net MVC 中 WebSocket的使用 .NET Core 中 SignalR的使用

    ASP.NET MVC 中使用WebSocket 笔记 1.采用控制器的方法 这个只写建立链接的方法的核心方法 1.1 踩坑 网上都是直接 传个异步方法 直接接受链接 自己尝试了好多次链接是打开的,到 ...

  2. 2.ASP.NET MVC 中使用Crystal Report水晶报表

    上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ...

  3. 关于 ASP.NET MVC 中的视图生成

    在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...

  4. 在Asp.Net MVC 中配置 Serilog

    Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ...

  5. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  6. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  8. asp&period;net mvc 中 一种简单的 URL 重写

    asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...

  9. 在 ASP&period;NET MVC 中充分利用 WebGrid &lpar;microsoft 官方示例&rpar;

    在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...

随机推荐

  1. shell 脚本之 shell 练习题汇总

    整理了一些 shell 相关的练习题,记录到这里. 1. 请按照这样的日期格式 xxxx-xx-xx 每日生成一个文件,例如:今天生成的文件为 2013-09-23.log, 并且把磁盘的使用情况写到 ...

  2. linux下实现在程序运行时的函数替换&lpar;热补丁&rpar;

    声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享. 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的. ...

  3. &lbrack;团队项目&rsqb;Github生成燃尽图的方式

    经过一晚上折腾,终于算是把linux上成功生成了我们团队项目的燃尽图,效果还是不错,在过程中又发现了另一种生成燃尽图的方式,也是基于一个开源项目. 1.准备: 首先你的项目一定要有milestone. ...

  4. 求教Sublime Text2 SublimeLinter插件安装问题

    昨天装了 SublimeLinter插件(代码语法检测),这个事插件的地址:https://github.com/Kronuz/SublimeLinter 按照作者的介绍配置了一下,发现语法检测不起作 ...

  5. Unity下载文件一(www协程下载)

    下载功能,是大多数游戏或者软件都需具备的一个基础模块,但是很多人却没有机会去写这个完整功能. 那么我就分享下我写该功能时的随笔整理 本文只说www协程下载,http的同步和异步下载放到下篇 这个简单: ...

  6. Mysql 按行dump出数据

    mysqldump -u${user} -p${passwd} --skip-extended-insert --database ${dbname} --table ${tablename} &gt ...

  7. 深入了解Javascript模块化编程

    本文译自Ben Cherry的<JavaScript Module Pattern: In-Depth>.虽然个人不太认同js中私有变量存在的必要性,但是本文非常全面地介绍了Javascr ...

  8. 在smarty模板中嵌入php代码

    我个人并不太喜欢smarty的语法,写起来比较啰嗦易出现匹配出错,但是旧项目中有许多工程都是采用它作模板.最近需要在此上稍微加一些PHP的内容,但我不想在模板控制层去一个一个assign,而想在模板文 ...

  9. zabbix 添加自定义key

    vim /etc/zabbix/zabbix_agentd.conf UserParameter=zjzc.login,/bin/sh /usr/sbin/get_login.sh UserParam ...

  10. Codeforces Round &num;516 &lpar;Div&period; 2)D&period; Labyrinth&lpar;BFS&rpar;

    题目链接:http://codeforces.com/contest/1064/problem/D 题目大意:给你一个n*m的图,图中包含两种符号,'.'表示可以行走,'*'表示障碍物不能行走,规定最 ...