Redis简介
关系数据库的不足
- 不能有效处理多维数据
- 高并发读写性能低
- 支撑容量有限
- 数据库的可扩展性和可用性低
NoSQL数据库的优势
- 易扩展
- 大数据量
- 高性能
NoSQL = Not Only SQL(非关系型数据库)
- NoSQL数据之间无关系,数据库的结构简单,这样就容易扩展,可以方便实现高可用的架构。
- NoSQL的出现弥补了关系数据库在某些方面的不足,极大的节省开发成本和维护成本
Redis是当前比较热门的NoSql数据库产品之一,是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的高性能键值对Key-Value数据库(区别于MySQL的二维表格的形式存储)。它通过提供多种键值数据类型来适应不同场景下的存储需求。
Redis数据类型:
- String(字符串)
- List(列表)
- Set(无序集合)
- Zset(有序集合)
- Hash(哈希表)
Redis特点:
- 性能极高(Redis读取的速度是110000次/s,写的速度是81000次/s)
- 原子性(Redis 的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行)
- 支持多种数据结构(string、list、hash、set、zset)
- 支持持久化
- 支持主从复制
- 支持集群
- 支持key过期时间特性
- 支持事务
- 支持消息/订阅模式
- 官方仅支持Linux系统(有第三方版本支持Windows系统)
Redis的应用场景
数据缓存应用(最多使用)
缓存的两种形式:
- 页面缓存:第一次从数据库读取,然后生成一个静态页面,以后所有的读取,只加载静态页面
- 数据缓存:由于一个页面有几种需要从不同的缓存中读取数据的模块,所以不适合使用页面缓存
热点数据:数据库中数据被访问的频率是不均匀的,频繁被访问的数据称为热点数据
- 会话缓存应用:分布式集群架构中的session分离
- 排行榜应用:利用Redis的sorted set(有序集合)
- 计数器应用:利用Redis的原子性
- 数据过期处理:利用Redis支持的过期时间特性可以定时清除过期数据,如定期活动(精确到毫秒)
- 消息队列:Redis支持消息/订阅模式,可以构建实时的消息队列
Redis两个特点
单进程
- Redis的服务器程序采用的是单进程的模型来处理客户端的请求
- Redis的实际处理速度完全依赖主进程的执行效率
- 假如同时有多个客户端并发访问服务器,则服务器处理能力在一定情况下将会下降。假如要提升服务器的并发能力,那么可以采用在单台机器上部署多个redis进程的方式。
多数据库(16个)
- Redis每个数据库对外都是0开始递增的数字来命名,默认16个数据库,默认使用0号数据库,可以使用select+数字来选择数据库
- Redis不支持自定义数据库名字
- Redis不支持为每一个数据库设置不同的访问密码
- Redis多花个数据库之间并不是完全独立的(FlushAll命令:清空redis全部的数据)