博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
memcached(十三)注意事项
阅读量:4873 次
发布时间:2019-06-11

本文共 1530 字,大约阅读时间需要 5 分钟。

  一些使用上遇到过的问题。

 

  • mc key限制。 长度限制250;不能有空格中文
  • mc超时时间设置。过大,会表现为set进去成功, 但get不出来。如果mc有打印verbose级日志的话会显示超时:
<34 set 111 0 8640000 3> NOT FOUND 111<35 get 111> FOUND KEY 111 -nuked by expire

原因是:

Expiration times can be set from 0, meaning "never expire", to 30 days. Any time higher than 30 days is interpreted as a unix timestamp date. If you want to expire an object on january 1st of next year, this is how you do that.

see:

原来,mc范围类型的时间,最大是设置为30天了(设置的时候要改为秒,也就是60*60*24*30秒)。超过这个值,就当做是unix 时间戳类型的时间。

一般时间戳类型的时间用得不多,mc最大时限设置为1个月,或者0就好了。

 

  • 单点雪崩问题。假设线上只有1台MC。忽然之间这台MC挂了。然后所有的请求都跑到数据库中去了。导致整个系统极慢甚至挂掉。就算此时立即恢复mc,mc重启了但是数据都没了。照样跑到数据库,导致挂掉。所以,线上环境要使用多台mc跑一致性hash。并且监控好mc的情况(使用率如何、是否在跑LRU了)
  • 使用率问题。根据slab allocator的原理。存放一个item的空间是已经分配好的。必定有浪费的情况(比如说set一个字符串到mc中, 这个字符串需要100b的空间,会把这个字符串放到128b大小的slab中)。这相差的28b就是被浪费掉的了。见do_item_alloc方法调用slabs_clsid:
unsigned int slabs_clsid(const size_t size) {    int res = POWER_SMALLEST;    if (size == 0)        return 0;    while (size > slabclass[res].size)        if (res++ == power_largest)     /* won't fit in the biggest slab */            return 0;    return res;}

一般来说,都要比起评估的值大40%左右(本来评估要1G内存,可能就要申请到1.4G内存了)一个系统要申请多大的mc,需要根据实际情况评估mc的量。

 

  • 版本号问题。一个详情页的页面用行缓存,把请求从数据库拦截掉。key是post_1。原来存放的结构:
    {    "title": "测试",    "id": 1}

    后来版本迭代。增加了一些属性:

{    "title": "测试",    "id": 1,    "content": "test aaaaaaa"}

此时,如果key还是post_1的话,就有可能序列化失败从而抛异常。这种问题在研发、测试环境不容易出现,但是线上出现就麻烦了。要网维一个个的处理这种mc key,甚至直接flush_all整个mc。所以出现这种版本迭代要改变缓存结构的情况。一般增加版本号。比如说把key修改为:post_v2_1。

 

转载于:https://www.cnblogs.com/ELMND/p/4631195.html

你可能感兴趣的文章
ITerms2在mac系统下的安装和配色,并和go2shell关联
查看>>
unity, copy-paste component
查看>>
nginx常见面试题1
查看>>
小白用shiro(1)
查看>>
微服务化之无状态化与容器化
查看>>
动态规划LeetCode174地下城游戏
查看>>
(十二)文件处理基础
查看>>
ubuntu 下更改分辨率
查看>>
Java 并发专题 : Semaphore 实现 互斥 与 连接池
查看>>
null值经过强转会怎样?
查看>>
Sharepoint学习笔记—Debug&TroubleShooting--Developer Dashboard的使用(3.向Assert and Critical Events段插入信息)...
查看>>
Sharepoint学习笔记—习题系列--70-573习题解析 -(Q147-Q150)
查看>>
Sublime Text 报“Pylinter could not automatically determined the path to lint.py
查看>>
Vue基础汇总
查看>>
[小技巧] gcc 编译选项-###
查看>>
0513课堂01 数组,数学函数,时间函数
查看>>
grunt对象之api
查看>>
《驻足思考》笔记
查看>>
全网最详细的Windows系统里PLSQL Developer 64bit的下载与安装过程(图文详解)
查看>>
Spark MLlib回归算法LinearRegression
查看>>