- A+
之前注意到自己博客的wp_options表里边option_id数值越来越大,即使这个表里只有几百个数据,但是id已经排到1万多了,几百和几万之间有很大的空隙,观察之后确认,表里会自送生成瞬态信息,类似_site_transient_update_themes这样有transient字样的数据,它会有一个有效期,过期的话自动删除,之后还会再重新生成,所以导致了id的不连续和数值变大。
id是一个bigint类型的数据,最高19位,虽然id这辈子都用不完,不过有的人强迫症绝对受不了这种情况,比如我,然后开始寻找禁止transient生成的方法。听网友说如果博客开启对象缓存就不会再生成了。经过昨天的摸索,终于在博客成功开启了memcached实现了对象缓存。
后来也对transient有了更多的了解。它是用来缓存一些复杂的 SQL 查询和运算结果的,并且给这些需要缓存的数据一个过期时间,时间一到就会自动删除。虽然这确实可以提高性能,但是禁用或删除插件可能会留下一些旧数据,这可能会对性能产生不利影响。WordPress Transients API 缓存的数据存储在哪里取决于你的服务器,如果服务器开启了memcached这类对象缓存,那么缓存的数据就存Memcached 的内存中。如果没有开启的话,则存储到 WordPress 数据库的 options 表中。
这下也明白了为什么开启了对象缓存就不会再把数据写入options表里了。也了解到了
WordPress 本身提供了一种叫做 WordPress Object Cache 的对象缓存机制,它是把需要缓存的内容按照 Key-Value 这样的模式进行缓存。Key-Value 形式的数据,要远比我们在数据库中查询要快的多。
WordPress有文件缓存,内存缓存,HTML静态缓存三种缓存机制,我使用的memcached则属于内存缓存。内存缓存是把 WordPress 默认的对象缓存的对象保存到内存中去,下一次访问的时候,直接到内存中获取内容,这样就没有了文件缓存的 I/O 操作,并且 SQL 查询也减少了很多,整个系统都能变快很多。
安装Memcached 来实现数据查询的缓存,在启用了 Memcached 缓存后,WordPress 会将在数据库中查询到的数据以对象的形式缓存进入内存中。我们每次访问时,WordPress 就会访问内存中的缓存,将对象读取出来进行页面渲染,可以有效的减少数据库的查询。
本来自己的博客还不准备做缓存,每想到却因为执念顺便就把缓存搞了,也算是不错的收获了。当然,最初的目的也达到了,options表里也不会再生成瞬态数据了。这时需要清理一下之前没用的transient数据了,数据库直接删也行,清理插件清理也可以,我用的是WP-Sweep这个插件,感觉还不错。