0
点赞
收藏
分享

微信扫一扫

Spring(三)

爱动漫建模 04-14 11:30 阅读 1

一、缓存的作用和分类

        缓存可以减少数据库的访问压力提升整个网站的数据访问速度改善数据库的写入性能。缓存可以分为两种:

        缓存在应用服务器上的本地缓存:访问速度快,但受应用服务器内存限制

        缓存在专门的分布式缓存服务器上的远程缓存:访问速度慢,但内存不受限制

二、常见的缓存技术

        MemCache:是一个高性能的分布式内存对象缓存系统,用于动态网络应用以减轻数据库负载。Memcache在内存内维护一个统一的巨大的hash表,数据存在hash表中。

        Redis:是一个开源的使用ANSI C语言编写、支持网络、可给予内存亦可持久化的日志型、Key-Value数据库,支持多种数据类型(key-value,list,set,string,对象等),并提供多种语言的API。

        Squid:Squid是一个高性能的代理缓存服务器,支持FTP,gopher,HTTPS和HTTP协议

        Redis和Memcache对比:

MemcacheRedis
数据类型简单的key/value结构丰富的数据结构
持久性不支持支持
分布式存储客户端哈希分片/一致性哈希主从、哨兵、集群
多线程支持5.0以后的版本支持
内存管理似有内存池/内存池
事务支持不支持有限支持
数据容灾不支持,掉电消失支持

三、缓存与数据库一致性方案

        数据的读取:

                  1. 根据key从缓存中读取数据;

                2. 若缓存中存在,则返回数据;

                3. 若缓存中不存在,则从数据库中读取,并将数据写入缓存 

        数据的插入/更新/删除:

                1. 先操作数据库中的数据内容

                2. 根据操作更新相应缓存中的内容

四、缓存常见问题

        一、缓存雪崩:

                原因大部分缓存同时失效,导致大量数据请求访问数据库,造成数据库崩溃

                解决方案1. 使用队列或锁,保证不会有大量线程对数据库进行高并发的读写

                                   2. 为缓存设置不同的过期时间,固定数值+随即数值

                                   3. 多级缓存,设置失效事件不同的缓存                                

        二、缓存穿刺:

                原因:查询数据库与缓存中都不存在的数据,造成性能浪费

                解决方案:1. 当数据库中的结果为空时,在缓存中加入默认值。

                                   2. 设置布隆过滤器:将所有可能存在的值放入一个bitmap中。

                布隆过滤器介绍:

                        布隆过滤器用于快速识别一个元元素是否在集合中,通过一个长二进制向量和一系

                列随机映射函数记录和识别某个数据是否在一个集合中。

优点缺点

1. 占用内存小

2. 查询效率高

3. 不存储数据本身,数据安全性好

1. 有一定的误判性

2. 一般情况下不能从中删除元素

3. 不能直接获取需要的数据

        三、缓存预热:

                系统启动后,将相关的缓存数据世界加载到缓存系统中。

                实现方案:

                        1. 编写相关的接口或页面

                        2. 数据量不大时,在项目启动后加载数据

                        3. 定时任务刷新缓存

        四、缓存更新:

                1. 定时清理过期缓存

                2. 根据用户操作,将过期的请求更新到缓存中

        五、缓存降级:

                  降级的目的是保证核心服务的可用,通过记日志等方式,将优先级不高的操作记录

五、Redis的相关介绍

        1. Redis支持的数据类型

                String,Hash(字典),List,Set, Sorted Set(有序集合)

        2. Redis数据的淘汰策略

类型策略实现方式
不淘汰noeviction数据不过期,当内存不足时,写入操作报错
设置了过期时间的键空间volatile-random随即删除某个key
volatile-lru优先移除最近没使用过的key
volatile-ttl优先移除剩余生命周期最短的key
全键空间allkeys-random随即删除某个key
volatile-lru优先移除最近没使用过的key

        3. Redis持久化实现方式

                RDB方式:传统数据库中快照的思想,指定时间间隔将数据进行全量备份

                AOF方式:传统数据库中日志的思想,把每条改变数据集的指令追加到AOF文件中

纬度RDB持久化方案AOF持久化方案
备份量重量级的全量备份,整个数据库数据轻量级的增量备份,一次只保存一个操作指令
间隔时间较长较短,默认1秒
还原速度
备份事阻塞情况save会阻塞,bgsave不会不会
备份文件大小小,只有备份时刻的数据大,包括每次操作的指令
安全性低,备份间隔长,容易丢失数据高,备份间隔短,数据精确

        4. Redis分布式存储方式

                主从模式:一主多从,主节点写数据,从节点度数据,主节点故障时手动切换

                哨兵模式:有哨兵的一主多从,哨兵对节点进行健康监控,主节点故障时自动通过选举

        的方式选择新的主节点

                集群模式:分节点对等集群,分slots,不同slots的信息存储到不同的节点

        5. Redis数据切片方案

分片方案分片方式举例
范围分片按数据分为进行分配,如key值的范围如0-999一组,1000-1999一组
哈希分片通过对值进行hash运算后分片hash后的结果对节点数量取余,对取余结果进行分组
一致性哈希哈希分片的升级有利于节点扩展和删除,解决数据在节点上分布不均与

        一致性哈希的实现方式:

                1. 将存储节点抽象成一个环形,每个节点都有对应的值

                2. 对数据进行哈希运算,按顺时针方向将其映射到离其最近的节点上去

                3. 当有节点出现故障离线时,按照算法的映射方法,受影响的仅仅为环上故障节点开始

        逆时针方向至下一个节点之间区间的数据对象

                4. 当有节点插入式,按照算法的映射方法,受影响的仅仅为环上新节点开始逆时针方向

        至下一个节点之间区间的数据对象

举报

相关推荐

0 条评论