二次元之男吧 关注:16贴子:1,421
  • 11回复贴,共1

[memcache]分布式缓存memcache的一次开发体验

只看楼主收藏回复

memcache是一个高性能的分布式缓存系统,读写性能远超DBMS。他的本质其实是一个运行在服务器的socket程序,缓存在内存中以HashMap<String, Object>的形式存放。
其中,缓存的key不能超过255字节,value大小不能超过1mb。
正如上面所说memcache数据都是在内存中缓存,不能持久化,所以一旦memcached.exe进程挂掉,就会导致所有的缓存失效。
memcache的部署:下载memcached.exe文件,上传到服务器,然后在cmd中进入存放目录
使用memcached -d install安装memcached服务。
使用memcached -d uninstall卸载memcached服务。
使用memcached -p portNo -m memSize -d start 启动服务并指派最大内存和端口。


IP属地:广东1楼2015-11-03 22:33回复
    如果memcached内存吃满了,则在LRU原则下更新缓存。
    过期的判断是在get时候才判断,而不是专门的线程去跑。
    使用memcached客户端的时候,根据key的hashcode对服务器个数取余,结果就是服务器的序号,将value写入对应服务器。
    另外,memcached.exe不分32位64位。


    IP属地:广东3楼2015-11-03 22:43
    回复
      查看memcached运行状态:
      telnet 192.168.0.20 11211
      然后在telnet客户端中输入stats


      IP属地:广东4楼2015-11-03 22:44
      回复
        如前面所言,memcached存放KV键值。
        我在存放key的时候,key由数据库id+对象类名+对象Id拼接
        存放列表的时候,value实际存放的是对象id拼接起来的字符串
        所以通过memcached获取列表缓存的做法是
        先通过列表的key获取对象列表的id集合,然后切割数组
        再调用get(String[] ids);这个方法获取对象数组。
        对象更新的时候,先更新kv缓存
        在更新列表缓存中的id


        IP属地:广东5楼2015-11-03 22:47
        收起回复
          另外说一点,memcached本身是没有安全策略的,目前的做法是web服务器和缓存服务器在同一内网,然后安全软件对缓存服务器的端口设置白名单


          IP属地:广东来自Android客户端6楼2015-11-13 23:43
          收起回复
            命中:4600W+
            miss:6600W+
            内存:196360K
            经常丢失LIST缓存


            IP属地:广东7楼2015-11-27 14:24
            收起回复


              IP属地:广东8楼2015-12-04 09:32
              收起回复
                补充2楼,不知道为什么搜不到这个键,提供一下路径手动查找


                IP属地:广东9楼2016-10-27 15:03
                回复