NoSQL
随着WEB2.0的兴起,任何新闻、视频、朋友圈都不再是一个个孤立的推送行为,大量的互动行为往往会喧宾夺主的成为主角,相当一部分吃瓜群众再也不是去关注新闻本身,而是“来看评论的”,捎带脚也常常会推波助澜的“火钳刘明”一把。面对这样超大规模和高并发的SNS类型业务需求,传统的关系型数据就玩儿不转了。为了解决大规模数据集合多重数据种类带来的挑战,尤其是海量数据应用,以及高可扩展性及高可用性难题,非关系型数据库NotOnly SQL(读作N-O SQL,不是NO SQL)责无旁贷的走向了历史前台。
如此多的NoSQL DB基本可以分为以下四种大类型。
分类 |
Examples举例 |
典型应用场景 |
键值对存储 |
Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB |
内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等 |
列存储 |
Cassandra, HBase, Riak |
分布式的文件系统 |
文档型数据库 |
CouchDB, MongoDb |
Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) |
图形数据库 |
Neo4J, InfoGrid, Infinite Graph |
社交网络,推荐系统等。专注于构建关系图谱 |
不过笔者依然坚持认为缓存(例如Redis,GemFire,Corfu)跟DB还是有区别的,尽管如今的缓存也具有了持久化的功能。当然,这只是定义或概念,完全不会影响我们对其进行的研究。
Redis简介
Redis是一个开源的项目,可基于内存亦可持久化的日志型、Key-Value数据库。目前其开发工作由Pivotal赞助,之前是VMware。和memcached类似,它支持存储的value类型包括字符串、散列、列表、集合、有序集合。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。其主要业务应用场景包括:
· 缓存
· 任务队列
· 应用排行榜
· 网站访问统计
· 数据过期处理
· 分布式集群架构中的session分离
安装并用命令行操作Redis
首先从redis.io/download中下载最新的redistar包,解压后进入目录中执行make完成安装。启动redisserver
./bin/redis-server./redis-conf
启动redis client
./bin/redis-cli
set test 中文测试
get test
“\xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95”
哦?这应该是国际化支持有缺陷了吧?heh 还真不是,exit cli之后再次启动。
./bin/redis-cli –raw
再次get test,中文测试映入眼帘。
Redis还有其他数据类型如list,hashmap,set,sorted-set,但对于国际化来说操作同理。而实际项目中,直接用cli对redis进行操作的场景少之又少,更常见的则是用程序例如Jedis之类的客户端进行调用。下篇文章我会和大家一起再对该场景中可能出现的国际化问题进一步研究。