redis nosql介绍

本文总阅读量:

NoSQL简介

​ 介绍redis前,我想还是先认识下NoSQL,即not only sql, 是一种非关系型的数据存储,key/value键值对存储。现有Nosql DB 产品: Redis/MongoDB/Memcached/Hbase/Cassandra/ Tokyo Cabinet/Voldemort/Dynomite/Riak/ CouchDB/Hypertable/Flare/Tin/Lightcloud/ KiokuDB/Scalaris/Kai/ThruDB, 等等~~~

为什么需要NoSQL非关系型数据库?

  • High performance - 对数据库高并发读写的需求
  • Huge Storage - 对海量数据的高效率存储和访问的需求
  • High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求

Redis简介

  已经有了Membercache和各种数据库,Redis为什么会产生?Redis纯粹为应用而产生,它是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,解决了断电后数据完全丢失的情况;在部分场合可以对关系数据库起到很好的补充作用。性能测试结果表示SET操作每秒钟可达110000次,GET操作每秒81000次(当然不同的服务器配置性能不同)。

  Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。 这些数据类型支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,支持各种不同方式的排序。redis 与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改 操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

redis目前提供四种数据类型:string,list,set及zset(sorted set)。

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

  1. save seconds updates :指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。
  2. appendonly yes/no :是否在每次更新操作后进行日志记录。如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据 文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
  3. appendfsync no/always/everysec :数据缓存同步至磁盘的方式。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。

一:快速搭建

​ 好了,我们知道redis比较适合做的事情了,现在我们可以进行快速搭建。

第一步:下载redis-2.0.2.zip (32 bit)。然后改名为redis放在D盘中。

img

最重要的也就是下面两个:

redis-server.exe: 这个就是redis的服务端程序。

redis-cli.exe: 服务端开启后,我们的客户端就可以输入各种命令测试了。

img

从图中我们可以看到两点:

①:没有指定config file。

​ 原来redis建议我们做一个配置文件,那我就搞段配置。

img

daemonize: 是否以“守护进程”的方式开启,当是守护进程的时候就不受控制台的影响了。

logfile: log文件位置。

database: 开启数据库的个数。

dbfilename: 数据快照文件名。

save : 保存快照的频率,第一个为时间,第二个为写操作。

将这些配置好后,我们再看看:

img

②:我们看到redis默认的开放端口为6379。

二:安装驱动

好了,redis已经搭建完毕了,现在我们就要用C#去操作redis,这也是我最渴望的功能,优先队列~,先下载C#驱动

就可以看到如下3个dll。

img

最后我们做下小测试:

复制代码;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 1     class Program
2 {
3 static void Main(string[] args)
4 {
5 var client = new RedisClient("127.0.0.1", 6379);
6
7 //最后一个参数为我们排序的依据
8 var s = client.AddItemToSortedSet("12", "百度", 400);
9
10 client.AddItemToSortedSet("12", "谷歌", 300);
11 client.AddItemToSortedSet("12", "阿里", 200);
12 client.AddItemToSortedSet("12", "新浪", 100);
13 client.AddItemToSortedSet("12", "人人", 500);
14
15 //升序获取最一个值:"新浪"
16 var list = client.GetRangeFromSortedSet("12", 0, 0);
17
18 foreach (var item in list)
19 {
20 Console.WriteLine(item);
21 }
22
23 //降序获取最一个值:"人人"
24 list = client.GetRangeFromSortedSetDesc("12", 0, 0);
25
26 foreach (var item in list)
27 {
28 Console.WriteLine(item);
29 }
30
31 Console.Read();
32 }
33 }

复制代码;)

AddItemToSortedSet: 第三个参数也就是我们要排序的依据,这也非常适合我们做topK的问题,非常爽~

img

Redis和Memcached比较

(1) 如果存储的数据不是很大的情况下,两者几乎没太大区别。性能都非常高。如果存储的数据非常大情况下,那么memcached性能高点,因为mm是多线程的。redis是单线程。

(2)断电Redis可以通过日志恢复数据,或者是通过本身自带的数据文件恢复数据。

(3)memcached是通过客户端驱动实现了集群的配置的。而Redis是通过服务器端配置实现集群的。而且Redis有主从的复制功能(同步数据。)

(4)mm数据没有类型。redis:包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。高级的数据结构。可以把集合做成队列,栈等高级数据结构。

(5)redis 与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改 操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。