一:redis定义与应用
Nosql定义:NoSQL是不同于传统的关系数据库的数据库管理系统的统称。其两者最重要的区别是NoSQL不使用SQL作为查询语言。
MySQL定义:MySQL是一种关系型数据库, 关系型数据库的一个常见用法是存储长期的报告数据,并将这些报告数据用作固定时间范围内的聚合数据。
Redis定义: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)、散列(hashes)、 列表(lists)、 集合(sets)、 有序集合(sorted sets)等。
Redis应用对象:微信(微信红包)、微博、淘宝、天猫、京东、唯品会
二、同类型产品对比
- redis,memcached和MySQL三种数据库的对比的区别
|
数据库类型 |
数据存储类型 |
特色功能 |
MySQL |
硬盘持久化 (传统关系型数据库) |
库表类型存储 (库--表--数据行--数据类型) |
支持ACID性质,主从复制 |
Memcached |
内存缓存 (redis出现前的产品) |
K/V存储 (单一key与value类型存储形式(string)) |
高性能多线程服务器 |
Redis |
内存+硬盘持久化 (现代产品) |
多种数据类型 (字符串,列表,集合,散列表,有序集合) |
发布与订阅,主从复制,持久化,动态扩容,脚本操作 |
2.同为内存缓存产品,redis和memcached各自优势:
- 内存管理机制
1) Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块 以存储相应长度的key-value数据记录,以完全解决内存碎片问题。空闲列表进行判断存储状态【类似于Java虚拟机对象的分配,空闲列表】
2) Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片【CPU内存是连续,类似于Java虚拟机对象的分配,直接内存分配(指针碰撞)】
- 数据持久化方案
1)memcached不支持内存数据的持久化操作,所有的数据都以in-memory的形式存储。
2)redis支持持久化操作。redis提供了两种不同的持久化方法来讲数据存储到硬盘里面,
一种是rdb形式, rdb:属于全量数据备份,备份的是数据
一种是aof形式,aof:append only if,增量持久化备份,备份的是指令 [如:set key, del key]
- 缓存数据过期机制 key,在一个小时之后过期,超过一个小时查数据就会查不到 key:"1",value:"2"
1)Memcached 在删除失效主键时也是采用的消极方法,即 Memcached 内部也不会监视主键是否失效,而是在通过 Get 访问主键时才会检查其是否已经失效
2)Redis 定时、定期等多种缓存失效机制,减少内存泄漏
- 支持的数据类型
1)Memcached支持单一数据类型,[k,v],string类型
2)redis支持五种数据类型:字符串,列表,集合,散列表,有序集合
三、redis作为数据库的使用有什么优缺点
1)优点:
没有Scheme约束,数据结构的变更相对容易,一开始确定数据类型,抗压能力强,性能极高,10万/qps
2)缺点:
没有索引,没有外键,缺少int/date等基本数据类型,多条件查询需要通过集合内联(sinter,zinterstore)和连接间接实现, 开发效率低,可维护性不佳
四、redis作为缓存的使用,搭配数据库使用的两种方案
1)jedis整合使用方案: 第一层在缓存进行查询,如果得到数据则直接返回,第二层在数据库进行查询,并且刷新缓存,方便下次查询
2)作为mybatis/hibernate二级缓存使用方案,一级缓存:sqlSession,进程缓存,单次链接有效