一:redis介绍
当程序遇到海量用户,出现高并发时,关系型数据库会遇到两个瓶颈:
- 性能瓶颈:磁盘IO性能低下
- 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群
瓶颈的解决思路如下:
- 降低磁盘IO次数,越低越好 ———— 即使用内存存储
- 去除数据间的关系,越简单越好 ———— 即不存储关系,仅存储数据
以上两点解决方案便催生了一种新的数据库类型:Nosql(not only sql),即非关系型数据库。nosql可以作为关系型数据库的补充。作用是应对基于海量用户和海量数据前提下的数据处理问题。
特征:
- 可扩容,可伸缩
- 大数据量下高性能
- 灵活的数据模型
- 高可用
常见 Nosql 数据库:
- Redis
- memcache
- HBase
- MongoDB
数据库主要通过数据的保存格式进行分类,现阶段主要分为以下几种类型:
- 层次数据库(Hierarchical Database,HDB):层次数据库是最早研制成功的数据库系统,它把数据通过层次结构(树形结构)的方式表现出来。层次数据库曾经是数据库的主流,但随着关系数据库的出现和普及,现在已经很少使用了。比较具有代表性的层次数据库是 IMS(Information Management System)数据库,由 IBM 公司研制成功。
- 关系型数据库(Relational Database,RDB):关系型数据库是现在应用最广泛的数据库。关系型数据库在 1969 年诞生,可谓历史悠久。和 Excel 工作表一样,关系型数据库也采用由行和列组成的二维表来管理数据,所以简单易懂。同时,它还使用 SQL(Structured Query Language,结构化查询语言)对数据进行操作。传统的关系型数据库采用表格的存储方式,数据以行和列的方式进行存储,要读取和查询都十分方便。 比较具有代表性的关系型数据库有 Oracle Database、SQL Server、DB2、PostgreSQL 和MySQL。
- 面向文档(Document-Oriented)数据库:文档型数据库的灵感来自于 Lotus Notes 办公软件,和最后一种键值存储数据库类似。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。面向文档数据库会将数据以文档的形式存储。每个文档都是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。具有代表性的面向文档数据库有 MongDB 和 CouchDB。
- 列存储(Column-oriented)数据库:列存储数据库将数据存储存在列族(column family)中,一个列族用来存储经常被一起查询的相关数据。例如,如果有一个 Person 类,我们经常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。列存储数据库通常用来应对分布式存储的海量数据。具有代表性的列存储数据库有 Cassandra 和 HBase。
- XML 数据库(XML Database,XMLDB):XML 数据库是一种支持对 XML(标准通用标记语言下的一个应用)格式文档进行存储和查询等操作的数据管理系统。在系统中,开发人员可以对数据库中的 XML 文档进行查询、导出和指定格式的序列化。
- 键值存储数据库(Key-Value Store,KVS):键值存储数据库是用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。具有编程语言知识的读者可以把它想象成关联数组或者散列(hash)。近年来,随着键值存储数据库被应用到 Google 等需要对大量数据进行超高速查询的 Web 服务当中,它正逐渐为人们所关注。具有代表性的键值存储数据库有 Redis、Memcached 和 MemcachedDB。
下图是大型项目的一种解决方案:
Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
- 数据间没有必然的关联关系
- 内部采用单线程机制进行工作
- 高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
- 多数据类型支持
- 字符串类型 string
- 列表类型 list
- 散列类型 hash
- 集合类型 set
- 有序集合类型 sorted_set
- 持久化支持。可以进行数据灾难恢复
redis的应用:
- 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
- 任务队列,如秒杀、抢购、购票排队等
- 即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等
- 时效性信息控制,如验证码控制、投票控制等
- 分布式数据共享,如分布式集群架构中的 session 分离
- 消息队列
- 分布式锁
二:redis的下载与启动
这里介绍的是在 windows 上安装 Redis。Redis 官方不建议在 windows 下使用 Redis,所以官网没有 windows 版本可以下载。但是微软团队维护了开源的 windows 版本,虽然只有 3.2 版本,对于普通测试使用足够了。下载链接:windows版Redis下载。下载后解压即可使用,无需安装,但我们还需要进行配置。
解压后的目录:
其中redis-server.exe
为启动redis服务的可执行文件,redis-cli.exe
是redis客户端, redis-check-aof.exe
是做持久化用的,redis-benchmark.exe
是用来做性能测试的。
双击redis-server.exe即可运行redis,其中的Port是redis开启的端口号,PID是redis实例的ID,开启多个redis服务时用以区分。
然后我们开启客户端,即双击redis-cli.exe:
我们还可以配置 Redis 为 windows 下的服务,只要cmd进入解压后的目录,输入:
redis-server --service-install redis.windows.conf
就可以了,右击我的电脑 → 管理 → 服务和应用程序 → 服务:
默认是自动,即开机自启,但一般都是设置为手动启动,原因如下,大佬博客:去吧猫头夜鹰
如果有兴趣了解更多相关知识,可以来我的个人网站看看:eyes++的个人空间