- <?php
- # 分页缓存 + 搜索条件 + 缓存版本号
- header( 'content-type:text/html;charset=utf-8' );
- $mysql_obj = new mysqli(
- '127.0.0.1',
- 'root',
- '',
- 'yii_shop'
- );
- $redis_obj = new Redis();
- $redis_obj -> connect( '127.0.0.1' , '6379' );
- # 设置自己的密码
- $redis_obj -> auth('*****');
- $mysql_obj -> query( 'set names utf8' );
- # 设置缓存版本号为1
- $user_cache_version = (int) $redis_obj -> get( 'user_list_cache_version' );
- if( $user_cache_version === false ){
- $user_cache_version = 1;
- $redis_obj -> set( 'user_list_cache_version' , $user_cache_version );
- }
- $p = empty($_GET['p'] ) ? 1 : $_GET['p'];
- $name = empty($_GET['name'] ) ? '' : $_GET['name'];
- if( $name ){
- $where_str = ' where phone = "'. $_GET['name'] . '"';
- }else{
- $where_str = '';
- }
- # 拼装key 加上where条件 加上页码 加上缓存版本号
- $user_list_key = ( 'user_list_' . $where_str . $p .'_'. $user_cache_version );
- echo $user_list_key;
- $user_list_key = md5( $user_list_key);
- # 判断缓存是否有数据
- $redis_list = $redis_obj -> get( $user_list_key );
- # 返回数据
- # 取出 NULL
- # 返回boolean false
- //var_dump($redis_list);exit;
- if( !empty( $redis_list ) ){
- $redis_list = unserialize( $redis_list );
- }
- if( $redis_list === false ){
- echo '缓存没有数据<hr/>';
- $limit = ( $p - 1 ) * 5;
- $sql = ' select * from shop_account ' . $where_str .' limit ' . $limit .',5' ;
- echo $sql;
- $user_list = $mysql_obj -> query( $sql ) -> fetch_all( MYSQLI_ASSOC );
- if( !empty( $user_list ) ){
- echo '取到数据,设置缓存<hr/>';
- # 设置缓存,并且设置有效期 15-20分钟
- $redis_obj -> set( $user_list_key , serialize($user_list) , rand( 900, 1200 ) );
- }else{
- echo '数据库不存在数据,设置NULL<hr/>';
- # 为了解决缓存穿透的问题,把查询不到的数据缓存一个NULl
- # 随机生成一个缓存时间 , 防止统一时间失效的key太多 导致缓存服务器压力过大
- $redis_obj -> set( $user_list_key , NULL , rand(20,30) );
- }
- }else{
- echo '从redis读取的数据<hr/>';
- var_dump( $redis_list );
- }
分页缓存 + 搜索条件 + 缓存版本号
猜你喜欢
转载自blog.csdn.net/echo_hello_world/article/details/80771198
今日推荐
周排行