什么是NOSQL
NoSQL是不同于传统的关系数据库的数据库管理系统的统称。其两者最重要的区别是NoSQL不使用SQL作为查询语言。
NoSQL数据存储可以不需要固定的表格模式。NoSQL是基于键值对的,可以想象成表中的主键和值的对应关系。
NoSQL:redis、memcached、mongodb、guava(loadingCache)
什么是Redis
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)、散列(hashes)、 列表(lists)、 集合(sets)、 有序集合(sorted sets)等。
从mysql出发来认识redis
概念
关系型数据库的一个常见用法是存储长期的报告数据,并将这些报告数据用作固定时间范围内的聚合数据。
收集聚合数据的常见做法是:先将各个行插入一个报告表里面, 之后再通过扫描这些行来收集聚合数据, 并更新聚合表中巳有的那些行。
图解redis为什么出现
详细图解
查询优化器:join,left join,子查询,依赖子查询进行复杂sql及排序的优化。
Redis和memcached和mysql之间的区别
redis和memcached各有什么优势
内存管理机制进行比较
Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块 以存储相应长度的key-value数据记录,以完全解决内存碎片问题。空闲列表进行判断存储状态。
Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片。
优先查找那块内存是空闲的,找到则分配。【cpu内存连续的,java虚拟机的内存分配类似于redis,直接内存分配(指针碰撞)】
数据持久化方案比较
memcached不支持内存数据的持久化操作,所有的数据都以in-memory的形式存储。
redis支持持久化操作。redis提供了两种不同的持久化方法来讲数据存储到硬盘里面
- rdb:属于全量数据备份,备份的是数据
- aof:append only if,增量持久化备份,备份的是指令 [如:set key, del key]
缓存数据过期机制比较
Memcached 在删除失效主键时也是采用的消极方法,即 Memcached 内部也不会监视主键是否失效,而是在通过 Get 访问主键时才会检查其是否已经失效。
Redis 定时、定期等多种缓存失效机制,减少内存泄漏
支持的数据类型
Memcached支持单一数据类型,[k,v]
redis支持五种数据类型。
redis作为数据库和作为内存缓存的两种使用方法
redis作为数据库的使用有什么优缺点
优点
- 没有Scheme约束,数据结构的变更相对容易,一开始确定数据类型
- 抗压能力强,性能极高,10万/qps
缺点
- 没有索引,没有外键,缺少int/date等基本数据类型,
- 多条件查询需要通过集合内联(sinter,zinterstore) 和连接间接实现
- 开发效率低,可维护性不佳
redis作为缓存的使用,搭配数据库使用的两种方案
- jedis整合使用方案 set key,value ["11","22"] 第一层在缓存进行查询,如果得到数据则直接返回, 第二层在数据库进行查询,并且刷新缓存,方便下次查询 ["33,"44"]
- 作为mybatis/hibernate二级缓存使用方案,一级缓存:sqlSession,进程缓存,单次链接有效。
图解分析加redis前后的架构区别