NoSQL初探之人人都爱Redis:(2)Redis API与常用数据类型简介
一、Redis API For .Net
首先,不得不说Redis官方提供了众多的API开发包,但是目前Redis官方版本不支持.Net直接进行连接,需要使用一些第三方的开源类库。目前最流行的就是ServiceStack.Redis这个开源项目,其在GitHub上的下载地址为:https://github.com/ServiceStack/ServiceStack.Redis
进入下载页面,点击“Download Zip”按钮,即可下载该API包。解压该Zip包后,其实我们所用到的只是其中的几个DLL而已,打开build/release/MonoDevelop文件夹,看到里边还有一个zip包,这里边就是我们所需的DLL了。
再次解压这个Zip包,可以看到其中包含如下图所示的DLL文件,这几个也是我们今天所要引入VS的DLL库,有了它们,我们就可以在程序端和Redis服务端进行对话了,是不是很赞?
这时,我们就可以在VS中新建一个控制台项目,命名为RedisDemo,然后新建一个Lib文件夹用来存放我们的DLL文件,然后添加对这些DLL引用。至此,就是万事俱备只欠东风了,我们接下来会在程序中调用Redis客户端和Redis服务端进行通信,了解Redis API为我们提供的丰富的数据类型。
二、Redis中常用数据类型
由上一篇博客可知,Redis目前提供五种数据类型:string(字符串)、list(链表)、Hash(哈希)、set(集合)及zset(sorted set) (有序集合)。现在,我们一一来看看这五种数据类型的基本使用方法。在开始介绍之前,我们先使用刚刚引入的Redis API建立一个Redis客户端对象,有了这个客户端对象,我们才能和Redis服务端进行通信,且看下面的一行代码。我们需要事先指定好Redis服务端的IP地址和端口号,然后根据这两个信息建立一个RedisClient的对象实例,通过这个实例所带的方法和服务端通信。
- using System;
- using System.Collections.Generic;
- using ServiceStack.Redis;
- namespace RedisDemo.FirstStart
- {
- class Program
- {
- //Redis服务器IP地址
- static string localHostIP = "127.0.0.1";
- //Redis服务端口号
- static int redisServicePort = ;
- static void Main(string[] args)
- {
- var redisClient = new RedisClient(localHostIP, redisServicePort);
- Console.ReadKey();
- }
- }
- }
2.1 String 字符串
String是最常用的一种数据类型,普通的key/value存储都可以归为此类 。一个Key对应一个Value,string类型是二进制安全的。Redis的string可以包含任何数据,比如jpg图片(生成二进制)或者序列化的对象。
在Redis中的基本操作如下所示:
- static void StringTypeDemo(RedisClient redisClient)
- {
- //向Redis中添加一个Key/Value对
- redisClient.Set<string>("username", "edisonchou");
- //从Redis中读取一个Value值
- string userName = redisClient.Get<string>("username");
- Console.WriteLine("The value from Redis is {0}", userName);
- }
运行效果如下:
2.2 Hash 哈希
- static void HashTypeDemo(RedisClient redisClient)
- {
- redisClient.SetEntryInHash("user", "userinfo", "cool boy");
- redisClient.SetEntryInHash("user", "useraccount", "");
- List<string> keyList = redisClient.GetHashKeys("user");
- foreach (string key in keyList)
- {
- Console.WriteLine(key);
- string value = redisClient.GetValueFromHash("user", key);
- Console.WriteLine("user:{0}:{1}", key, value);
- }
- }

2.3 List 链表
Lst是一个链表结构,主要功能是push与pop,获取一个范围的所有的值等,操作中key理解为链表名字。 Redis的List类型其实就是一个每个子元素都是string类型的双向链表,我们可以通过push或pop操作从链表的头部或者尾部添加删除元素,这样List既可以作为栈,又可以作为队列。它即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
(1)现在我们首先来看看List作为(Stack)栈类型的使用:
那么在VS中如何来Code呢?通过Push与Pop操作Stack
- static void StackTypeDemo(RedisClient redisClient)
- {
- redisClient.PushItemToList("userenname", "edisonchou");
- redisClient.PushItemToList("userenname", "wncudchou");
- redisClient.PushItemToList("userenname", "milkye");
- redisClient.PushItemToList("userenname", "dickgu");
- int length = redisClient.GetListCount("userenname");
- for (int i = ; i < length; i++)
- {
- Console.WriteLine(redisClient.PopItemFromList("userenname"));
- }
- }
运行效果如下:
(2)下面我们来看看List作为(Queue)队列的使用:
那么在VS中如何Code呢?通过DeQueue和EnQueue操作Queue
- static void QueueTypeDemo(RedisClient redisClient)
- {
- redisClient.EnqueueItemOnList("account", "马云");
- redisClient.EnqueueItemOnList("account", "马化腾");
- redisClient.EnqueueItemOnList("account", "李彦宏");
- int length = redisClient.GetListCount("account");
- for (int i = ; i < length; i++)
- {
- Console.WriteLine(redisClient.DequeueItemFromList("account"));
- }
- }
运行效果如下:
2.4 Set 集合
Set是string类型的无序集合。set是通过hash table实现的,添加,删除和查找,对集合我们可以取并集,交集,差集,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
与List比较而言,set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
那么在VS中我们使用Set来Code一下,先增加两个Set集合,然后对其进行交集、并集与差集运算:
- static void SetTypeDemo(RedisClient redisClient)
- {
- redisClient.AddItemToSet("a3", "ddd");
- redisClient.AddItemToSet("a3", "ccc");
- redisClient.AddItemToSet("a3", "tttt");
- redisClient.AddItemToSet("a3", "sssh");
- redisClient.AddItemToSet("a3", "hhhh");
- redisClient.AddItemToSet("a4", "hhhh");
- redisClient.AddItemToSet("a4", "h777");
- Console.WriteLine("-------------求a3集合------------");
- HashSet<string> hashSet = redisClient.GetAllItemsFromSet("a3");
- foreach (string value in hashSet)
- {
- Console.WriteLine(value);
- }
- Console.WriteLine("-------------求并集------------");
- hashSet.Clear();
- hashSet = redisClient.GetUnionFromSets(new string[] { "a3", "a4" });
- foreach (string value in hashSet)
- {
- Console.WriteLine(value);
- }
- Console.WriteLine("-------------求交集------------");
- hashSet.Clear();
- hashSet = redisClient.GetIntersectFromSets(new string[] { "a3", "a4" });
- foreach (string value in hashSet)
- {
- Console.WriteLine(value);
- }
- Console.WriteLine("-------------求差集------------");
- hashSet.Clear();
- hashSet = redisClient.GetDifferencesFromSet("a3", new string[] { "a4" });
- foreach (string value in hashSet)
- {
- Console.WriteLine(value);
- }
- }
运行效果如下:
2.5 Sorted Set 有序集合
- static void SortedSetTypeDemo(RedisClient redisClient)
- {
- redisClient.AddItemToSortedSet("a5", "ffff");
- redisClient.AddItemToSortedSet("a5", "bbbb");
- redisClient.AddItemToSortedSet("a5", "gggg");
- redisClient.AddItemToSortedSet("a5", "cccc");
- redisClient.AddItemToSortedSet("a5", "waaa");
- List<string> list = redisClient.GetAllItemsFromSortedSet("a5");
- foreach (string str in list)
- {
- Console.WriteLine(str);
- }
- }
运行效果如下:
三、小结
Redis为我们提供了相比Memcached更为丰富多样的数据类型,使得Redis可以用在多种多样的应用场合,这也说明了为什么Redis在国内外各大互联网名企中这么受欢迎的原因。本篇简单地介绍和使用了各种数据类型,下一篇,我们会针对1-2个具体应用场景来使用这些数据类型进行具体案例的Code。最后,还是谢谢参考资料的原作者,站在你们的肩膀上,我们才能看的更远!
参考文献
(1)传智播客公开课,王承伟主讲,http://bbs.itcast.cn/thread-26525-1-1.html
(2)群叔,《Redis数据类型详解及Redis适用场景》,http://www.cnblogs.com/qunshu/p/3196972.html
附件下载
(1)ServiceStack.Redis:http://pan.baidu.com/s/1sjtxe5v
NoSQL初探之人人都爱Redis:(2)Redis API与常用数据类型简介的更多相关文章
- NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装
一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经 ...
- 【转】NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装
一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经 ...
- NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索
一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...
- 【转】 NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索
一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...
- 【转】NoSQL初探之人人都爱Redis:(2)Redis API与常用数据类型简介
一.Redis API For .Net 首先,不得不说Redis官方提供了众多的API开发包,但是目前Redis官方版本不支持.Net直接进行连接,需要使用一些第三方的开源类库.目前最流行的就是Se ...
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...
- 【转】NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...
- Redis API与常用数据类型简介
Redis API与常用数据类型简介 一.Redis API For .Net 首先,不得不说Redis官方提供了众多的API开发包,但是目前Redis官方版本不支持.Net直接进行连接,需要使用一些 ...
- Redis:基础知识及其常用数据类型和关键字
Redis: Redis是什么: REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key-Value)分布式内存数 ...
随机推荐
- (转) JAVA中如何设置图片(图标)自适应Jlable等组件的大小
一.问题: 一个程序,组件上设置某个图片作为图标,因为的label(应该说是组件)已经设定了固定大小, 所以再打开一些大图片时,超过组件大小的部分没显示出来,而小图片又没填充完整个组件 二.解决这个问 ...
- shell命令大全
请跳转至:http://www.lampweb.org/linux/2/3.html
- Tween Animation---Scale渐变尺寸缩放动画
博主都是自己把代码测试过了才给大家分享的 在res/创建一个anim文件夹用来保存动画属性的xml 新建一个scale.xml <?xml version="1.0" enc ...
- NetBeans连接SQL server数据库教程
不废话,直接开始 1.下载sqljdbc.jar 可以从微软中国官方网站下载 SQLJDBC微软中国 笔者提供一个网盘链接Sqljdbc.jar 4个压缩包视版本选择,SQL 2012 用sqljdb ...
- QT5之三大重要窗体
当创建项目时,会发现编辑器提供三个基类,分别为:QMainWindow.QWidget.QDialog,三个基类的区别说明如下.1.QMainWindowQMainWindow类提供一个有菜单条.锚接 ...
- 四则运算app代码上传GITHUB
团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...
- bzoj1503郁闷的出(cheng)纳(xu)员
好痛苦,,,WA了不知道多少遍 错的服了,,, 如果某员工的初始工资低于工资下界,他将立刻离开公司 我也不知道是我语文有问题还是题目有毒,反正这个东西好像不应该算在离开公司的总人数的答案里... 让我 ...
- linux下的tcp连接超时
最近需要写一个linux下的通信程序, 通信模块用的是Qt的QTcpSocket. 最后程序需要增加一个断网检测, 在windows下调试没问题, 拔网线, 断网口都能马上检测到, 但到了部署到lin ...
- linu for循环
用途说明 在shell中用于循环.类似于其他编程语言中的for,但又有些不同.for循环是Bash中最常用的语法结构. 常用格式 格式一 for 变量 do 语句 done 格式二 for 变量 in ...
- sublime_text_2 ubuntu下无法输入中文 解决方法
参考资料:http://my.oschina.net/wugaoxing/blog/121281 环境配置:ubuntu 14.10 1.保存下述代码为 sublime_imfix.c 文件 /* s ...