Redis 入门
Redis 诞生历程
从一个故事开始
08年的时候有一个意大利西西里岛的小伙子,笔名antirez(http://invece.org/),创建
了一个访客信息网站LLOOGG.COM。有的时候我们需要知道网站的访问情况,比如访
客的IP、操作系统、浏览器、使用的搜索关键词、所在地区、访问的网页地址等等。在
国内,有很多网站提供了这个功能,比如 CNZZ,百度统计,国外也有谷歌的 Google
Analytics。我们不用自己写代码去实现这个功能,只需要在全局的footer里面嵌入一段
JS 代码就行了,当页面被访问的时候,就会自动把访客的信息发送到这些网站统计的服
务器,然后我们登录后台就可以查看数据了。
LLOOGG.COM提供的就是这种功能,它可以查看最多10000条的最新浏览记录。这样的话,它需要为每一个网站创建一个列表(List),不同网站的访问记录进入到不同的列表。如果列表的长度超过了用户指定的长度,它需要把最早的记录删除(先进先出) 。
当LLOOGG.COM的用户越来越多的时候,它需要维护的列表数量也越来越多,这
种记录最新的请求和删除最早的请求的操作也越来越多。LLOOGG.COM最初使用的数
据库是MySQL,可想而知,因为每一次记录和删除都要读写磁盘,因为数据量和并发量
太大,在这种情况下无论怎么去优化数据库都不管用了。
考虑到最终限制数据库性能的瓶颈在于磁盘,所以antirez打算放弃磁盘,自己去实
现一个具有列表结构的数据库的原型,把数据放在内存而不是磁盘,这样可以大大地提
升列表的push和pop的效率。antirez发现这种思路确实能解决这个问题,所以用C语
言重写了这个内存数据库,并且加上了持久化的功能,09年,Redis横空出世了。从最
开始只支持列表的数据库,到现在支持多种数据类型,并且提供了一系列的高级特性,
Redis已经成为一个在全世界被广泛使用的开源项目。
为什么叫REDIS 呢?它的全称是REmote DIctionary Service,直接翻译过来是远
程字典服务。
从Redis的诞生历史我们看到了,在某些场景中,关系型数据库并不适合用来存储
我们的Web应用的数据。 那么,关系型数据库和非关系型数据库, 或者说SQL和NoSQL,
到底有什么不一样呢?
Redis 定位与特性
SQL 与 NoSQL
在绝大部分时候,我们都会首先考虑用关系型数据库来存储我们的数据,比如
SQLServer,Oracle,MySQL等等。
关系型数据库的特点:
1、它以表格的形式,基于行存储数据,是一个二维的模式。
2、它存储的是结构化的数据,数据存储有固定的模式(schema),数据需要适应
表结构。
3、表与表之间存在关联(Relationship)。
4、大部分关系型数据库都支持SQL(结构化查询语言)的操作,支持复杂的关联查
询。
5、通过支持事务(ACID酸)来提供严格或者实时的数据一致性。
但是使用关系型数据库也存在一些限制,比如:
1、要实现扩容的话,只能向上(垂直)扩展,比如磁盘限制了数据的存储,就要扩
大磁盘容量,通过堆硬件的方式,不支持动态的扩缩容。水平扩容需要复杂的技术来实
现,比如分库分表。
2、表结构修改困难,因此存储的数据格式也受到限制。
3、在高并发和高数据量的情况下,我们的关系型数据库通常会把数据持久化到磁盘,
基于磁盘的读写压力比较大。
为了规避关系型数据库的一系列问题,我们就有了非关系型的数据库,我们一般把
它叫做“non-relational”或者“Not Only SQL”。NoSQL最开始是不提供 SQL的数
据库的意思,但是后来意思慢慢地发生了变化。
非关系型数据库的特点:
1、存储非结构化的数据,比如文本、图片、音频、视频。
2、表与表之间没有关联,可扩展性强。
3、保证数据的最终一致性。遵循BASE(碱)理论。 BasicallyAvailable(基本
可用); Soft-state(软状态); Eventually Consistent(最终一致性)。
4、支持海量数据的存储和高并发的高效读写。
5、支持分布式,能够对数据进行分片存储,扩缩容简单。
对于不同的存储类型,我们又有各种各样的非关系型数据库,比如有几种常见的类
型:
1、KV 存储,用 Key Value 的形式来存储数据。比较常见的有 Redis 和
MemcacheDB。
2、文档存储,MongoDB。
3、列存储,HBase。
4、图存储,这个图(Graph)是数据结构,不是文件格式。Neo4j。
5、对象存储。
6、XML存储等等等等。
这个网页列举了各种各样的NoSQL数据库 http://nosql-database.org/ 。
Redis 特性
官网介绍:https://redis.io/topics/introduction
中文网站:http://www.redis.cn
硬件层面有CPU的缓存;浏览器也有缓存;手机的应用也有缓存。我们把数据缓存
起来的原因就是从原始位置取数据的代价太大了,放在一个临时位置存储起来,取回就
可以快一些。
Redis的特性:
1)更丰富的数据类型
2)进程内与跨进程;单机与分布式
3)功能丰富:持久化机制、过期策略
4)支持多种编程语言
5)高可用,集群
Redis 安装启动
Linux安装
参考:
CentOS7 安装 Redis 单实例 https://gper.club/articles/7e7e7f7ff7g5egc4g6b
Docker 安装 RabbitMQ 集群 https://gper.club/articles/7e7e7f7ff7g5egc5g6c
主要是注意配置文件几处关键内容(后台启动、绑定 IP、密码)的修改,配置别名
Windows服务端安装
微软自行编写了一个Redis服务端,可用于基本的测试和学习。
https://github.com/MicrosoftArchive/redis/tags
服务启动
src目录下,直接启动
./redis-server
后台启动(指定配置文件)
- redis.conf修改两行配置
daemonize yes 这里改成yes,后台启动
bind 0.0.0.0 改成本机的ip ,127.0.0.1
- redis.conf修改两行配置
redis-server/usr/local/soft/redis-5.0.5/redis.conf
总结:redis的参数可以通过三种方式配置,一种是redis.conf,一种是启动时–携
带的参数,一种是config set。
基本操作
默认有16个库(0-15),可以在配置文件中修改,默认使用第一个db0。
databases 16
因为没有完全隔离,不像数据库的database,不适合把不同的库分配给不同的业务使用。
切换数据库
select 0
清空当前数据库
flushdb
清空所有数据库
flushall
Redis是字典结构的存储方式,采用key-value存储。key和value的最大长度限制
是512M(来自官网 https://redis.io/topics/data-types-intro/)。
键的基本操作。
<