目录
Redis概述
什么是NoSQL
为什么需要NoSQL
主流NoSQL产品
NoSQL数据的四大分类:
键值(Key-Value)存储数据库
列存储数据库
文档型数据库
图形(Graph)数据库
NoSQL特点
Redis由来
什么是Redis
redis应用场景
Redis安装和使用
redis安装
Redis启动和停止
前端模式启动
后端启动
redis后端启动后停止
redis使用
官方网站:https://redis.io/
中文网站:http://redis.cn/ http://redisdoc.com/
NoSQL(Not Only SQL),意即“不仅仅是”SQL”,是一项全新的数据理念,泛指非关系型的数据库。
随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:
High performance – 对数据库高并发读写的需求。web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系型数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS查询网站,往往也存在对高并发写请求的需求,例如网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求。
Huge Storage – 对海量数据的高效率存储和访问的需求。类似Facebook、Twitter、Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条的记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的账号,关系数据库也很难应付。
High Scalability and High Availability – 对数据库的高扩展性和高可用性的需求。在基于web的架构中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日剧增的时候,你的数据库却没有办法像web setver和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据不能通过不断的添加服务器节点来实现扩展呢?
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题。
键值对NoSQL是比较流行的一种NoSQL的解决方案,特点就是采用键值对来存储数据,它的优势在于容易部署和简单性,但是如果查询的部分只是整个数据库的小部分,那性能并不是特别突出。
相关产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用:内容缓存,主要用于处理大量数据的高访问负载
数据模型:一系列键值对
优势:快速查询
劣势:存储的数据缺少结构化
列存储NoSQL比较适合的场景是处理海量的分布式存储的数据,它的主键可能是指向多个列的,数据量增加的时候几乎不影响性能。
相关产品:Cassandra, HBase,Riak
典型应用:分布式的文件系统
数据类型:以列簇式存储,将统一列数据存在一起
优势:查找速度快,可扩展型强,更容易进行分布式扩展
劣势:功能相对局限
文档数据库是采用类似键值对的方式进行存储,更准确的说是采用的JSON的格式进行存储,可以嵌套键值对,文档数据库比键值对数据库的效率更高
相关产品:CouchDB、MongoDB
典型应用:web应用(与key-value类似,value是结构化的)
数据模型:一系列键值对
优势:数据结构要求不严格
劣势:查询性能不高,而且缺乏统一的查询语法
图形数据库是以灵活的图形结构去存储数据,这样极大的避免了传统的SQL数据库需要首先定义模式才能存储数据的局限性。
相关产品:Neo4j、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法
劣势:需要对整个图做计算才能得到结果,不容易做分布式的集群方案。
在大数据存取上具备关系型数据库无法比拟的性能优势,例如:
易扩展
NoSQL数据库种类繁多,但是一个共同特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构层面带了可扩展能力
大数据量,高性能
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系,数据库的结构简单。
灵活的数据类型
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系型数据库里,增加一个字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在数据量的web2.0时代尤其明显。
高可用
NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过赋值模型也能实现高可用。
2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统 LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo 便对MySQL 的性能感到失望,于是他决定亲自为 LLOOGG 量身定做一个数据库,并并于 2009 年开发完成,这个数据库就是Redis。不过Salvatore Sanfilippo并不满足只将 Redis 用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年 Salvatore Sanfilippo 将 Redis 开源发布,并开始和 Redis 的另一名主要的代码贡献者 Pieter Noordhuis 一起继续着 Redis 的开发,直到今天。
Salvatore Sanfilippo 自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News 在 2012 年发布了一份数据库的使用情况调查,结果显示有近 12% 的公司在使用 Redis。国内如 新浪微博、街旁网、知乎网,国外如GitHub、Stack Overflow、Flickr等都是Redis的用户。
VMware 公司从2010年开始赞助 Redis 的开发,Salvatore Sanfilippo和 Pieter Noordhuis 也分别在3月和5月加入VMware,全职开发Redis。
Redis (remote dictionary server)是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止 Redis 支持的键值数据类型如下:
字符串类型、散列类型、列表类型、集合类型、有序集合类型。
官方提供测试数据:50 个并发执行 100000 个请求,读的速度是 110000 次/s,写的速度是 81000 次/s。数据仅供参考,根据服务器配置会有不同结果。
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
分布式集群架构中的session分离。
redis是C语言开发,安装redis需要将官网下载的源码进行编译,编译依赖gcc-c++环境。如果没有需要安装gcc
yum install gcc-c++(centos),suse使用(zypper进行安装)
secureCRT命令客户端
alt+p打开上传窗口,拖入文件
解压文件 tar -zxvf redis-3.2.12.tar.gz
编译
[root@common ~]# cd redis-3.2.12/
[root@common ~]# make
安装:
[root@common ~]# make PREFIX=/usr/local/redis install
指定安装目录 PREFIX=/usr/local/redis
安装成功后 /usr/local/redis/bin的可执行文件
redis-benchmark --性能测试工具
redis-check-aof --AOF文件修复工具
redis-check-rdb --rdb文件检查工具(快照持久化文件)
redis-cli --命令行客户端
redis-server --redis服务器启动命令
从源码中复制redis.conf配置文件,可以修改端口号等信息。redis启动使用
cp redis.conf /usr/local/redis
直接运行bin/redis-server将以前端模式启动,前端启动模式确定是启动完成后,不能再进行其他操作,如果要操作必须使用ctrl+c,同时redis-server程序结束,不推荐
redis.conf 里的daemonize no 改为yes
启动时指定配置文件./redis-server ./redis.conf
redis默认端口port:6379
查看ps -ef | grep -i redis
强制结束程序。强制终止redis进程可能会导致redis持久化数据丢失。
kill -9 pid # ps -ef | grep -i redis查询
正常关闭
./bin/redis-cli shutdown # 默认是6379端口
./bin/redis-cli -h 192.168.11.131 -p 7001 shutdown #指定ip和端口
./bin/redis-cli #默认本机6379
./bin/redis-cli -h 192.168.11.131 -p 7001 #指定ip和端口连接
[root@common ~]# cd /usr/local/redis/bin
[root@common ~]# ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set hehe nimei
OK
127.0.0.1:6379> get hehe
"nimei"
127.0.0.1:6379> keys *
1) "hehe"
127.0.0.1:6379> del hehe
(integer) 1
127.0.0.1:6379> keys * # 查看当前数据中所有的key值
(empty list or set)
127.0.0.1:6379> quit # 退出客户端
注:持续更新中,部分资源参考自网络,整理上文,侵删。by the way, 此文贴于此便于查看