做web,经常会用到key-value的缓存,虽然快,但缓存的维护是个问题,就拿sgementfault举例来说,如果我来做,首页的问题分页就涉及到
1.问题总数缓存
2.每页问题清单缓存
现在管理员删除了一个问题,那么为满足实时性,肯定需要更新缓存
1.问题总数缓存-1
2.每页问题清单缓存如何更新?
当然可以查数据库算出来,是否有这个必要?
这只是个例子,为了说明问题,为了更新一个缓存而造成了另外的数据库查询开销。在实际过程中,我经常用查询条件的组合作为key,这使得我在更新缓存时无从下手(虽然我自己手工维护了一个缓存key的清单,但难免会有遗漏,终归不是好办法)。但如果把缓存的key都定义死,则缓存的使用不是那么灵活。
Adalah disyorkan untuk mengendalikannya seperti ini:
1. Cache jumlah soalan
Rujukan: http://www.php.net/manual/zh/memcache...
2. Bagaimana untuk mengemas kini cache senarai soalan setiap halaman?
Saya tidak terlalu memikirkannya jika saya, saya mungkin akan menggunakan end_id sebagai cap akhir, dan kemudian menambahnya ke hadapan apabila soalan baharu masuk. Ia akan dimuat semula setiap 100+ ringkasan Perkara utama adalah untuk melihat kelantangan tanpa kelantangan, ia tidak akan berfungsi dengan baik (jika keadaan kecil pada mulanya, ia tidak akan menjadi masalah untuk menyegarkan db setiap tiga minit)
1. Adalah baik untuk menggunakan memcache incr/decr yang disediakan oleh @jawa untuk menyimpan jumlah soalan
2. Senarai soalan pada setiap halaman Untuk ini, anda tidak perlu mengekalkan senarai tetapi hanya cache kandungan soalan Senarai itu sendiri boleh disemak dari pangkalan data. Memang bak kata @jawa, bergantung pada kuantiti. Terdapat banyak penyelesaian untuk butiran Terdapat kaedah yang sangat kasar Contohnya, senarai itu sendiri disemak secara langsung daripada pangkalan data seperti yang dinyatakan di atas ulasan pada Sina Weibo diperoleh dua kali dan dipisahkan Perubahan dalam kandungan (kurang) dan perubahan dalam kiraan (kerap)
Tujuan utama menggunakan cache adalah untuk mengurangkan tekanan pada pangkalan data Adalah tidak munasabah untuk mengemas kini cache terlalu kerap.
1. Hentikan prestasi masa nyata dan kemas kini cache apabila data mencapai ambang tertentu yang ditetapkan.
2. Gunakan pengindeksan tambahan masa nyata bagi enjin carian seperti sphinx.