缓存预热脚本

本文提供了一个PHP编写的缓存预热脚本示例,旨在防止内存缓存雪崩后数据丢失,减轻MySQL服务器压力。脚本连接MySQL和Redis,预热用户列表前五页的数据,通过设置版本号确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[php]  view plain  copy
  1. <?php  
  2.   
  3. # 缓存预热  : 在内存缓存雪崩之后,如果没有做持久化的话,  
  4. # 会导致内存的所有数据丢失,导致MYSQL服务器压力过大,导致宕机,为了解决这个问题,需要准备一个  
  5. # 预热脚本  
  6. header( 'content-type:text/html;charset=utf-8' );  
  7. $mysql_obj = new mysqli(  
  8.     '127.0.0.1',  
  9.     'root',  
  10.     '',  
  11.     'yii_shop'  
  12. );  
  13.   
  14. $redis_obj = new Redis();  
  15.   
  16. # content connect  
  17. $redis_obj -> connect( '127.0.0.1' , '6379' );  
  18.   
  19. $redis_obj -> auth('likang');  
  20.   
  21. $mysql_obj -> query( 'set names utf8' );  
  22.   
  23. # 预热用户列表前五页的数据  
  24. $i = 1;  
  25. while(  $i <= 5 ){  
  26.   
  27.     $limit = ($i - 1 ) * 5;  
  28.   
  29.   
  30.     # 设置版本号  
  31.     $version = 1;  
  32.   
  33.     $key = 'user_list_cache_version';  
  34.   
  35.     $redis_obj -> set( $key , $version );  
  36.   
  37.     $this_page_key = 'user_list_'.$i.'_'.$version;  
  38.   
  39.     $sql = ' select * from shop_account order by account_id limit ' . $limit . ',5' ;  
  40.   
  41.   
  42.     $this_page_data = $mysql_obj -> query( $sql ) -> fetch_all( MYSQLI_ASSOC );  
  43.   
  44.     $this_page_id = [];  
  45.   
  46.     foreach$this_page_data as $key => $value ){  
  47.   
  48.         $detail_key = 'user_detail_' .$value['account_id'];  
  49.   
  50.         $redis_obj -> set( $detail_key , serialize($value) );  
  51.   
  52.         $this_page_id[] = $value['account_id'];  
  53.     }  
  54.   
  55.   
  56.     $redis_obj -> set( $this_page_key , serialize( $this_page_id ) );  
  57.   
  58.     $i ++;  
  59.   
  60. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值