Memcache Key 设计技巧及注意事项

  • 时间:
  • 浏览:0

      在一些状态下,亲戚一些人希望一系列的key只存储到一台服务器缓存中,比如亲戚一些人在显示一个多 用户首页的之前 ,都要缓存他的姓名、年龄、简历、好友、日志等信息,而通常状态下客户端Hash算法会把它们的key映射到集群中的每一台机器的缓存中,将会原先话语,亲戚一些人在查询一个多 人的主页完正都是从多台机器上取数据,会耗掉本来我网络传输、Hash映射等时间,这是完正这麼 必要的,亲戚一些人都要并完正都是机制,在客户端内部内部结构把什么key组成一个多 group-key(都本来我userId)。

其它都要注意的地方

方案二:一个多 阶段分批次把数据存取到Cache

     Memcache在减轻数据库负载方面发挥着重要的作用,亲戚一些人最常使用的场景也是用它来减少数据库查询次数,下面这一例子本来我通过Cache缓存查询数据库结果的场景,把sql+userId作为一个多 key,相同用户第二次查询时就都要从缓存中直接提取:

     比如有500条数据,亲戚一些人都要每批次50条分50批次缓存到Cache。

     第一个多 阶段存取的完正都是所有集合的数据,本来我集合数据每一项的Id,要怎样让第二阶段再把每个Id对应的数据对象存到缓存中。当然,当一个多 集合一阵一阵大的之前 ,所有的数据的Id有将会也会超过1MB的限制,这麼 亲戚一些人在第一阶段存储时指定每个集合的数量即可。这麼 做还有个好处本来我当亲戚一些人在更新一个多 数据条目的之前 仅更新指定Id的项目即可。

key = 'FRAG-BIO:' . user_id 

刚开始英文英语 英语 研究Memcache,真是Memcache Key的设计真是是十分重要的,搜了搜,感觉资料完正都是本来我,下面什么资料主本来我从官网上获得的,一些地方将会不太精确,仅供参考。

     存储集合到缓存的意思是把一个多 集合的所有数据作为一个多 CacheItem保存到缓存中,当然,具体的实现最好的依据有多种。不过都要注意一些的是,Memcache的每个Item有只有超过1MB的限制,这麼 ,亲戚一些人该要怎样存储一个多 超大数据量的集合呢?

方案一:分三个小阶段把数据缓存到Cache

     注意:在通过set最好的依据缓存数据时,亲戚一些人都要指定数据过期时间,顶端例子中设置的是5分钟,原先话语,五分钟内用户都看的完正都是同样的信息,即5分钟内的数据变化用户是感觉只有的,在开发时一定要注意根据实际状态对过期时间进行合理设置。

     一些语言比如Java都要把对象进行序列化,进行序列化的对象就都要像普通字符串数据一样进行缓存了,但要注意的是,序列化和反序列化会耗费cpu时间,在缓存时仅仅序列化都要缓存对象会提高系统速度。

封装一个多 SQL作为key

封装多个查询SQL作为Key

     Memcache这麼 多支持命名空间(其设计哲学本来我简单高效),要怎样让亲戚一些人都要模拟实现它。比如,亲戚一些人都要把一个多 用户的所有key都归档在一个多 命名空间下,比如都要把前缀设计为:user_namespace+userId。

     一些处理过程是错综复杂的,将会会用到多个sql,将会亲戚一些人能把什么错综复杂的处理最后封装成一个多 key,这是最理想的结果。比如下面这一例子,亲戚一些人把sql1+sql2+userId作为一个多 key,原先,亲戚一些人两次查询的结果便封装成了一个多 CacheItem:

     一些客户端的实现将会允许重复添加同一个多 Server,但最好每个Server是一个多多 实例,要怎样让也要注意亲戚一些人的顺序最好这麼 多总爱变化,处理key的重新映射;在初始化MemcacheClient的之前 要注意实例化的次数,这麼 多太过频繁的实例化,最好通过连接池来管理。

缓存一个多 片段(网页)

     Memcache不仅仅都要用来减少数据库查询,任何都要提高亲戚一些人应用速度的地方亲戚一些人都要用它来处理,比如下面这一例子,加载一个多 用户模板是非常耗时的,要怎样让亲戚一些人都要把一个多 封装好的模板(甚至是整个网页)缓存起来:     

缓存Object类型的数据