zoukankan      html  css  js  c++  java
  • php缓存生成及更新实现参考哦

    <?php
    //如果在find/findAll里传入了参数,则该参数即为key
    ORM::factory('article')->where('user_id', '=', '2')->and_where('created', '>', time() - 86400)->findAll(2);
    
    //上面的代码会在Model内部生成一个结构化的字符串,该字符串及对应的值将被放入缓存中
    {table_name}-{key}-{md5(sql)}
    //类似这样
    article-2-c81e728d9d4c2f636f067f89cc14862c
    //如果没有传参数,{key}就不会被替代
    article-{key}-c81e728d9d4c2f636f067f89cc14862c
    
    //首次执行此代码时,ORM内部会先去缓存中找上面的结构化字符串,没有找到,就会执行SQL语句,然后把返回的结果的id放到缓存中
    //这就是要放到缓存中的数据,下次如果再执行此SQL,直接从缓存中获取id(1,43,50),然后再从缓存中获取这些id对应的行内容
    //注意到这里有个revision,这是将来要判断该缓存是否已过期的关键。
    'article-2-c81e728d9d4c2f636f067f89cc14862c' => array(
    	'revision' => 1294476790,
    	'data' => [1, 43, 50],
    );
    
    //同时还会生成另一组数据,就是revision
    'article-2-revision' => 1294476777,
    
    //如果作者又更新了一篇博客,则上面的查询语句结果就发生了变化。
    ORM::factory('article')->values(array(...))->save(2);
    
    //ORM会找到缓存中的一组revision数据,同时更新它
    'article-2-revision' => 1294476888,
    
    //如果没有提供key,那就是
    'article-{key}-revision' => 1294476888,
    
    //下次再执行上面的ORM查询代码时,会先去查找'article-2-revision'的版本,然后跟'article-2-c81e728d9d4c2f636f067f89cc14862c'的版本号比较,如果前一个版本号>后一个版本号,表示数据有改变,缓存已过期,这时就需要重新执行SQL语句,并更新'article-2-c81e728d9d4c2f636f067f89cc14862c'这个字符串的版本号。如果比较结果是前一个版本号<=后一个版本号,那就直接从缓存中读取。
  • 相关阅读:
    hadoop节点的增删
    hadoop集群搭建
    主从配置
    CentOS7ssh互信
    Java根据视频的URL地址,获取视频时长
    Mybatis-plus使用@Select注解使用IN查询不出数据的问题
    洗牌算法
    1525
    SpringBoot+Quartz+MySQL实现分布式定时任务
    微信小程序授权登录解密失败问题
  • 原文地址:https://www.cnblogs.com/MRPUNK/p/3366459.html
Copyright © 2011-2022 走看看