分页缓存 + 搜索条件 + 缓存版本号

[php]  view plain  copy
  1. <?php  
  2. # 分页缓存 + 搜索条件 + 缓存版本号  
  3. header( 'content-type:text/html;charset=utf-8' );  
  4.   
  5. $mysql_obj = new mysqli(  
  6.     '127.0.0.1',  
  7.     'root',  
  8.     '',  
  9.     'yii_shop'  
  10. );  
  11.   
  12. $redis_obj = new Redis();  
  13.   
  14. $redis_obj -> connect( '127.0.0.1' , '6379' );  
  15. # 设置自己的密码  
  16. $redis_obj -> auth('*****');  
  17.   
  18. $mysql_obj -> query( 'set names utf8' );  
  19.   
  20. # 设置缓存版本号为1  
  21. $user_cache_version = (int) $redis_obj -> get( 'user_list_cache_version' );  
  22.   
  23. if$user_cache_version === false  ){  
  24.     $user_cache_version = 1;  
  25.     $redis_obj -> set( 'user_list_cache_version'  , $user_cache_version );  
  26. }  
  27.   
  28.   
  29. $p = empty($_GET['p'] ) ? 1 : $_GET['p'];  
  30.   
  31. $name =  empty($_GET['name'] ) ? '' : $_GET['name'];  
  32.   
  33. if$name ){  
  34.     $where_str = ' where phone = "'$_GET['name'] . '"';  
  35. }else{  
  36.     $where_str = '';  
  37. }  
  38.   
  39. # 拼装key   加上where条件  加上页码  加上缓存版本号  
  40. $user_list_key = ( 'user_list_' . $where_str . $p  .'_'$user_cache_version );  
  41.   
  42. echo $user_list_key;  
  43.   
  44. $user_list_key = md5( $user_list_key);  
  45.   
  46. # 判断缓存是否有数据  
  47. $redis_list = $redis_obj -> get( $user_list_key );  
  48.   
  49. # 返回数据  
  50. #  取出 NULL  
  51. # 返回boolean false  
  52. //var_dump($redis_list);exit;  
  53.   
  54. if( !empty$redis_list )  ){  
  55.     $redis_list = unserialize( $redis_list );  
  56. }  
  57.   
  58. if$redis_list === false ){  
  59.   
  60.     echo '缓存没有数据<hr/>';  
  61.     $limit =  ( $p - 1 )  * 5;  
  62.   
  63.     $sql = ' select * from shop_account ' . $where_str .' limit ' . $limit .',5' ;  
  64.   
  65.     echo $sql;  
  66.   
  67.     $user_list = $mysql_obj -> query( $sql ) -> fetch_all( MYSQLI_ASSOC );  
  68.   
  69.     if( !empty$user_list ) ){  
  70.   
  71.         echo '取到数据,设置缓存<hr/>';  
  72.   
  73.         # 设置缓存,并且设置有效期 15-20分钟  
  74.         $redis_obj -> set( $user_list_key , serialize($user_list) , rand( 900, 1200 ) );  
  75.   
  76.     }else{  
  77.   
  78.         echo '数据库不存在数据,设置NULL<hr/>';  
  79.   
  80.         # 为了解决缓存穿透的问题,把查询不到的数据缓存一个NULl  
  81.         # 随机生成一个缓存时间 , 防止统一时间失效的key太多 导致缓存服务器压力过大  
  82.         $redis_obj -> set( $user_list_key , NULL , rand(20,30) );  
  83.     }  
  84. }else{  
  85.   
  86.     echo '从redis读取的数据<hr/>';  
  87.     var_dump( $redis_list );  
  88.   
  89. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值