<?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 );
}
分页缓存 + 搜索条件 + 缓存版本号
最新推荐文章于 2024-06-02 15:11:21 发布