redis
什么是缓存
高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。就是为了提高访问效率,将数据放在快速存储器中,也就是内存中.
缓存分类:
JVM缓存和Nosql缓存
JVM缓存:
Mybatis和Hibernate底层二级缓存使用的是OSCache,EhCache。属于JVM内置缓存,比如Session缓存,Mybatis默认使用OSCache,Hibernate默认使用EhCache。都是可以配置的。
OSCache:针对JSP页面缓存(一般用于),Mybatis使用OSCache
EhCache:针对数据库访问层缓存
缺点:内存溢出,没有持久化机制,分布式下数据共享
Nosql缓存:
NoSQL 是 Not Only SQL 的缩写,意即"不仅仅是SQL"的意思,泛指非关系型的数据库。强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。
NoSQL产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能
NoSQL产品 redis,Membase,mongodb ,HBase
mongodb对数据的操作大部分都在内存中。但mongodb并不是单纯的内存数据库。甚至个人认为不属于内存数据库。相反,redis就是一个不折不扣的内存数据库了,mysql一个不折不扣的硬盘数据库。
Redis
什么是Redis
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
(Redis的存储是以key-value
的形式的。Redis中的key一定是字符串,value可以是string、list、hash、set、sortset这几种常用的。)
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
回答:非关系型内存数据库,效率比IO数据库高,主要作用是减轻数据库访问压力。
可以发现这不就是Java的Map容器所拥有的特性吗,那为什么还需要Redis呢?
- Java实现的Map是本地缓存,如果有多台实例(机器)的话,每个实例都需要各自保存一份缓存,缓存不具有一致性
- Redis实现的是分布式缓存,如果有多台实例(机器)的话,每个实例都共享一份缓存,缓存具有一致性。
- Java实现的Map不是专业做缓存的,JVM内存太大容易挂掉的。一般用做于容器来存储临时数据,缓存的数据随着JVM销毁而结束。Map所存储的数据结构,缓存过期机制等等是需要程序员自己手写的。
- Redis是专业做缓存的,可以用几十个G内存来做缓存。Redis一般用作于缓存,可以将缓存数据保存在硬盘中,Redis重启了后可以将其恢复。原生提供丰富的数据结构、缓存过期机制等等简单好用的功能。
Redis应用场景
主要能够体现 解决数据库的访问压力。
例如:短信验证码时间有效期,session共享解决方案,Token
安装Redis