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文件三部分,配置文件中有三个参数对其进行配置。
- save seconds updates :指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。
- appendonly yes/no :是否在每次更新操作后进行日志记录。如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据 文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
- appendfsync no/always/everysec :数据缓存同步至磁盘的方式。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。
一:快速搭建
好了,我们知道redis比较适合做的事情了,现在我们可以进行快速搭建。
第一步:下载redis-2.0.2.zip (32 bit)。然后改名为redis放在D盘中。
最重要的也就是下面两个:
redis-server.exe: 这个就是redis的服务端程序。
redis-cli.exe: 服务端开启后,我们的客户端就可以输入各种命令测试了。
从图中我们可以看到两点:
①:没有指定config file。
原来redis建议我们做一个配置文件,那我就搞段配置。
daemonize: 是否以“守护进程”的方式开启,当是守护进程的时候就不受控制台的影响了。
logfile: log文件位置。
database: 开启数据库的个数。
dbfilename: 数据快照文件名。
save : 保存快照的频率,第一个为时间,第二个为写操作。
将这些配置好后,我们再看看:
②:我们看到redis默认的开放端口为6379。
二:安装驱动
好了,redis已经搭建完毕了,现在我们就要用C#去操作redis,这也是我最渴望的功能,优先队列~,先下载C#驱动,
就可以看到如下3个dll。
最后我们做下小测试:
1 | 1 class Program |
AddItemToSortedSet: 第三个参数也就是我们要排序的依据,这也非常适合我们做topK的问题,非常爽~
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(主从)同步。