申明
本文首发自架构小站,转载请注明。
什么是Redis
Redis是开源(BSD许可)的KV内存存储服务器,可以用作数据库、缓存、消息中间件等。它支持多种数据结构,包括字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)、位图(bitmaps)、对象计数器(hyperloglogs)、地理空间索引(geospatial indexes)。Redis内置了复制(replication)、Lua脚本、LRU驱动时间、事务(transacations)和不同级别的磁盘持久化(persistence),并通过Redis哨兵(sentinel)和集群(cluster)保证高可用(hign availability)。
Redis应用场景
数据库
使用Redis代替传统的关系型数据库入mysql、mariadb直接作为数据最终仓库,适合产品初期数据量少,或者长期(如三年)数据量可控的场景。好处是读写速度杠杠的,再也不需要缓存啦,同时也降低了系统复杂性,简单的总是最好的。坏处是资源消耗(主要是内存)太大,成本高,同时Redis的异步持久化可能带来数据丢失的风险。
缓存
这是Redis最广泛的应用,多数场景下取代了老牌缓存Memcached。缓存的作用是加速数据访问,Redis的数据放在内存中,内存IO比磁盘IO大概高1-2个数量级,性能提升非常可观。另外,由于缓存的引入,数据库压力大大降低,减少了高峰时期系统宕机的风险,而且作为缓存,异步持久化可能带来的数据丢失也可以接受。缺点是引入了额外的复杂性,Redis失效会造成数据库击穿,压垮数据库。
消息中间件
这应该算是Redis的一种非主流应用了,主要有两种使用形式: (1) 基于Redis的Pub/Sub子系统,发布订阅模式,每个频道支持多个订阅者 (2) 基于Redis列表(lists)数据结构,利用lpush发送消息,rpop消费消息,或者使用它们的阻塞版本,减少轮询压力 由于有专门的消息中间件,所以Redis的这种应用并不多,Redis之父基于Redis实现了独立的消息中间件Disque,有兴趣的可以搜索github
Redis学习资源
1、当然是架构小站啦,近期会着力更新Redis相关文章,包括Redis基本数据类型,协议、客户端、历史、运维、高可用、扩展以及源码分析相关的文章,欢迎关注
2、Redis官网:redis.io,这个不用多说,从Redis的安装、命令大全、实现原理到客户端都有介绍,建议大家先通读一遍,大有裨益
3、Redis源码,学习Redis的源码涉及了大量数据结构,网络服务器以及c语言模块化和类面向对象化的知识,对linux c程序设计有很大帮助。小件之后会更新数篇这方面的文章和大家一起学习