1. 云栖社区>
  2. PHP教程>
  3. 正文

利用wordpress数据库写API,附加文章redis缓存[菜鸡简单粗暴版]

作者:用户 来源:互联网 时间:2017-12-01 10:01:46

数据库api缓存rediswordpress简单文章利用附加

利用wordpress数据库写API,附加文章redis缓存[菜鸡简单粗暴版] - 摘要: 本文讲的是利用wordpress数据库写API,附加文章redis缓存[菜鸡简单粗暴版], 前言: 公司接了个活,于是乎老大给了个任务了,给XX做一个个人的APP,用PHP写API,文章发布系统用wordpress,要求有缓存。 看了一下网上的‘wordpress缓存’主要是针对于web端的插件,个人觉得拿来写到

前言:
公司接了个活,于是乎老大给了个任务了,给XX做一个个人的APP,用PHP写API,文章发布系统用wordpress,要求有缓存。
看了一下网上的‘wordpress缓存’主要是针对于web端的插件,个人觉得拿来写到API中不是很方便,于是乎自己瞎写了一部分。各位看官大牛,欢迎指正,毕竟第一次用wordpress。

环境要求:
1.wordpress
WordPress 4.4.1版本
2.redis缓存
2.8.8
3.系统
Linux iZ25tyupojmZ 2.6.32-220.23.2.al.ali1.1.alios6.x86_64 #1 SMP Sun Jan 4 15:01:53 CST 2015 x86_64
没错就是阿里云的
4.apach
Apache/2.4.10
5.php
5.5.7
6.mysql
没错也是阿里云的, MySQL5.6

开始吧。
就事论事,这里只写涉及到项目的东西。

1.明确目标:
要求请求之后返回一个文章的:标题,摘要,配图(特色图像),发表时间,最后修改时间,内容

2.寻找数据所在表,以及表之间关系
这个还是上图吧,老规矩,用不到的没在图中显示
利用wordpress数据库写API,附加文章redis缓存[菜鸡简单粗暴版]

3.修改源码,记录操作涉及的文章
这里主要是记录文章的操作信息
主要有new,edit,trash,untrash,delete。
使用redis记录
所以在每个需要记录的文件中都要加上

$redis = new redis();$redis -> connect('127.0.0.1', 6379);

记录点:

1.新发表的文章
文件:/wp_admin/post-new.php

在最后的两个include之前添加$new_post_id = $redis->get('new_post');$new_post_id = json_decode($new_post_id);$new_post_id[]  = $post_ID;$redis->set('new_post',json_encode($new_post_id));

2.edit
文件:/wp_admin/post.php

case 'editpost':    ...    // Session cookie flag that the post was saved    if ( isset( $_COOKIE['wp-saving-post'] ) && $_COOKIE['wp-saving-post'] === $post_id . '-check' ) {        setcookie( 'wp-saving-post', $post_id . '-saved', time() + DAY_IN_SECONDS, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, is_ssl() );    }    //增加部分    $editpost_id = $redis->get('editpost');    $editpost_id = json_decode($editpost_id);    $editpost_id[]  = $post_id;    $redis->set('editpost',json_encode($editpost_id));    redirect_post($post_id); // Send user on their way while we keep working    //增加部分    exit();

3.trash
文件:/wp_admin/post.php

case 'trash':    ...    if ( ! wp_trash_post( $post_id ) )        wp_die( __( 'Error in moving to Trash.' ) );    //增加部分    $trash_id = $redis->get('trash');    $trash_id = json_decode($trash_id);    $trash_id[]  = $post_id;    $redis->set('trash',json_encode($trash_id));    //增加部分    wp_redirect( add_query_arg( array('trashed' => 1, 'ids' => $post_id), $sendback ) );    exit();

4.untrash
文件:/wp_admin/post.php

case 'untrash':    ...    if ( ! wp_untrash_post( $post_id ) )        wp_die( __( 'Error in restoring from Trash.' ) );    //增加部分    $untrash_id = $redis->get('untrash');    $untrash_id = json_decode($untrash_id);    $untrash_id[]  = $post_id;    $redis->set('untrash',json_encode($untrash_id));    //增加部分    wp_redirect( add_query_arg('untrashed', 1, $sendback) );    exit();

5.delete
文件:/wp_admin/post.php

case 'delete':    ...    if ( $post->post_type == 'attachment' ) {        $force = ( ! MEDIA_TRASH );        if ( ! wp_delete_attachment( $post_id, $force ) )            wp_die( __( 'Error in deleting.' ) );    } else {        if ( ! wp_delete_post( $post_id, true ) )            wp_die( __( 'Error in deleting.' ) );    }    //增加部分    $delete_id = $redis->get('delete');    $delete_id = json_decode($delete_id);    $delete_id[]  = $post_id;    $redis->set('delete',json_encode($delete_id));    //增加部分    wp_redirect( add_query_arg('deleted', 1, $sendback) );    exit();

记录点设置好之后就可以开始写API了

5.API
来个结构图吧
利用wordpress数据库写API,附加文章redis缓存[菜鸡简单粗暴版]
其实这里已经脱离wordpress了,只是用了wordpress的数据。

具体的代码就不贴上了,无非是这么几个操作
缓存操作:
redis->get
redis->set
json_decode
json_encode
数据库操作:
SELECT xx FROM xxx WHERE xx = xx
对,你没看错,就是query查询语句。

OK,结束。


说一些自己的不足,因为第一次使用wordpress,所以对源码了解不多,
在更新缓存中的文章时候,只用缓存记录了更新的ID,并没有记录这篇文章所属的栏目,所以每次更新,就更新所有的栏目。
也是因为没有设置记录栏目的id,所以更新其实就是从数据库中获取所有的数据,或者说是重写缓存,而不是修改缓存。
贴一下代码吧- -。。不知道说的,各位能不能看懂

    class api{        public function getPostsCache($term_id){            $trash = json_decode($this->redis->get('trash'));            $untrash = json_decode($this->redis->get('untrash'));            $edit = json_decode($this->redis->get('editpost'));            if (sizeof($trash)+sizeof($edit)+sizeof($untrash) >0) {                //用来记录操作的数组,若长度大于0,说明数据被修改过                $this->updateCache();            }            $data = $this->redis->get('post_' . $term_id);            $data = json_decode($data,TRUE);            return $data;        }        public function updateCache(){            $TERM_ARRAY = $this->TERM_ARRAY;//数组记录了所有栏目的term_id            foreach ($TERM_ARRAY as $key => $value) {                $this->rewriteCache($value);            }        }        public function rewriteCache($term_id){            $this->redis->del('trash');            $this->redis->del('untrash');            $this->redis->del('editpost');            $this->getPostsDB($term_id);//从数据库获取数据        }    }

更新缓存这里,写的挺渣的,希望有大牛可以指正,先谢为敬

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据库 , api , 缓存 , redis , wordpress , 简单 , 文章 , 利用 , 附加 ,以便于您获取更多的相关知识。