带你初步了解 Redis(一)

2 篇文章 0 订阅
1 篇文章 0 订阅

今天互联网的繁荣昌盛,一定离不开底层稳定的技术支持,每个大中型公司有时都会经历或多或小的流量冲击,每个公司应对措施也会有不同,如果说几种使用最频繁的中间件,那 Redis 必须占有一席之地。其次,Redis 也是面试之中经常考查的一部分,所以小王我打算补补这方面的知识,同时把我自己总结的,也分享给大家,一起学习,一起进步。关于 Redis 的文章我会写一个系列,中间可能会穿插着写别的文章。总之,加快更新速度,逼自己去学习。

 

Redis 的简介

 

对 Redis 有大概了解的都知道,它是一位名叫 Salvatore Sanfilippo 大神开发的。据说,在2008年的时候,他所在的公司使用的是 Mysql 数据库,由于网站性能遇到了瓶颈,无论怎么优化数据库和代码,性能都没有显著的提升。所以他一气之下,自己开发了一套专门属于他们公司的数据库(大神就是这么任性),这也是 Redis 的前身,之后他把源码开源到了 Github,受到良好的反响,他自己都没想到。想必,优秀的作品在哪都会发光的。现如今,国内外的许多大型互联网公司都接入了 Redis,例如:Twitter、Instagram、Github、新浪、阿里、腾讯、百度、美团等。Redis 的重要性也就不言而喻了。

 

Redis 其实就是一种 Nosql(非关系型)数据库,数据结构是以 key-value 形式存放的。它的值由以下几种:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、GEO(地理信息定位)等多种算法和数据结构组成的。由于 Redis 的所有操作都是在内存中执行的,所以它的执行速度非常快。既然说到在内存执行,有的同学肯定会想到如果机房断电或者故障导致数据丢失怎么办,这方面作者已经想到了,Redis 会通过快照和日志的形式保存到硬盘上,进行持久化。这方面之后再细说。

 

Redis 的特性

 

1.速度

当你问使用过 Redis 的用户,他们为什么选择 Redis 的时候,我想大部分人都会回答它的性能好、速度快之类的形容词。确实,Redis 最重要的优点之一就是它在速度性能方面表现非常好,但是我们不能只知道它快,但是为什么快,怎么做到这么快的,我们应该有所了解(我好像在开车,但是你们没有证据)。官方给的数据是,忽略机器性能,Redis 它的读写性能可以达到10万/秒,这惊人的速度,大家可想而知。

 

分析 Redis 速度之快原因,可以总结为三点:第一、执行全部在内存之中—Redis 所有的操作都在内存中执行,少了很多不必要的 IO 操作,内存的读写速度在计算机硬件中可以属的上的,计算机硬件的相关知识大家有兴趣可以去网上查下。第二、它底层是用 C 语言实现的,因为 C 语言可以称为开发语言届的元老,这种语言更接近系统底层,执行速度相对较快。第三、Redis 采用了单线程的架构,这点尤其重要,之所以采用单线程架构,是预防多线程可能产生的线程竞争问题。此外,Redis 源代码的优雅和简洁也为其速度提供了很大的支持。

 

2.特殊的数据结构服务器

其实 Redis 的数据结构就是类似字典的功能,例如 Java 里的 Map、Python 里的 dict。它的值支持多种的数据结构,刚才前面已有介绍支持的数据结构。这样不仅能便于在许多应用场景开发,同时也能提高开发的效率。另外,可能大部分人不知道 Redis 的全称是什么,在这里我给大家简单的普及下,Redis 的全称是 REmote Dictionary Server (远程字典服务器),从名字也能看出来 Redis 的作用和结构。

 

3.丰富的功能

除了特殊的数据结构设计,Redis 还提供了一些额外的功能:

  • 提供了键过期功能,可以用来实现缓存

  • 提供了订阅发布功能,可以用来实现消息系统

  • 支持 Lua 脚本功能,可以利用 Lua 创造出新的 Redis 命令

  • 提供了简单的事务功能,能在一定程度上保证事务特性

     

 

4.简洁稳定而不单一

Redis 的设计是非常简单的,但是功能又不单一。它的设计简单可以体现在三个方面。首先,它的代码结构设计非常简洁,早起版本的代码总量只有2万多行,之后增加了许多功能,目前大概有5万多行。其次,Redis 使用的是单线程的模型,这样设计的好处是不仅让 Redis 服务端处理变的简单,让客户端开发也变得方便。最后体现在它的不需要依赖操作系统的类库,因为 Redis 自己实现了事件处理的相关功能。虽然 Redis 设计简单,但是它支持的开发语言却不单一,因为它提供了简单的 TCP 通信协议,使得更多编程语言可以接入。例如 Java、PHP、Python、C、C++、Node.js。

 

5.持久化

关于 Redis 的持久化我们在这里只做简单的介绍,因为这块知识点可以展开说很多。熟悉 Redis 的朋友都知道,它提供了两种持久化的方式:RDB 和 AOF,可以通过用这两种形式保存在硬盘上,进行持久化。

 

6.主从复制、高可用、分布式

Redis 提供了复制公布,实现了多个相同数据的 Redis 的副本,复制功能也是 Redis 分布式的基础,在3.0版本的时候 Redis 支持了分布式实现 Redis Cluster,它是真正的 Redis 分布式实现,提供了高可用、读写和容量的扩展性。

 

Redis 的用途

 

介绍了这么多 Redis 的概念和特性,那它到底能做什么呢?俗话说的好—光说不练假把式。接下来简单的说几点 Redis 到底可以用来做什么。

 

1.缓存

用过 Redis 大部分的同学,多数都是用它来当缓存使用的。确实,因为 Redis 提供了键过期的功能,可以根据业务需求将一些热数据放在 Redis 中。可以这么说,一个合理的缓存设计能够为一哥网站的稳定保驾护航。

 

2.排行榜系统

排行榜几乎在所有的网站都有存在,例如按照热度排行、发布时间排行等各种复杂的排行榜。因为 Redis 提供了列表和有序集合的数据结构,合理的使用这些数据结构可以构建各种有意思的排行榜。

 

3.计数器系统

单纯的说计数器系统有些笼统,举个栗子:视频网站的播放数、电商网站的浏览数。为了保证数据的时效性,这类数据是实时变化的,每次播放和浏览都会进行加1的操作。Redis 天然支持计数器功能而且计数性能非常好,可以说是计数器技术选型的不二选择。

 

4.社交网络

这点其实和计数器系统多少类似,大家都完过微博之类的社交媒体。赞、踩、评论、共同好友、喜好是社交系统必备的的功能。由于社交网络的访问量比较大,使用一般的关系型数据库不太适合这种场景,Redis 提供的数据结构可以对其进行良好的支持。

 

其实,Redis 的特性和玩法还有好多,我这里只是简单的介绍了几种常用的和必须了解的。更多特性和玩法大家可以在使用过程中自己去体验,技术这方面还是需要多练,一直看书、看博客是没太大的效果的。所以我这里附上一段简单的代码,没有安装过 Redis 的同学可以按照我这个脚本去试着安装下。

 

$ wget http://download.redis.io/releases/redis-3.0.7.tar.gz
$ tar xzf redis-3.0.7.tar.gz
$ ln -s redis-3.0.7 redis
$ cd redis
$ make
$ make install

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值