Redis 基本介绍及性能分析
Redis 基本介绍及性能分析
什么是 Redis?
1、简介
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
为什么选用 Redis?
要想知道为什么现在很多厂商都选择 Redis 作为自己产品的缓存和中间件,就得知道 Redis 相较于其他的竞品的优势和劣势。
- 是否需要复杂的数据结构?若是选择使用 Redis 作为存储,否则 Redis和 MC 都可以考虑。若是简单的 get/post 请求,且需要较高的性能需求,可以是使用 MC 代替 Redis
- 是否需要进行数据的持久化存储,不允许数据丢失?若是选择使用 Redis 作为存储,并且在申请服务的时候注明需要作为存储而非缓存,需要开启持久化存储并对数据进行定期备份
- 是否需要 Master/Slave 机制保证服务的高可用?若是选择 Redis作为存储,平台会默认为所有的 Redis 服务部署 Slave 从库
1、Memcache优势
- Memcache 可以利用多核优势,单实例吞吐量极高,可以达到几十万的 QPS(每秒查询数),适用于最大程度康数据量
- 支持直接配置 session handler
- 坑少
2、Memcache劣势
- 只支持简单的字符串类型数据
- 无法进行持久化,数据不能备份,只能作为缓存使用,一旦重启数据全部丢失
- 无法进行数据同步,不能将 MC 实例的数据迁移到另一个 MC 实例
- Memcached内存分配采用Slab Allocation机制管理内存,value大小分布差异较大时会造成内存利用率降低,并引发低利用率时依然出现踢出等问题。需要用户注重value设计
3、Redis优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
- 支持数据持久化,包括 RDB(Redis DataBase)和 AOF(append only file)两种方式,生产环境可以两种方式结合使用
- 支持 Master/Slave机制,最大程度保证服务的高可用,并且可以实时进行数据的同步复制
- 支持集群
- 单线程请求,命令串行化,请求不用考虑加锁释放锁造成的性能消耗
- 支持 pub/sub 订阅发布机制,可以用来做消息订阅和通知
4、Redis 劣势
- Redis 是单线程,性能受限于内存,同时无法最大程度发挥多核 CPU 的性能,单实例 CPU 最高可以达到 5-6 W 的 QPS
- Redis 在 string 类型上会消耗较多的内存,可以使用 dict压缩存储以降低内存耗用
5、与其他 key-value 存储的区别
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问
Redis 为什么快?
- Redis 是单线程,不需要进行各种上下文切换,加锁释放锁的操作,也避免了出现死锁的现象从而造成的性能消耗
- Redis 重新设计了自己的数据类型 SDS(simple dynamic string),在最底层有自己的编码方式,可以根据数据的长度和类型去自动分析选取最适合的数据类型
- Redis 是纯内存操作,就一个字快
- Redis可以 I/O多路复用
Redis 配置文件详解
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!