如何用redis/memcache做Mysql缓存层?

目前公司的一个项目,数据库用的是Mysql,正在考虑用redis/memcached做数据库的缓存层,目前的想法就是在读DB前,先读缓存层,如果有直接返回,如果没有再读DB,然后写入缓存层并返回。 不过,要是直接在应用层加入缓存的代码,感觉修改量大,修改维护也麻烦,因此想把应用层和缓存层的代码分开。不知道这种想法正确否?

1.首先明确是不是一定要上缓存,当前架构的瓶颈在哪里,若瓶颈真是数据库操作上,再继续往下看。

2.明确memcached和redis的区别,到底要使用哪个。前者终究是个缓存,不可能永久保存数据(LRU机制),支持分布式,后者除了缓存的同时也支持把数据持久化到磁盘等,redis要自己去实现分布式缓存(貌似最新版本的已集成),自己去实现一致性hash。因为不知道你们的应用场景,不好说一定要用memcache还是redis,说不定用mongodb会更好,比如在存储日志方面。

3.缓存量大但又不常变化的数据,比如评论。

4.你的思路是对的,清晰明了,读DB前,先读缓存,如果有直接返回,如果没有再读DB,然后写入缓存层并返回。

5.考虑是否需要主从,读写分离,考虑是否分布式部署,考虑是否后续水平伸缩。

6.想要一劳永逸,后续维护和扩展方便,那就将现有的代码架构优化,按你说的替换数据库组件需要改动大量代码,说明当前架构存在问题。可以利用现有的一些框架,比如SpringMVC,将你的应用层和业务层和数据库层解耦。再上缓存之前把这些做好。

7.把读取缓存等操作做成服务组件,对业务层提供服务,业务层对应用层提供服务。

8.保留原始数据库组件,优化成服务组件,方便后续业务层灵活调用缓存或者是数据库。

9.不建议一次性全量上缓存,最开始不动核心业务,可以将边缘业务先换成缓存组件,一步步换至核心业务。

10.刷新内存,以memcached为例,新增,修改和删除操作,一般采用lazy load的策略,即新增时只写入数据库,并不会马上更新Memcached,而是等到再次读取时才会加载到Memcached中,修改和删除操作也是更新 数据库,然后将Memcached中的数据标记为失效,等待下次读取时再加载。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小白安全

Freebuf漏斗专栏之代码审计| Axublog前台SQL注入到后台GetShell

0×00 背景 看了cnvd上有师傅发了Axublog 的漏洞,便对该源码进行分析和漏洞复现,在漏洞复现过程发现可以将这些漏洞组合利用从而通过前台SQL...

41070
来自专栏程序猿DD

使用Consul做服务发现的若干姿势

来源:http://blog.bossma.cn/consul/consul-service-register-and-discovery-style/?hms...

1.3K40
来自专栏北京马哥教育

10个方法助你轻松完成Linux系统恢复

在Linux中有一些应用程序可以帮助你保存系统快照。大多数应用程序都是针对于新手的,并不需要高级的Linux操作技巧。我们在这里挑选了10个,你可以从中选择适合...

60550
来自专栏云计算教程系列

Prometheus升级指南

Prometheus是一个基于Metrics的监控系统 ,与Kubernetes同属CNCF(Cloud Native Computing Foundation...

1.4K20
来自专栏生信技能树

用Modules优雅地管理服务器的环境变量

在我管理的基因组学群里,今天有人提出了这样一个问题,如果有多个版本的BLAST,并且都是用conda安装,应该如何调用不同版本的BLAST

18020
来自专栏FreeBuf

一种新型的Web缓存欺骗攻击技术

为了减少WEB响应时延并减小WEB服务器负担,现在WEB缓存技术已经用的非常普遍了,除了专门的CDN,负载均衡以及反向代理现在也会缓存一部分的网页内容。这里我要...

14240
来自专栏IT笔记

Consul+Prometheus系统监控之注册发现

缘起 前面几篇文章分别对系统服务、MySql以及Redis相关软件做了监控预警,但是大家有没有发现,在prometheus.yml里配置需要监听的服务时,我们需...

3.4K60
来自专栏未闻Code

从Workflowy到印象笔记

Workflowy是一个极简风格的大纲写作工具,使用它提供的无限层级缩进和各种快捷键,可以非常方便的理清思路,写出一个好看而实用的大纲。如下图所示。

25020
来自专栏未闻Code

从Workflowy到印象笔记

Workflowy是一个极简风格的大纲写作工具,使用它提供的无限层级缩进和各种快捷键,可以非常方便的理清思路,写出一个好看而实用的大纲。如下图所示。

14610
来自专栏Java技术分享

如何用redis/memcache做Mysql缓存层?

目前公司的一个项目,数据库用的是Mysql,正在考虑用redis/memcached做数据库的缓存层,目前的想法就是在读DB前,先读缓存层,如果有直接返回,如果...

363100

扫码关注云+社区

领取腾讯云代金券