memcached的学习(12)

2018.6.20
之前有了解过memecached为上层的应用客户端提供了几种最基本的操作,这些操作就是kv常见的增删改查操作,这些操作包装在对缓存操作的之上,即用户可以下发这几类操作,不同操作在memecached中对缓存进行不同的处理。这些处理也是调用LRU缓存替换算法的开始。

1、首先给出memcached常见增删改查的命令集:

增:set
删:delete
改:add/replace/append/prepend
查:get

2、下面对这四类操作进行简单的流程分析,首先是增加操作

所有的操作都是从状态机获取命令阶段开始的,首先是:
在这里插入图片描述
然后跳转到解析命令状态
在这里插入图片描述
解析完命令之后,调用命令执行函数
在这里插入图片描述
将对应的命令集进行区分,是上面的哪一类操作
在这里插入图片描述
我们这里分析增加操作set,那么调用的就是process_update_command,只要是更新操作首先都会直接创建一个新的item,
在这里插入图片描述
创建完一个新的item后,由于memecached操作都是按行去取数据,然后取value值,从socket缓冲区中再去取value值,然后放在新分配item中,
在这里插入图片描述
当value数据读取完成之后,调用读取完成函数,这个函数完成实际数据在缓存中的存放
在这里插入图片描述
完成读函数中,调用存储数据函数store_item,这个函数完成实际新增加数据的缓存
在这里插入图片描述
对于增加set操作,无论缓存中是否有老的数据,都会创建新的数据取替换,首先找到旧的数据
在这里插入图片描述
判断是否存在有旧的数据,如果有旧的数据就进行替换操作,将旧的直接替换,如果没有新的数据,则直接将新的item插入到LRU中即可
在这里插入图片描述
进行替换操作,替换的数据,首先将旧数据从LRU链表上删除下来,然后将新的数据加入到LRU链表
在这里插入图片描述
注意所有的操作,都是同时操作哈希桶和LRU链表
在这里插入图片描述
插入新的item,同时要将引用计数+1
在这里插入图片描述
最后,巧妙的地方是,在增加操作完成之后,调用了删除操作,这样的目的是检查引用计数,如果增加操作成功,那么引用计数>0.那么这个时候是不会用删除的,如果增加操作失败,那么需要把之前分配新的item删除掉。至此,增加操作完成。

3、删除操作的过程,这里不去分析前面获取的命令的过程,和增加操作是一样的,直接取看删除操作的过程:

在这里插入图片描述
删除操作,首先根据key值去缓存中找数据
在这里插入图片描述
找到了数据进行实际的删除操作,没有找到数据则返回没有找到
在这里插入图片描述
找到了数据,首先进行LRU和hash表的删除操作
在这里插入图片描述
然后通过引用计数,去判断数据块是否没有其他线程使用,没有则直接删除
在这里插入图片描述
注意:这里存在的问题是,将数据从LRU表删除了,但是没有被释放,那么其他进程怎么找得到这个数据块呢?原因是这里的LRU链表和传统的不一样,每一个用户都设置了一个LRU链表,自己维护,当前进程不用了直接从LRU删除即可,不用管其他的用户,其他用户有自己独立的LRU。

4、改变操作和之前的增加操作很像,只是add这一类操作,数据存在才返回成功,数据不存在返回失败

在这里插入图片描述
如果存在数据,那么更新数据会失败,但是会更新对应数据块的时间,并改动LRU链表
在这里插入图片描述
如果不存在数据,那么可以去执行add操作,将新的数据加入到LRU中,和SET命令一样
在这里插入图片描述

同样对于剩余几种更新操作,也是分为两种,一种是缓存中存在数据怎么操作,一种是缓存中不存在数据怎么操作,下面来具体分析:
缓存中存在数据:
在这里插入图片描述
替换新的数据,想旧的数据数据copy到新的数据块上进行合并,加入到LRU链表中
缓存不存在数据,和前面的add操作一样:
在这里插入图片描述
最后,为了防止操作失败,调用引用删除函数,失败的item会被直接删除
在这里插入图片描述

5、查找操作,之前已经有分析了, 这里就不在分析了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值