修改memcached,让memcached主动从数据库读取数据进行缓存

本文介绍了一种在Memcached中实现自动从数据库加载数据的方法,当缓存未命中时,Memcached将自动从MySQL数据库中读取数据并进行缓存,以提高后续请求的响应速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

memcached的一般应用场景是:

1. 应用程序使用get指令根据key来查询cache是否hit

       1.1 如果hit, 则使用缓存的值

2. 如果没有hit, 应用程序查询数据库后再将查询到的内容使用store指令保存到cache中, 方便下次使用.

 

但有的时候需要将memcached作为一个数据库前端使用,

即 当应用程序使用get指令查询某一条entry的时候,如果此时该key不在cache中, memcache主动地读取数据库并写入cache后,保证每次的get指令都能命中。

 

对于这样的应用场景,有很多现成的产品, 比如memcacheDB

 

俺也遇到了这种要求,.Net/JAVA/PHP 的client会连接memcached服务器读取entry, 如果entry不在cache中需要从mySQL数据库中读取后进行一定的逻辑处理后进行缓存。

 

看了半天发现还是直接修改memcached的源代码最方便。

 

http://memcached.org /  下载到 它的源代码一看,结构逻辑非常清晰。

 

核心数据结构是

 

 item通过双向链表进行关联,并挂靠了一个hash结构。 item在保存的时候会根据entry的大小选择slab,这是为了防止内存碎片。

 

在thread.c文件中找到了item_get函数

 

这里,如果没有命中cache的话, do_item_get 返回NULL. 要加入的代码就很简单了

 

要注意的是,从数据库读取到内容后,需要在末尾加上/r/n,因为memcached里面就是这样保存的

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值