Redis
redis介绍
Redis是一个开源的,内存中数据结构储存系统,它可用作数据库、缓存和消息中间件。它支持多种类型的数据结构String、List、Set、Sorted Set、Hash。
redis的特点
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
redis的数据类型
- String 最基本的数据类型,二进制安全的字符串。
- List 按照添加顺序保持顺序的字符串列表。
- Set 无序的字符串集合,不存在重复元素。
- Sort Set 已排序的字符串集合。
- Hash key/value对的一种集合。
redis是单线程
- redis是单进程单线程的,redis利用队列技术将并发访问变为串行访问,消除了传统数据库控制的开销
- 多线程处理会涉及到锁,而且多线程处理会涉及到线程切换而消耗cpu。因为cpu不会是redis的瓶颈,redis的瓶颈最有可能是机器内存或者网络带宽。
redis优势
- 速度快,因为数据存储于内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)。
- 支持丰富的数据类型,支持string,list,set,sorted set,hash
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
- 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
redis与memcached比较
memcached所有的值均是简单的字符串,reids作为其替代者,支持更为丰富的数据类型
redis的速度比memcached快很多
redis的速度比memcached快很多
Redis支持数据的备份,即master/slave模式的数据备份
redis的持久化方式
RDB持久化
原理是将Redis在内存中的数据记录定时dump到磁盘上的RDB文件,指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
AOF(append only file)持久化
原理是将redis的操作日志以追加的方式写入文件。以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。当服务器重启的时候会重新执行这些命令来恢复原始的数据。AOF命令以redis协议追加保存每次写的操作到文件末尾。redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
redis两种持久化方式比较
RDB持久化
- 优点: RDB文件紧凑,体积小,网络传输快,适合全量复制;恢复速度比AOF快很多。当然,与AOF相比,RDB最重要的优点之一是对性能的影响相对较小
- 缺点:RDB文件的致命缺点在与其数据快照的持久化方式决定了必然做不到实时持久化,而在数据越来越重要的今天,数据的大量丢失很多时候是无法接受的,因此AOF持久化称为主流。此外,RDB文件需要满足特定格式,兼容性差。
AOF持久化
- 优点:与RDB持久化相对应,AOF的优点在于支持秒级持久化、兼容性好
- 缺点:文件大,恢复速度慢,对性能影响大
redis常用的使用场景
- Session共享
- 页面缓存
- 队列
- 排行榜/计数器
- 发布/订阅