目录
一、概述
二、redis的特性
2.1、存储结构
2.2、内存存储与持久化
2.3、功能丰富
2.4、简单稳定
三、redis支持的键值数据类型
四、为什么使用redis
五、redis与其他key-value存储有什么不同
一、概述
- Redis之父:Salvatore Sanfilippo一名意大利程序员,大家更习惯称呼他 Antirez。
- Redis即REmote Dictionary Server(远程字典服务器)。
- REmote Dictionary Server(Redis)是由Salvatore Sanfilippo写的key-value存储系统。
- 2008年,意大利一家创业公司退出一款基于Mysql的网站实时统计系统LLOOGG,而MySQL的性能不足以支持LLOOGG,Merzia公司创始人为LLOOGG量身定制了一个数据库,即Redis。
- VMware公司从2010年开始赞助Redis的开发,Salvatore Sanfilippo和Pieter Noordhuis分别于同年加入VMware全职开发Redis。
- Redis是一个开源的使用ANSI C语言编写、遵循BSD协议,支持网络、基于内存亦可持久化的日志型、key-Value数据库,并提供多种语言的API。
- 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
- redis的代码托管于GitHub上,2015年Redis发布了3.0.0的正式版。(开源)。
二、redis的特性
2.1、存储结构
- 键值对的存储形式,dict["key"]="value";dict为字典结构变量。“key”为键,“value"为值。
- redis以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
2.2、内存存储与持久化
Redis数据库中的所有数据都保存在内存中,内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势。一台普通笔记本电脑上,redis可以一秒读写超过100k个键值(key-value)
数据存储在内存中的问题:程序退出后内存中的数据会丢失。redis的持久化功能能解决此问题。Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.3、功能丰富
- Redis提供数据开发、亦支持缓存、队列系统。
- Redis可为每个键(key-value)设置生存时间(Time To Live,TTL)。生存时间可自动删除。
- 键的生存时间与redis的性能配合可作为缓存系统来使用。
- 作为缓存系统,redis可限定数据占用的最大内存空间,在数据到达空间限制后可以安照一定的规则自动淘汰不需要的键。
- redis的列表类型键可以实现队列并支持阻塞式读取。
2.4、简单稳定
- redis的存储结构简单使得程序与redis的交换简单。
- 数据读写操作简单。
- c语言开发,代码量少。
- 提供几十种不同编程语言的客户端库。这些库中封装了redis的命令使得在程序中与redis进行交换变得更加容易。
- redis是开源的,良好的开发氛围和严谨的版本发布使得redis的稳定版本非常可靠。
三、redis支持的键值数据类型
- 字符串类型
- 散列类型
- 列表类型
- 集合类型
- 有序类型
四、为什么使用redis
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
五、redis与其他key-value存储有什么不同
- Redis复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。