在前面介绍了三篇关于MongoDB数据库的开发使用文章,严格来讲这个不能归类于MongoDB数据库开发,不过Redis又有着和MongoDB数据库非常密切的关系,它们两者很接近,Redis主要是内存中的NoSQL数据库,用来提高性能的;MongoDB数据库则是文件中的NoSQL数据库,做数据序列号存储使用的,它们两者关系密切又有所区别。本篇主要介绍Redis的安装及使用,为后面Redis和MongoDB数据库的联合使用先铺下基础。

1、Redis基础及安装

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis的代码遵循ANSI-C编写,可以在所有POSIX系统(如Linux, *BSD, Mac OS X, Solaris等)上安装运行。而且Redis并不依赖任何非标准库,也没有编译参数必需添加。

1)Redis支持两种持久化方式:

(1):snapshotting(快照)也是默认方式.(把数据做一个备份,将数据存储到文件)

(2)Append-only file(缩写aof)的方式

快照是默认的持久化方式,这种方式是将内存中数据以快照的方式写到二进制文件中,默认的文件名称为dump.rdb.可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key键修改就自动做快照.

aof方式:由于快照方式是在一定间隔时间做一次的,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

2)Redis数据结构

Redis 的作者antirez曾称其为一个数据结构服务器(data structures server),这是一个非常准确的表述,Redis的所有功能就是将数据以其固有的几种结构保存,并提供给用户操作这几种结构的接口。我们可以想象我们在各种语言中的那些固有数据类型及其操作。

Redis目前提供四种数据类型:string,list,setzset(sorted set)和Hash

  • string是最简单的类型,你可以理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。
  • list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
  • set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。
  • zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解了有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。
  • Hash数据类型允许用户用Redis存储对象类型,Hash数据类型的一个重要优点是,当你存储的数据对象只有很少几个key值时,数据存储的内存消耗会很小.更多关于Hash数据类型的说明请见: http://code.google.com/p/redis/wiki/Hashes

3)Redis数据存储

Redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。

save seconds updatessave配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。

appendonly yes/no appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。

appendfsync no/always/everysec appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。

4)Redis的安装

Redis可以在不同的平台运行,不过我主要基于Windows进行开发工作,所以下面主要是基于Windows平台进行介绍。

Redis可以安装以DOS窗口启动的,也可以安装为Windows服务的,一般为了方便,我们更愿意把它安装为Windows服务,这样可以比较方便管理。下载地址:https://github.com/MSOpenTech/redis/releases下载,安装为Windows服务即可。

当前可以下载到最新的Windows安装版本为3.0,安装后作为Windows服务运行,安装后可以在系统的服务里面看到Redis的服务在运行了,如下图所示。

安装好Redis后,还有一个Redis伴侣Redis Desktop Manager需要安装,这样可以实时查看Redis缓存里面有哪些数据,具体地址如下:http://redisdesktop.com/download

下载属于自己平台的版本即可

下载安装后,打开运行界面,如果我们往里面添加键值的数据,那么可以看到里面的数据了。

2、Redis的C#使用

Redis目前提供四种数据类型:string,list,setzset(sorted set)和Hash。因此它在C#里面也有对应的封装处理,而且有很多人对他进行了封装,提供了很多的响应开发包,具体可以访问http://redis.io/clients#c 进行了解。一般建议用ServiceStack.Redis的封装驱动比较好,具体的使用可以参考https://github.com/ServiceStack/ServiceStack.Redis。

我们开发C#代码的时候,可以在NuGet程序包上面进行添加对应的ServiceStack.Redis引用,如下所示。

在弹出的NuGet程序包里面,输入ServiceStack.Redis进行搜索,并添加下面的驱动引用即可。

这样会在项目引用里面添加了几个对应的程序集,如下所示。

在C#里面使用Redis,首先需要实例化一个Redis的客户端类,如下所示。

        //创建一个Redis的客户端类RedisClient client = new RedisClient("127.0.0.1", 6379);

在使用前,我们需要清空所有的键值存储,使用FushAll方法即可,如下所示

            //Redis FlushAll 命令用于清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。 client.FlushAll();

根据上面的驱动,可以为不同类型的处理编写一些演示代码,下面代码是摘录网上的案例进行介绍。

            #region string类型的测试代码client.Add<string>("StringValueTime", "带有有效期的字符串", DateTime.Now.AddMilliseconds(10000)); while (true) { if (client.ContainsKey("StringValueTime")) { Console.WriteLine("String.键:StringValue, 值:{0} {1}", client.Get<string>("StringValueTime"), DateTime.Now); Thread.Sleep(10000); } else { Console.WriteLine("键:StringValue, 值:已过期 {0}", DateTime.Now); break; } } client.Add<string>("StringValue", " String和Memcached操作方法差不多"); Console.WriteLine("数据类型为:String.键:StringValue, 值:{0}", client.Get<string>("StringValue")); Student stud = new Student() { id = "1001", name = "李四" }; client.Add<Student>("StringEntity", stud); Student Get_stud = client.Get<Student>("StringEntity"); Console.WriteLine("数据类型为:String.键:StringEntity, 值:{0} {1}", Get_stud.id, Get_stud.name); #endregion #region Hash类型的测试代码 client.SetEntryInHash("HashID", "Name", "张三"); client.SetEntryInHash("HashID", "Age", "24"); client.SetEntryInHash("HashID", "Sex", "男"); client.SetEntryInHash("HashID", "Address", "上海市XX号XX室"); List<string> HaskKey = client.GetHashKeys("HashID"); foreach (string key in HaskKey) { Console.WriteLine("HashID--Key:{0}", key); } List<string> HaskValue = client.GetHashValues("HashID"); foreach (string value in HaskValue) { Console.WriteLine("HashID--Value:{0}", value); } List<string> AllKey = client.GetAllKeys(); //获取所有的key。 foreach (string Key in AllKey) { Console.WriteLine("AllKey--Key:{0}", Key); } #endregion #region List类型的测试代码 /* * list是一个链表结构,主要功能是push,pop,获取一个范围的所有的值等,操作中key理解为链表名字。 * Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素, * 这样list既可以作为栈,又可以作为队列。Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销, * Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构 */ client.EnqueueItemOnList("QueueListId", "1.张三"); //入队 client.EnqueueItemOnList("QueueListId", "2.张四"); client.EnqueueItemOnList("QueueListId", "3.王五"); client.EnqueueItemOnList("QueueListId", "4.王麻子"); long q = client.GetListCount("QueueListId"); Console.WriteLine(client.GetItemFromList("QueueListId", 0)); for (int i = 0; i < q; i++) { Console.WriteLine("QueueListId出队值:{0}", client.DequeueItemFromList("QueueListId")); //出队(队列先进先出)  } q = client.GetListCount("QueueListId"); Console.WriteLine(q); client.PushItemToList("StackListId", "1.张三"); //入栈 client.PushItemToList("StackListId", "2.张四"); client.PushItemToList("StackListId", "3.王五"); client.PushItemToList("StackListId", "4.王麻子"); long p = client.GetListCount(

转载于:https://www.cnblogs.com/itjeff/p/6386458.html

基于C#的MongoDB数据库开发应用(4)--Redis的安装及使用相关推荐

  1. mongo-admin基于Web的Mongodb数据库管理系统

    1.基本介绍 该项目是基于Web的Mongodb数据库管理工具. 项目地址:https://github.com/ammi3/mongo-admin 演示地址:http://47.98.136.116 ...

  2. MongoDB数据库+图形化工具下载安装及使用

    文章目录 1.下载 2.安装 3.安装失败问题解决 4.启动 5.图形化工具 1)下载 2)连接客户端 3)基本操作 6.更多详细操作 1.下载 官网下载地址:https://www.mongodb. ...

  3. 基于python和MySQL数据库开发应用程序:学生信息成绩管理系统1.0版本

    目录: 前言 一,需求分析 二,前期准备 三,编写代码 1.app.py 2.__init__.py 3.models.py 四,功能描述 1.界面展示 2.系统流程图介绍 3.功能介绍 系统优缺点 ...

  4. 如何启动MongoDB数据库 - 基础篇

    安装好了之后,我们如何启动MongoDB数据库? 找到默认的安装路径 安装完毕之后,我们找到默认的安装路径,截图如下: 启动的时候,需要初始化一个数据库文件.步骤如下: 安装者自行设定(新建文件夹,自 ...

  5. Redis基于内存非关系型数据库

    Redis基于内存非关系型数据库 Redis:非关系型数据库介绍 特点及优点 1.开源的,使用C编写,基于内存且支持持久化,一般内存的东东关机重启就消失,但它不会. 2.高性能的Key-Value的N ...

  6. 基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册

    项目地址:https://github.com/caochangkui/vue-element-responsive-demo/tree/login-register 通过 vue-cli3.0 + ...

  7. BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介、下载、案例应用之详细攻略

    BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介.下载.案例应用之详细攻略 目录 MongoDB的简介 1.MongoDB的主要功能特性 2.对MongoDB进行增删改查( ...

  8. cli3解决 ie11语法错误 vue_基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册...

    项目地址:https://github.com/caochangkui/vue-element-responsive-demo/tree/login-register 通过 vue-cli3.0 + ...

  9. MongoDB、ES、Redis、HBase四种数据库的简单区别

    MongoDB和Elasticsearch的对比 适用场景 两者其实在很多使用场景上有重合之处, 是可以互相替代, 比如日志收集 但是某些方面两者又各有特色,比如: 如果打算使用一个文档型的业务数据库 ...

最新文章

  1. 快速使用GitBook以及二级标题的设置
  2. 洛谷2055 [ZJOI2009]假期的宿舍
  3. Apache Camel 2.9发布–十大变化
  4. ubuntu Gitolite管理git server代码库权限
  5. 大咖齐聚!好好聊聊啥是AI大模型
  6. 从零开始学习编程,会很难学吗?新手想快速掌握应该怎么学?
  7. hal linux 手册_Linux服务之:haldaemon服务 | 旺旺知识库
  8. c语言保龄球计分程序,保龄球规则-保龄球比赛计分方法是怎样的? 爱问知识人...
  9. 抗扰度试验--EMS--电压暂降、短时中断--DIP
  10. 126邮箱登录(selenium+python)
  11. input框点击时去掉默认的外层边框
  12. selinux-001
  13. 2019年西工大计算机机试题(C语言)
  14. FoneDog iOS Toolkit(苹果数据恢复软件)官方正式版V2.1.62 | 苹果数据恢复大师下载 | 苹果数据恢复有免费的吗?
  15. VLDB 2023 | 北大河图发布分布式训练神器Galvatron,一键实现大模型高效自动并行...
  16. 用数万元购买个人网站域名是否值得?
  17. happyhbase
  18. java飞秋源码,feiQiu 实现飞秋系统,和qq 类似,能够 客户端和服务器端 Java Develop 259万源代码下载- www.pudn.com...
  19. Linux 01 Liunx系统介绍
  20. 【编程题】网易游戏社招编程题题解

热门文章

  1. 计算机技巧分享,2个鲜为人知的电脑技巧!
  2. windows mysql备份与恢复_windows下Mysql自动备份与恢复说明
  3. php _line_,php基本语法
  4. sql server 2014 判断一个列某个字段是否相同_Select * from user的千层套路——一个sql是如何执行的...
  5. 佳能80d有人脸识别吗_2020单反/微单相机推荐,单反和微单(无反)选购攻略,佳能、尼康、索尼、富士、松下相机...
  6. ip68能达到什么程度防水_电子主控电路板使用什么样的胶水可以达到防水效果?...
  7. 湖北二级计算机考试时间2015年,2015上半年湖北计算机等级考试时间
  8. Node对CommonJS模块的实现
  9. 计算机网络考试难吗,网络教育统考中的计算机考试难不难,
  10. 鸿蒙电视投屏软件,鸿蒙打造 未来电视就这样!荣耀智慧屏PRO深度评测