飞道的博客

Thinkphp在添加、修改、删除数据时,自动更新Cache缓存的方法

312人阅读  评论(0)

thinkphp使用缓存可以有效提升系统性能,节省数据库操作和内存开支。

简单示例:


  
  1. <?php
  2. use think\ Cache;
  3. if (Cache::has( 'user_data')) {
  4. $users = Cache::get( 'user_data')
  5. } else {
  6. $users = User::where( 'status', 1)->select();
  7. // 缓存用户数据5分钟
  8. Cache::set( 'user_data', $users, 300);
  9. }

上面的代码还可以简化成:


  
  1. <?php
  2. use think\ Cache;
  3. $users = Cache::remember( 'user_data', function(){
  4. return User::where( 'status', 1)->select();
  5. }, 300);

问题来了,上述缓存的时间是5分钟,如果在这5分钟内对user用户表执行了添加、修改、删除等操作,你会发现缓存没有发生改变,网站不能及时获取最真实的数据。那应该怎么办呢?

解决方法:

在执行完添加、修改、删除等操作时,调用Cache::clear(),如下:


  
  1. <?php
  2. use think\ Cache;
  3. public function add(){
  4. try{
  5. User::create([
  6. 'name' => "tom",
  7. 'age' => 18
  8. ]);
  9. } catch (\ Exception $e) {
  10. $this->error( '添加失败');
  11. }
  12. //清理缓存
  13. Cache::clear();
  14. $this->success( '添加成功');
  15. }

补充:清除缓存、模版缓存和日志缓存的方法


  
  1. namespace app\ cache\ controller;
  2. use think\ Controller;
  3. use think\ Cache;
  4. //清除模版缓存不删除cache目录;
  5. public function clear_sys_cache()
  6. {
  7. Cache::clear();
  8. $this->success( '清除成功', 'Index/index');
  9. }
  10. //清除模版缓存但不删除temp目录;
  11. public function clear_temp_ahce()
  12. {
  13. $path = glob(TEMP_PATH . '*.php');
  14. array_map( 'unlink', $path);
  15. //rmdir(TEMP_PATH .'temp/');//删除temp目录
  16. $this->success( '清除成功', 'Index/index');
  17. }
  18. //清除日志缓存并删出log空目录;
  19. public function clear_log_chache()
  20. {
  21. $path = glob(LOG_PATH . '*');
  22. foreach ($path as $item) {
  23. //dump(glob($item .DS. '*.log'));
  24. array_map( 'unlink', glob($item . DS . '*.log'));
  25. rmdir($item);
  26. }
  27. $this->success( '清除成功', 'Index/index');
  28. }

 


转载:https://blog.csdn.net/qq15577969/article/details/114281835
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场