Redis 学习笔记 一 什么时候用缓存
本节开始,我就准备对redis的每个分支做具体的笔记阐述。这里我们都已经很熟练的使用缓存了。但是有没有想过,为啥用缓存,什么时候用缓存,常见的缓存有哪些?
1.为啥用缓存
在没有缓存的时候,我们一般的前端接口查询都是直接通过后台查数据库把数据返回给前台。我们知道一次sql 的io交互是比较耗性能的。当我们处于高并发的状态下查询数据瓶颈就在于sql查询这里,而且对该表有插入或者更新的时候也会对该资源进行锁定。
简单的说计算机系统分为如下三层结构:
- cpu,1-32MB 20-40ns
- 内存,32-96GB 100ns
- 磁盘,1-4TB 3-5ms
可见访问速度最快的是cpu,但是他的存储空间也是最小的。根据二八定律,在整个存储数据中大概只有20%的数据是我们频繁访问的,80%的数据甚少或者极少访问。因此我们只需要保证20%的数据做到快速访问就可以了。
因此缓存的目的,保证少数频繁被访问的数据快速被读到。避免每次被磁盘拖累。
2.什么时候使用缓存
刚刚说过,缓存的目的是保证20%频繁访问的数据快速的被读取出来。如果缓存和数据在同一层面,那么20%的数据和80%的数据查询没啥区别了。如果缓存放在数据的后面,我们的术语叫着持久化。因此缓存放置于业务数据的前面。
3.常见的缓存有哪些
-
MemCached
-
redis
性能 MemCached Redis 存储方式 物理内存,当重启后所有数据会丢失,需要重新加载缓存。 基于内存,RDB,AOF持久化的方式 数据结构 KEY-VALUE的形式,可以缓存图片,视频等 string,hash,list,set,sortedset,bitmap,geo等丰富的数据结构 集群 服务器并不具有分布式功能,取决于客户端。 哨兵模式检查主从节点的活性,Cluster集群模式,海量数据的高并发高可用场景。使用hashslot算法 缓存策略 可以指定失效时间,默认永久,采用LRU缓存策略 一共有八种策略:不淘汰的,设置过期时间的(volatile-random,volatile-ttl,volatilte-lru,),全局数据的(allkeys-lru,allkeys-random,allkeys-lfu)