原子缓存

[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.   
  13. $mysql_obj -> query( 'set names utf8' );  
  14.   
  15. $redis_obj = new Redis();  
  16.   
  17. $redis_obj -> connect( '127.0.0.1' , '6379' );  
  18.   
  19. $redis_obj -> auth('likang');  
  20.   
  21. #  
  22. $p = empty($_GET['p'] ) ? 1 : $_GET['p'];  
  23.   
  24. $name =  empty($_GET['name'] ) ? '' : $_GET['name'];  
  25.   
  26. if$name ){  
  27.     $where_str = ' where phone = "'$_GET['name'] . '"';  
  28. }else{  
  29.     $where_str = '';  
  30. }  
  31. $key = 'user_list_'.$where_str . '_' . $p;  
  32.   
  33. echo $key , '<hr/>';  
  34.   
  35. $key = md5( $key );  
  36.   
  37. if( false === $redis_list = unserialize($redis_obj -> get( $key ) )  ){  
  38.   
  39.     $limit =  ( $p - 1 )  * 5;  
  40.   
  41.     $sql = 'select account_id from shop_account ' . ' order by account_id limit ' . $limit . ',5' ;  
  42.   
  43.     echo $sql;  
  44.   
  45.     $user_list = $mysql_obj -> query( $sql ) -> fetch_all( MYSQLI_ASSOC );  
  46.   
  47.     if( !empty$user_list ) ){  
  48.   
  49.         echo '取到数据,设置缓存<hr/>';  
  50.   
  51.         # 设置缓存,并且设置有效期 15-20分钟  
  52.         $redis_obj -> set( $key , serialize($user_list) , rand( 900, 1200 ) );  
  53.   
  54.     }else{  
  55.   
  56.         echo '数据库不存在数据,设置NULL<hr/>';  
  57.   
  58.         # 为了解决缓存穿透的问题,把查询不到的数据缓存一个NULl  
  59.         # 随机生成一个缓存时间 , 防止统一时间失效的key太多 导致缓存服务器压力过大  
  60.         $redis_obj -> set( $key , NULL , rand(20,30) );  
  61.     }  
  62. }else{  
  63.     echo '从redis读取的数据<hr/>';  
  64. //    var_dump( $redis_list );  
  65.   
  66.     # 用户的详情缓存 user_detail_1  
  67.     foreach$redis_list as $key => $v ){  
  68.         $redis_key = 'user_detail_' .$v['account_id'];  
  69.         $result = $redis_obj -> get( $redis_key);  
  70.   
  71.         if$result === false ){  
  72.             $one_sql = 'select * from shop_account where account_id= ' . $v['account_id'] ;  
  73.             $data_result = $mysql_obj -> query( $one_sql ) ->fetch_assoc();  
  74.             $redis_obj -> set(   $redis_key , serialize($data_result) );  
  75.         }else{  
  76.             $data_result = unserialize($result);  
  77.         }  
  78.   
  79.         $all[] = $data_result;  
  80.   
  81.     }  
  82.   
  83.   
  84.     var_dump($all);exit;  
  85.   
  86. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值