1.概述
Redis(Remote Dictionary Server)是一个可基于内存也可持久化的键值型数据库;由于数据是存储在内存中,所以读写速度非常快,Redis被广泛应用于缓存方向
Redis是一个开源的key-value存储系统,和Memcached(只支持String)相比,支持更多的value类型,包括:string,list,set,zset和hash,这些数据类型都支持pop/push、add/remove及取交集并集差集和更复杂的操作,这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与Memcached一样,为了保证效率,将数据缓存在内存中,区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。Redis实现了master-slave同步
Redis默认有16个数据库,类似于数组从下标0开始,默认使用0号库。使用命令select dbid来切换数据库,所有库使用统一的密码管理;dbsize查看当前库的key的数量
Redis是单线程+多路IO复用技术
2.优点
- 读写性能优异
- 支持数据持久化
- 支持事务
- 数据结构丰富
- 支持主从复制
3.缺点
- 数据库容量受到物理内存的限制,不能做海量数据的高性能运算,适合较小的数据量操作
- 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求的失败
- 主机宕机,有部分数据未能及时同步,会导致数据不一致的问题
- 较难支持在线扩容
4.为什么要用Redis
- 高性能
用户第一次访问数据库中的某些数据,会比较慢,因为是从硬盘中读取的。将用户访问的数据存储在缓存中,下次可以直接从缓存获取,直接操作内存,速度相当快。若改变数据库的内容,相应改变缓存即可
- 高并发
直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以将数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接操作缓存而不用经过数据库
-
Redis为什么这么快
- 完全基于内存,绝大部分请求是纯粹的内存操作
- 数据结构简单
- 采用单线程,避免的不必要的上下文切换和竞争,不存在多线程切换对CPU的消耗,不考虑锁的问题导致的性能消耗
- 使用多路I/O复用模型,非阻塞IO
-
对比关系型数据库
- RDBMS是关系型数据库管理系统;Redis是非关系型键值数据库
- RDBMS用于持久化存储数据到硬盘;Redis也能持久化,但是主要在缓存领域操作
- RDBMS功能强大,不受文件大小限制;Redis受限于文件大小,数据量不能过大
- RDBMS有完备的恢复丢失数据的能力;Redis宕机会导致部分数据丢失