序:初识Redis
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的系统,作为我们学习的工具和背景。之后的章节中,主要实战为主,希望大家跟上节奏,搭建好相对应的环境。预祝大家学习顺利!
@版权声明:51CTO独家出品,未经允许不能转载,否则追究法律责任