Redis特性总览
速度快
官方给出的数据是10w OPS,也就是每秒可以实现10万次读写,虽然官方给出的数据通常会偏高一些,但是从实际使用来看达到万级别的OPS是基本没有问题的,当然这也和使用的方法以及具体的数据是有关的,这里我们不做具体讨论。
Redis之所以这么快有这么几点原因,数据是存在内存中,源代码使用C语言编写,代码短小精悍,使用的是线程模型是单线程。
这里使用单线程主要是因为内存读写速度非常快,使用单线程能达到很高的性能,很多实际开发当中,多线程往往会成为我们并发的瓶颈。
其实速度块最主要的原因就是内存。无论代码写的多好,或者使用什么线程模型,如果数据是存在一个比较慢的介质当中,那性能也不会很高。
相信学过计算机专业的同学对下面这张图一定不陌生,该图展示了计算机存储的各个介质,从上到下包括寄存器、一级缓存、二级缓存、内存、本地硬盘、远程硬盘,从上到下它的速度是由快至慢,容量由小到大,价格由高到低。
内存与硬盘对比
持久化
我们知道Redis是将数据保存在内存中,而内存的数据不具有持久化的特性,也就是说当机器发生断电时,是无法对内存的数据进行恢复的,为此Redis就提供了持久化的功能。
Redis所有数据保存在内存中,对数据的更新将异步的保存到磁盘上。
Redis提供了RDB
和AOF
两种方式对数据进行持久化。
多种数据结构
Redis提供了5种主要的数据结构:String、Hash、List、Set、Sorted Set
除此之外,在Redis的后续版本以及迭代当中,也提供了一些其他的(衍生的)数据结构:
BitMaps:
位图(本质是字符串)
HyperLogLog:
超小内存唯一值计数(本质是字符串)
GEO:
地理信息定位(Redis3.2提供,本质是有序集合)
支持多种客户端语言
由于Redis受到了很多公司的支持,以及Redis提供了一个非常简单的基于TCP的通信协议,所以说非常多的编程语言都主动去支持Redis服务器。包括但不限于以下所有语言,所以这也是Redis非常受欢迎的原因之一
功能丰富
Redis除了提供5种主要数据结构以外,还提供了很多其他的功能,像发布订阅可以实现很多消息的功能,同时还支持Lua脚本,这样可以实现一些自定义命令,同时还支持简单的事务功能、最后Redis也支持pipeline来提高客户端的并发效率。
总之如果将Redis使用好的话,它会像一把瑞士军刀一样无所不能。
简单
Redis的单机核心代码只有23000行,redis3.0提供了更丰富的集群分布式功能(代码大约4-5万行),如果想真正吃透Redis这个项目,都可以去阅读它的源代码,甚至有些企业可以去修改它的源代码来实现自己业务的定制化。
Redis的简单还体现在它不依赖外部库(like libevent),同时它是一个单线程模型,这意味着无论是服务端还是客户端的开发都会相对容易一些。
主从复制
Redis提供了主从复制的功能,也就是说在Redis中有两种角色,主服务器和从服务器,主服务器的数据可以同步到从服务器中,这样可以为高可用以及分布式提供一个很好的基础。
高可用、分布式
本身Redis的单点或者说Redis的主从复制模型对于实现一个高可用的数据库来说是比较困难的甚至是几乎不可能的。
因此Redis在2.8版本当中提供了Redis-Sentinel
这样的功能来支持高可用。
其次对于一个数据库来说,分布式功能对于当下的企业也是非常重要的,所以Redis从3.0版本开始正式支持分布式,也就是Redis-Cluster
网友评论