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

<?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 );

}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇葩也是花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值