简介
简介
基本概念
Redis是一个开源的,就是一种运行速度很快,并发很强的跑在内存上的NoSql数据库,以key- -value键值对的存储服务系统。
支持多种数据结构,它支持存储的 value类型相对更多,包括 string(字符串) list(链表)、set(集合)、 zsetsorted set--有序集合和hash(哈希类型)
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作, 而且这些操作都是原子性的。
在此基础上, Redis支持各种不同方式的排序。
与 memcached一样,为了保证效率,数据都是缓存在内存中。区别的是 Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记 录文件。
Redis特性
速度快
数据存储在内存中,使用C语言实现,单线程模型,最高支持10W OPS。
为什么速度快?首先,采用了多路复用io阻塞机制,然后,数据结构简单,操作节省时间,最后,运行在内存中,自然速度快
持久化
由于内存断电后会丢失数据,Redis会对数据的更新异步保存在磁盘上
多种数据结构
常见数据结构:字符串、哈希、List、Set等
衍生数据结构:位图(BitMaps)、HyperLoglog(超小内存唯一值计数)、GEO(地理位置定位)

支持多种编程语言
Java、PHP、Python、Ruby等
丰富功能
- 发布订阅:实现基于消息的功能
- Luau脚本:实现自定义的命令
- 支持简单事务
- Pipeline:提高客户端的并发效率
简单:代码短小精悍
①不依赖外部库
②单线程模型
主从复制
为分布式提供一定的基础

高可用、分布式
v2.8开始支持Redis-Sentinel(哨兵)高可用
v3.0开始支持Redis-Cluster 分布式

Redis典型使用场景
- 缓存系统:
当用户请求数据时,如果Redis中有该数据, 就直接返回该数据;如果没有,则到Storage中进行查询,并将查询结果保存到Redis中,同时将Storage查询结果返回给用户。

- 计数器:
常见的转发数、评论数都可以通过Redis实现,Redis的increase命令在单线程下可以高效稳定的统计数目

- 消息队列系统

- 排行榜:
Redis提供有序队列的形式,可以方便的实现排行榜功能
社交网络:
社交网络中的常见功能,如粉丝数、订阅数、相互关注、时间轴功能等
实时系统:
垃圾邮件处理系统、过滤系统等
数据过期处理:
可以精确到毫秒级别
任务队列:
秒杀、抢购、12306等等
session分离:
多用于分布式集群架构中
NOSQL数据库
概念
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。
NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
不遵循SQL标准。
不支持ACID (原子性、一致性、隔离性、持久性)。
远超于SQL的性能。
适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
不适用场景
- 需要事务支持
- 基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
- 用不着sql的和用了sql也不行的情况,请考虑用NoSql
常见NOSQL数据库
| 名称 | 优缺点 |
|---|---|
| Memcache | 很早出现的NoSql数据库数据都在内存中,一般不持久化 支持简单的key-value模式,支持类型单一 一般是作为缓存数据库辅助持久化的数据库 |
| Redis | 几乎覆盖了Memcached的绝大部分功能 数据都在内存中,支持持久化,主要用作备份恢复 除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。 一般是作为缓存数据库辅助持久化的数据库 |
| MongoDB | 高性能、开源、模式自由(schema free)的文档型数据库 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘 虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能 支持二进制数据及大型对象可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。 |
