Redis 介绍
是一个非关系数据库 它可以存储键与五种不通类型的值之间的银蛇,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能,
数据库与缓存服务器的特性与个功能
名称 | 类型 | 数据与存储选项 | 查询类型 | 附加功能 |
---|---|---|---|---|
Redis | 非关系数据库 | 字符串,列表,集合,散列表,有序集合 | 每种数据类型有自己的专属命令,另外还有批量操作和不完全的事务支持 | 发布与订阅,主从复制(master/slave replication),持久化,脚本(存储过程,stored procedure) |
Memcached | 非关系数据 | 键值之间映射 | 创建,读取,更新,删除命令以及其他几个命令 | 为提升性能而设的多线程服务器 |
Mysql | 关系数据 | 每个数据库可以包含多个表,每个表可以包含多个行;可以处理多个表的视图(view);支持空间(spatial)和第三方扩展 | 支持ACID性质(需要使用InnoDB),主从复制和主主复制 (master/master replication) | |
PostgreSql | 关系数据 | 每个数据库可以包含多个表,每个表可以包含多个行;可以处理多个表的视图;支持空间和第三方扩展;支持可定制类型 | SELECT、INSERT、UPDATE、DELETE、内置函数、自定义的存储过程 | 支持ACID性质,主从复制,由第三方支持的多主复制(multi-master replication) |
MongoDB | 非关系文档存储 | 每个数据库可以包含多个表,每个表可以包含多个无schema的BSON | 创建,读取,更新,删除,条件查询 | 支持map-reduce操作,主从复制,分片,空间索引(spatial index) |
使用Redis的理由
- 速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型
- 丰富的数据类型,Redis有8种数据类型,常用类型 String、Hash、List、Set、 SortSet 这5种
- 有操作都是原子性的,要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 支持 publish/subscribe, 通知, key 过期等等特性。
Redis 数据结构
类型 | 存储的值 | 存储范围 | 应用场景 |
---|---|---|---|
StRING | 字符串,整数,或者是浮点数 | 一个键最大能存储 512MB | 图片 |
LIST | 一个链表,链表上的每个节点都包含了一个字符串 | 列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿) | 最新消息排行等功能(比如朋友圈的时间线) 消息队列 |
SET | 包含字符串的无序收集器,并且被包含的每个字符串都是独一无二 | 集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员) | 共同好友,利用唯一性,统计访问网站的所有独立ip ,好友推荐时,根据tag求交集,大于某个阈值就可以推荐 |
HASH | 包含键值对的无序散列表 | 每个 hash 可以存储 232 -1 键值对(40多亿) | 存储、读取、修改用户属性 |
ZSET | 字符串成员与浮点数分值之间的有序隐射,元素的排列顺序有分值的大小决定 | 同集合 | 1、排行榜 2、带权重的消息队列 |