什么是Redis
(REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库(NOSQL)。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
NOSQL与关系型数据库区别
关系型数据库
优点:以完善的关系代数理论为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询。
缺点:可扩展性差,无法较好地支持海量数据存储,数据模型过于死板,事务机制影响了系统的整体性能,全文搜索功能较弱。
NoSQL数据库
优点:数据之间无关系,易扩展。有非常高的读写性能,支持大量数据,性能高。
有灵活的数据模型,无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
缺点:复杂查询性能不高,一般都不能实现事务的强一致性。
Redis能干什么
-
缓存,毫无疑问这是Redis当今最为人熟知的使用场景。再提升服务器性能方面非常有效;
-
排行榜,如果使用传统的关系型数据库来做这个事儿,非常的麻烦,而利用Redis的SortSet数据结构能够非常方便搞定;
-
计算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;注:限速器也是对请求限流的一种实现方式。
-
好友关系,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好友、共同爱好之类的功能;
-
简单消息队列,除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦;
-
Session共享,默认Session是保存在服务器的文件中,即当前服务器,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用Redis保存Session后,无论用户落在那台机器上都能够获取到对应的Session信息。
Redis的其他同伴
除了Redis之外还有许多非关系型数据库(NOSQL)诸如:MongoDB、Memached、等等。(此处不列举Redis和Memached的区别只介绍与MongoDB的优缺点)。
内存管理
Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
MongoDB 数据会优先存于内存,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
需要注意的是Redis 和mongoDB特别消耗内存,一般不建议将它们和别的服务部署在同一台服务器上。
数据结构
Redis 支持的数据结构丰富,包括hash、set、list等。
MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
数据量和性能
当物理内存够用的时候,性能,redis>mongodb
数据量,mongodb>redis
注意mongodb可以存储文件,适合存放大量的小文件,内置了GirdFS 的分布式文件系统。
可靠性
mongodb从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性;
Redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能。
可靠性上MongoDB优于Redis。
Windows如何安装Redis
Redis官网直达
在Redis官网是只提供Linux版本的Redis不提供windows版本的,所以我们可以去GitHub下载windows版本的Redis
下载地址:https://github.com/tporadowski/redis/releases。
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。
打开文件夹内容如下:
这里注意:要先运行redis-server.exe然后再执行redis-cli.exe,前者是启动redis服务,后者则是监听Redis的启动端口6379,然后来操作redis。
备注:Linux安装Redis请看笔者的另一篇博客 => Linux安装Redis