【Redis总结】1-Redis的介绍
一、Redis 介绍
REmote DIctionary Server(Redis)是一个由 Salvatore Safilippo 写的 key-value 存储系统。
Redis 是一个完全开源免费的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。
Redis 本质上是一个高性能的 Key/Value 数据库,与 Memcached 类似的 NoSQL 型数据库,但是它的数据可以持久化的保存在磁盘上,解决了服务器重启后数据不丢失的问题。Redis 通常被称为 数据结构服务器,因为值(Value)可以是 String(字符串)、List(列表)、Hash(哈希)、Sets(集合)或者是 Ordered Sets(有序集合)等类型,所有的数据类型都具有 push/pop、add/remove、执行服务端的并集、交集、两个 sets 集中的差别等等操作,这些操作都是具有原子性的,Redis 还支持各种不同的排序能力。
Redis 2.0 更少增加了很多新特性,如:提升了性能、增加了新的数据类型、更少的利用内存(AOF和VM)。
Redis 支持绝大部分主流的开发语言,如:C、Java、C#、PHP、Perl、Python、Lua、Erlang、Rubby等等。
Redis 与 其他 key-value 缓存产品有以下三个特点:
- Redis 支持数据库的持久化(RDB和AOF),可以将内存中的数据保存在磁盘中,当Redis重启的时候可以再次加载并应用。
- Redis 不仅仅支持简单的 key-value 类型的数据库,同时还提供 list、set、zset、hash 等数据结构的存储。
- Redis 支持数据的备份,即 master-slave 模式的数据备份以及哨兵模式 Sentinel
二、Redis 优势
- 性能极高 -- 根据 Redis 官方的测试结果:在 50 个并发的情况下请求 10w 次,写的速度是 110000 次/s,读的速度是 81000 次/s。
根据 Redis 官方的测试结果:在 50 个并发的情况下请求 10w 次,写的速度是 110000 次/s,读的速度是 81000 次/s。 测试环境: 1. 50个并发,请求100000 次 2. 读和写大小为 256 bytes 的字符串 3. Linux 2.6 Xeon X3320 2.5GHz 的服务器上 4. 通过本机的 loopback interface 接口上执行
- 丰富的数据类型 -- Redis 支持二进制案例的 Strings、Lists、Hashes、Sets 及 Ordered Sets 等数据类型操作。
- 原子性 -- Redis 的所有操作都是原子性的,意思就是 要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来。
- 丰富的特性 -- Redis 还支持 publish/subscribe、通知、key 过期等等特性。
三、Redis 的功能
1、Redis 的 Sharding: Redis 支持客户端的 Sharding 功能,通过一致性 hash 算法实现,当前 Redis 不支持故障冗余,在集群中不能在线增加或删除 Redis。
2、Redis 的 master/slave 复制:
1) 一个 master 支持多个 slave
2) Slave 可以接受其他 slave 的连接来替代其他连接 master
3) 复制在 master 是非阻塞的,而在 slave 是阻塞的
4) 复制被利用来提供可扩展性,在 slave 端值提供查询功能及数据的冗余
3、Redis 的 Virtual Memory 功能:vm 是Redis 2.0 新增的一个非常稳定和可靠的功能,vm 的引入是为了提供 Redis 的性能,也就是把很少使用的 vlaue 保存到 disk,而 key 保存在内存中。实际上,就是如果你有 10w 的keys 在内存中,而只有仅仅 10% 左右的 key 经常使用,那么 Redis 可以通过开启 VM 尝试将不经常使用的 value 转换到 disk 上保存。
4、Redis 的附加档案(AOF)功能:Redis 通过配置的策略将数据集保存到 aof 中,当 Redis 挂掉后能够通过 aof 恢复到挂掉前的状态。
四、Redis 能干啥?
- 内存存储和持久化:Redis支持异步将内存中的数据写到磁盘上,同时不影响继续服务;
- 支持事务transaction,但是不保证事务的原子性,即可以允许一组命令中的一部分成功,另一部分失败;
- 模拟类似于 HttpSession 这种需要设定过期时间的功能;
- subcribe/publish 发布、订阅消息系统;
- 定时器、计数器;
- 主从复制、哨兵模式备份数据等。
五、Redis 与 其他 key-value 存储有什么不同?
- Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis 的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样 Redis 可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
六、相关资源
Redis 官网: https://redis.io/
Redis 在线测试:http://try.redis.io/