Redis是一个Key-Value存储系统,它支持存储的value类型不少,包括string、list(链表)、set(集合)、zset(有序集合)。这些数据类型都支持push/pop、add/remove以及取交集和并集等丰富的操做。Redis支持各类不一样方式的排序。数据库
为了保证效率,数据都是还存在内存中的,它也能够周期性地把更新的数据写入磁盘或者把修改操做写入追加的记录文件。缓存
Redis做为一种NoSQL解决方案,适用于如下场景:数据结构
1 对数据高并发读写并发
2 对海量数据的高效存储和访问app
3 对数据的高可扩展像性和高可用性。(知识链接:“高可用性”(High Availability)一般来描述一个系统通过专门的设计,从而减小停工时间,而保持其服务的高度可用性。)分布式
Redis是非关系型、分布式的、开源的、水平可扩展的。不遵循关系型数据库的 SQL标准、ACID属性、表结构等。高并发
这里温故而知新吧,所谓ACID属性指的是对事务的支持。spa
好比数据库里:.net
happyBKs 10000元设计
GF 1元
这时有个操做是happyBKs给GF汇款8000元的事务。
该事务包含了两个操做:
happyBKs 10000-8000
GF 1+8000
正常运行下,结果应该是:
happyBKs 2000元 T_T
GF 8001元 : )
可是,若是如今系统执行完第一个操做时发生了故障会怎么样呢?
若是数据库支持事务,即支持ACID,那么系统将回滚到最初状态:
happyBKs 10000元 : )
GF 1元 : (
若是数据库不支持事务,即不支持ACID,那么系统则会:
happyBKs 10000-8000=2000元 T_T
GF 1元 : (
(彩蛋:其实,happyBKs has no GF now,T_T. 本文时oschina用户happyBKs的博客文章,转载请说明出处。)
那么Redis适用哪些场景呢?
目前最大的Redis用户时新浪微博,有几百台物理机和更多的端口在运行着Redis。
Redis的适用场景:
1 应用程序直接访问Redis程序。(这种作法的缺点时若是Redis Server挂了,或者内存释放了,Redis的数据将永久丢失)
2 应用程序直接访问Redis,只有当Redis访问失败时才访问MySQL。(Redis集群会和MySQL集群进行同步。当Redis Server挂了以后,应用会去找MySQL)
Redis数据库提供多种灵活的数据结构和数据操做,十分灵活。
具体的适用场景或者说Redis真正适合作哪些事情:
1 取最新的N个数据的操做。例如,取最新的500篇新闻。
2 排行榜应用,取TOP N操做。
3 须要精确设定过时时间的应用。(这是MySQL没法作到的。Redis能够设置过时,如用setex方法,在个人博客该系列的后面的文章会介绍。你们清关注happyBKs的博客。)
4 计数器应用。(新浪微博大量使用)
5 Uniq操做(排重,惟一操做),获取某段时间全部的数据排重值。
6 实时系统,反垃圾系统
7 Pub/Sub构建实时消息系统。(pub是发布,sub是订阅)
8 构建队列系统。(注意:Redis的数据类型中有list,对应于栈、队列等)
9 缓存
本文出处:http://my.oschina.net/u/1156339/blog/387246
若是你仍是对Redis没有一个直观的感觉,那么下面我将对Redis、MySQL和MongoDB作一个比较。
Redis | MySQL | MongoDB |
有库的概念 | 有库的概念 | 有库的概念 |
无 | 有表的概念 | 无表,有集合的概念 |
无 | 字段,行的列 | 无 |
因此,NoSQL不存在表结构。