1. Redis简介
Redis:REmote DIctionary Server(远程字典服务)。
Redis是一个速度非常快的非关系型数据库,它可以存储键与5种不同类型值的之间映射,可以将存储在内存中的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。
Redis 非常快,每秒可执行大约 110000 次的设置(SET)操作,每秒大约可执行 81000 次的读取/获取(GET)操作。
2. Redis与其他主流数据库对比
名称 | 类型 | 数据存储选项 | 查询类型 | 附加功能 |
---|---|---|---|---|
Redis | 内存非关系型数据库 | 字符串、列表、集合、散列表、有序集合 | 不同数据类型对应不同查询命令,有批处理命令及事务支持 | 发布订阅、主从复制、持久化 |
MongoDB | 硬盘非关系型文档数据库 | 可以存储多个表,每个表存储多个bson文档 | 增删改查 | 主从、分片、空间索引、map-reduce |
memcached | 内存缓存 | 键值映射 | 增删改查 | 多线程 |
MySQL | 关系型数据库 | 表、单表多行,多表视图等 | 增删改查 | 支持ACID(事务)、主从/主主复制 |
同Java中Map比较:
- Java实现的Map是本地缓存,如果有多台实例(机器)的话,每个实例都需要各自保存一份缓存,缓存不具有一致性
- Java实现的Map不是专业做缓存的,JVM内存太大容易挂掉的。一般用做于容器来存储临时数据,缓存的数据随着JVM销毁而结束。
- Map所存储的数据结构,缓存过期机制等等是需要程序员自己手写的。
3. Redis的五种数据类型
类型 | 值 | 读写能力 |
---|---|---|
string | 字符串、整数、浮点数 | 常用字符串操作、自增、自减 |
list | 链表、可重复 | 从链表两端推入弹出元素、trim、读取单个多个元素、根据值查找移除 |
set | 集合、不可重复 | 添加、获取、移除、检查是否存在、交集并集差集、随机获取 |
hash | 键值对无序散列表 | 添加、获取、移除、获取所有键/值 |
zset | 有序集合(值和分值的映射)、不可重复 | 添加、获取、移除、根据分值范围获取元素 |
4. Redis事件处理器
-
文件事件,Redis开发了自己的网络事件处理器,这个处理器被称为文件事件处理器
事件处理
redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。
文件事件处理器的结构包含 4 个部分:多个 socket 、IO 多路复用程序、文件事件分派器、事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
Redis进程-
时间事件:周期性事件 定时事件
- 更新服务器的统计信息(时间、内存占用、数据库占用)
- 清理数据库的过期键值对
- AOF、RDB持久化
- 如果是主从服务器,对从服务器进行定期同步
- 如果是集群模式,对进群进行定期同步和连接
5. 使用Redis的理由
- 5种数据结构,且操作方便
- 内存存储,速度快
- 可持久化
- 可扩展(主从复制、分片)
可是我偏偏就是不想要转弯 就算不开灯的房间真的有些暗
网友评论