Redis简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

1.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

3.Redis支持数据的备份,即master-slave模式的数据备份。

Redis发展历程

2008年,意大利的一家创业公司Merzia推出一款基于Mysql的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并与2009年开发完成,这个数据库就是redis。

不过该公司创始人并不满足只将redis用于自己的网站服务,而是希望更多的人能够使用这一款数据库软件,于是便在同一年将该软件开源发布,并开始和redis的另一位主要的代码贡献者 Pieter Noordhuis一起继续着redis的开发。

在开源上市的短短的几年时间内,Redis就拥有了庞大的用户群体。根据目前在国内用户的情况来看,redis的用户包涵了国内各大厂商,百度、新浪、知乎等,当然也有国外的比如GitHub、Stack Overflow 、Flickr 等一些知名网站。
现在Redis的源码托管在GitHub上,开发十分活跃。

Redis版本说明

Redis 版本号采用标准惯例:主版本号.副版本号.补丁级别,一个副版本号就标记为一个标准发行版本,例如 1.2,2.0,2.2,2.4,2.6,2.8,奇数的副版本号用来表示非标准版本,例如2.9.x发行版本是Redis 3.0标准版本的非标准发行版本。

目前官方最新为5.X版本,每一次大版本的升级,都对应了redis的功能的增加以及完善。那么在诸如众多的版本中,我们如何选择使用,就也变成一个比较令人关注的问题。个人总结在选择时注意以下几个事项:

根据redis的命名规则,我们首先要判定我们要使用的是不是稳定版本,避免在生产环境使用测试版本,出现不可控问题。尽量选择市面主流的大版本,新的版本虽然增加了很多的功能,但是并不一定最新的就是最适合我们的。我尽可能选择使用者众多的,可以提升相互交流的空间同时也提供更好的可维护性。就像找女朋友,适合自己的就一定是最好的。

Redis特性及优势

1.速度快

这也是我们为什么要选择内存数据库的原因,也是我们很重要的一个参数指标。Redis使用C语言开发,C语言号称最贴近系统的开发语言。

redis所有数据都会存在内存当中。举个例子:以人作为参考的话,在大脑记忆力的东西我们想找的话一定是最快的,其次才是我们所记录在书本上的东西。

2.持久化

存在脑子里的知识可能忘记丢失,持久化存储到纸上(硬盘)的数据才相对于最稳定。

3.支持多种数据结构

同样key-value的数据库,redis比mecache要好一些,很好的支持了 String、List、Set、Hash、Zset数据结构。

4.功能丰富

redis同样也支持事务、流水线、发布/订阅、消息队列功能。当然比如消息队列功能来讲,还是专业的MQ比较好,毕竟术业有专攻。什么样的东西做什么样的事情。

5.高可用以及分布式

主从复制配置简单,容易上手。可以提供基本的数据备份。技术条件支持的情况下,肯容易实现读写分离,备份同时提高性能。也可以使用Sentinel实现很好的主从切换,完成高可用。在3.0以后的版本中拥有了官方的集群工具Redis-Cluster 实现了分布式的功能,使我们的容量得到很好的扩展。

Redis与其他软件

1.通过以上我们对redis的介绍,至少对这款软件我们大家都有了一定的了解,那么我们同时在介绍几款其他的nosql大家可以参考对比一下。

Memcache 纯内存型
MongoDB 文档型
codis redis为基础的较好的二次开发

Redis的应用场景

1.显示最新项目列表

在日常的web应用中,展示出最新的评论或者回复的时候,如果频繁的操作数据库,这肯定是不可以接受的。使用lpush用来插入1个ID,作为关键字存储到列表的头部。ltrim用来限制列表中常用的项目数据比如2000,.这样的话redis使用的是常驻内存的缓存,当我们访问超出这个值才会去访问数据库。

2.海量数据和高并发

redis所支持的分布式和持久化,可以很好的支持和对应海量数据和应对高并发。redis从初期的主从复制,到现在官方的cluster支持,可以很好地扩容,对比以前单机的容量有了质的变化。同时持久化可以有效提高数据的安全性和稳定性。

3.秒杀等高并发事务

秒杀开始前30分钟把秒杀库存从数据库同步到Redis Sorted Set

用户秒杀库存放入秒杀限制数长度的Sorted Set

秒杀到指定秒杀数后,Sorted Set不在接受秒杀请求,并显示返回标识

秒杀活动完全结束后,同步Redis数据到数据库,秒杀正式结束

4.计数器

Redis是一个很好的计数器,这要感谢INCRBY和其他相似命令。

我相信你曾许多次想要给数据库加上新的计数器,用来获取统计或显示新信息,但是最后却由于写入敏感而不得不放弃它们。

好了,现在使用Redis就不需要再担心了。有了原子递增(atomic increment),你可以放心的加上各种计数,用GETSET重置,或者是让它们过期。

例如这样操作:
复制代码 代码如下:

INCR user: 
EXPIRE user: 60

你可以计算出最近用户在页面间停顿不超过60秒的页面浏览量,当计数达到比如20时,就可以显示出某些条幅提示,或是其它你想显示的东西。

6.缓存

这是一个很关键的,也是最重要的一个使用场景。在数据缓存方面可以替代memcache。

其他具体的使用场景大家可以发掘一下,不再一一的介绍。

我能学到什么

通过这一篇的介绍, 大家都大致了解了redis是个什么样的软件,redis的发展以及redis都有什么样的功能和优势。

由于博主运维出身,我们的文章也都是偏于运维实战的。通过整套的文章系统的学习,我们可以快速的上手投入到redis的运维和使用中。

比如主从复制,twemproxy如何架设redis集群,redis-cluster如何架设集群,以及扩容,使用哨兵完成我们环境的高可用等。我们将使用目前比较多的redis 3.X版本作为讲解的蓝本,大版本的差异不再过多的介绍,3.X开始很好的支持了cluster,可以很好的实现扩容、缩容等。使用Centos 7.X的系统,作为我们学习的工具和背景。之后的章节中,主要实战为主,希望大家跟上节奏,搭建好相对应的环境。预祝大家学习顺利!