企业级Redis开发运维从入门到实践 (1)—Redis 初识
Redis是什么
Redis是一个开源、基于键值的存储服务系统,具有多种数据结构,同时具有高性能、功能丰富(即高性能Key-Value、多种数据结构、丰富的功能、高可用分布式支持的数据存储服务)的特性。
Redis使用公司
下面等公司都在使用Redis
Redis的特性
八大特性:速度快、持久化、 多种数据结构、支持多种变成语言、功能丰富、简单、主从复制、高可用与分布式。
速度快
10w OPS,即每秒10w的读写(官方提供),该特性的原因
- 数据存储于内存中
- C语言(50000 line实现,单机核心代码在23000 line,其他的是分布式部分)
- 单线程模型
内存、SSD硬盘、机械硬盘的快速读写的效率对比
持久化(宕机不丢数据)
Redis所有数据保持在内存中,对数据的更新将异步地保存到磁盘上。提供了RDB和AOF两种方式做数据持久化。
Key-Value数据结构
Redis提供了五种主要数据结构
- 字符串(String)
- 哈希(Hash Tables (objects!))
- 列表(Linked Lists)
- 集合(Sets)
- 有序集合(Sorted Sets)
新版本增加的数据类型
- 位图(Bitmaps):使用很小的内存实现高效的存储,例如布隆过滤器可以使用Bitmaps实现,本质还是字符串。
- 超小内存唯一计数(HyperLogLog):只用12k的存量存储一个唯一值计数,计数不一定准确有一定的误差率,本质还是字符串。
- 地图信息位(GEO):Redis3.2提供的一个地理信息定位的数据类型,可以计算经度和纬度。
支持多种客户端语言
不仅支持以下语言,还支持其他的语言。
功能丰富
Redis提供了多种丰富的功能
- 发布订阅
- 事务
- Lua脚本
- pipeline
简单
Redis简单在于单机核心代码量大约23000行C编写而成,方便开发者对日志的分析或者开发者根据自己的业务需求进行修改来实现业务的定制化。
注:但是Redis的首要是任务是开发和运维,在有大量经验后带着问题去看源代码来解决问题。
Redis简单的其他原因
- 不依赖外部库(like libevent)
- 单线程模型:不论是服务端还是客户端开发都将相对容易些。
主从复制
在Redis中有两种角色:主服务器、从服务器。
主服务器的数据可以同步到从服务器上,这样可以为高可用和分布式提供很好的基础。
主从复制是Redis开发和运维的痛点之一。
高可用、分布式
Redis单点和主从复制模型对于实现一个高可用数据库来说是比较难甚至无法实现的,所以Redis从2.8版本中提供了Redis-Sentinel(v2.8)支持高可用。
其次对于一个具有存储功能的服务来讲,他的分布式功能对于当下的市场来说是非常重要的,所以Redis从3.0版中正式提供了Redis-Cluster(v3.0)支持分布式。
Redis典型应用场景
- 缓存系统:用户请求App Server,基于高并发处理App Server首先向Cache(Redis)中查询数据,如果Cache(Redis)中存在数据将数据返回App Server;如果Cache(Redis)不存在将去Storage存储层(MySQL、Oracle、PostgreSql等)查询数据,将数据返回App Server,于此同时存入Cache(Redis)中以提供高可用。
- 计数器:微博的转发数和评论数都是可以使用计数器实,Redis的INCR key可以执行递增操作来实现计数。
- 消息队列系统:在消息队列要求不是很强的时候可以使用Redis的发布订阅模式作简单的中间件使用。
- 排行榜:Redis提供的有序集合在实现排行榜功能是非常简单的。
- 社交网络:社交网络的粉丝数、关注数、共同关注等功能均可用Redis来实现。
- 实时系统:垃圾邮件处理系统,消息队列缓冲系统。