一、缓存的需求
前端页面广告位数据无需每次查询后台系统的接口,可以在前台系统添加缓存,提高访问首页的速度。
电商网站首页左侧商品类目一栏的数据也可以缓存起来,不用每次打开首页都去数据库读取数据,读取数据库IO开销大。
解决方案:使用缓存。
什么是缓存
为什么使用缓存
可以从性能和并发两点进行说明:
性能
我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。
并发
在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。
二、Redis
Redis是Nosql数据库中使用较为广泛的非关系型内存数据库。Redis 是用 C 语言写的。
Redis官网: http://redis.io/
NoSQL:泛指非关系型的数据库(Not Only SQL)。
主流的NoSQL产品有:
Redis的特性
多种数据类型存储存储
- 字符串类型
- 散列类型
- 集合类型
- 有序集合类型
内存存储与持久化
- 内存的读写速度远快于硬盘。
- 自身提供了持久化(RDB、AOF两种方式)
功能丰富
- 可用作缓存、队列、消息订阅/发布。
- 支持键的生存时间。
- 按照一定规则删除相应的键。
为什么要用 redis 而不用 map/guava 做缓存?
缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。