redis作为缓存服务器为MySQL数据库提供较高的防御性,对于一些数据的查询可以直接从缓存中可以进行查询。

但是,某些情况下,我们需要清除缓存。

以下场景:

公司经常做活动,每个活动都存在大量的数据。在新活动进行测试的时候,也会产生一些缓存,但是删除这些缓存如果不能批量删除就有点烦了。

在写活动的时候,为了保证活动的缓存不冲突,用自己姓名的前缀及活动的英文名作为前缀。缓存在很大程度上能够帮助我们降低服务器的访问压力,但是也要防止缓存失效的情况,缓存并不能作为我们的最终依靠。

首先在缓存中查询,如果缓存中不存在再去mysql数据库中查询,当数据库中真的不存在的时候,才能确定该查询的数据不存在;因此在数据库中查到数据的时候,再将该数据写入缓存。

------------------------------------------------------------------------------------------------------

如何删除指定前缀的redis。。。

我们一开始给redis封装了一个类库

<?php
class RedisClass
{
static $_instance; //存储对象
public $handler ;
private function __construct($dbindex = )
{
global $_G ;
$data = $_G['config']['redis']['redis']['params'];
if ( !extension_loaded('redis') ) {
throw new Exception("REDIS NOT SUPPORT", );
}
$this->handler = new Redis();
//从配置读取
$this->handler->connect($data['hostname'],$data['port']);
$this->handler->auth($data['auth']);
$this->handler->select($dbindex);
}
public static function getInstance($dbindex = ){
if(!isset(self::$_instance[$dbindex]) or FALSE == (self::$_instance[$dbindex] instanceof self)){
self::$_instance[$dbindex] = new self($dbindex);
}
return self::$_instance[$dbindex];
} /**key value get**/
public function GET($key)
{
return $this->handler->get($key);
}
/**key value set 过期时间为 $exp**/
public function SET($key ,$value ,$exp)
{
$this->handler->setex($key ,$exp ,$value );
} /*移除数据$key*/
public function REMOVE($key)
{
$this->handler->delete($key); }
/*设置数据的过期时间$key*/
public function EXPIRE($key ,$exp)
{
$this->handler->expire($key ,$exp);
}
/**Hash 相关**/ public function HGET($domain , $key)
{
return $this->handler->hGet($domain , $key);
}
public function HSET ($domain ,$key ,$value )
{
$this->handler->hSet($domain , $key);
} public function HREMOVE($domain ,$key)
{
$this->handler->hDel($domain , $key);
}
public function HGETALL($key = '' ){
return $this->handler->hGetAll($key);
}
public function HMset($key = '' , $value = array()){
return $this->handler->hMset($key , $value );
}
/*插入列表*/
public function PushList($channel,$data)
{
$this->handler->lPush($channel,$data);
} /*从列表中获取*/
public function POPList($channel)
{
return $this->handler->lPop($channel);
} public function SADD($hash ,$value){ return $this->handler->SADD($hash ,$value);
} public function SMEMBERS($hash){
return $this->handler->SMEMBERS($hash );
} /**
* pj
* 用于批量获取指定
* @param [type] $key [description]
* 例如:
* $key = "pj_group_*";//获取以pj_group_
$cache = RedisClass::getInstance(12);
$data = $cache->KEYS($key);
$cache->DELKEYS($data);
*/
public function KEYS($key){//获取指定的key 或者指定前缀的key
return $this->handler->keys($key );
}
public function DELKEYS($data = array()){
return $this->handler->delete($data);
}
}
?>

批量删除redis缓存的思路:

先获取要删除的redis前缀,比如“pj_group_*”为前缀的

然后直接delete掉这些key就可以了

//删除指定开始的前缀缓存
public function indexAction(){
$key = "pj_group_*";//当前openid
$cache = RedisClass::getInstance();
$data = $cache->KEYS($key);
$cache->DELKEYS($data);
}

redis删除指定前缀的缓存的更多相关文章

  1. laravel redis 删除指定前缀的 key

    // 前缀 $prefix = 'abc'; // 需要在前面连接上应用的缓存前缀 $keys = app('redis')->keys(config('cache.prefix') . $pr ...

  2. Redis删除相同前缀的key

          如何优雅地删除Redis set集合中前缀相同的key?       Redis中有删除单条数据的命令DEL,却没有批量删除特定前缀key的指令,但我们经常遇到需要根据前缀来删除的业务场景 ...

  3. php redis 获取指定前缀的所有key

    php redis 获取指定前缀的所有key 以laravel框架为例: $key = $this->redis->keys('db:shipping:shippingId:' . &qu ...

  4. Redis删除特定前缀key的优雅实现

    还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹! Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案 re ...

  5. MySQL批量删除指定前缀表

    Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_name LIKE ...

  6. MySQL中批量删除指定前缀表的sql语句

    有时候我们在安装一些cms的时候,这些cms都是带表前缀的方便区分数据,但有时候我们测试完需要删除的时候又有别的前缀表就可以参考下面的方法 代码如下:Select CONCAT( 'drop tabl ...

  7. mysql批量删除指定前缀或后缀表

    今天突然发现我们数据库中多出很多表,后缀名为"copy",预计是navicat直接拷贝导致的,然后要对这些有同样后缀名的表进行删除,假设一个一个选择会非常麻烦,表计较多,在网上找了 ...

  8. Redis【知识点】批量删除指定Key

    Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassw ...

  9. redis删除list中指定index的值

    Redis的List删除命令: lrem : lrem mylist 0 "value"    //从mylist中删除全部等值value的元素   0为全部,负值为从尾部开始. ...

随机推荐

  1. Linux实战教学笔记20:初级阶段结束,中级阶段起航

    第二十节 第一阶段结束第二阶段起航 标签(空格分隔): Linux实战教学笔记-陈思齐 一,承上 Linux实战教学笔记的基础核心能力阶段也就是第一阶段到此也就告一段落了.如果同学们能基本全都掌握,再 ...

  2. 82. Remove Duplicates from Sorted List II (List)

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  3. if UNITY_EDITOR这个判断常用,还有哪个常用捏?

    #if DEVELOPMENT_BUILD || UNITY_EDITOR DEVELOPMENT_BUILD表示开发版的意思,会在程序右下角显示 Development Build 我们可以根据这个 ...

  4. jedis的publish/subscribe[转]含有redis源码解析

    首先使用redis客户端来进行publish与subscribe的功能是否能够正常运行. 打开redis服务器 [root@localhost ~]# redis-server /opt/redis- ...

  5. 清北学堂 day6 花

    1.花( flower.cpp/c/pas)[ 问题描述]商店里出售 n 种不同品种的花.为了装饰桌面,你打算买 m 支花回家.你觉得放两支一样的花很难看,因此每种品种的花最多买 1 支.求总共有几种 ...

  6. [GO]通过结构体生成json

    package main import ( "encoding/json" "fmt" ) type IT struct { //一定要注意这里的成员变量的名字 ...

  7. HDU 6053 TrickGCD (莫比乌斯函数)

    题意:给一个序列A,要求构造序列B,使得 Bi <= Ai, gcd(Bi) > 1, 1 <= i <= n, 输出构造的方法数. 析:首先这个题直接暴力是不可能解决的,可以 ...

  8. Win10 安装配置Android sdk及adb环境变量

    今天在新买的win10系统笔记本上安装配置adb,开始觉得挺简单的事,公司win7电脑上有现成的,但实际过程中……没想的那么简单了!好了,废话少说,直接正题. 研究了好一会下,总算搞定,总结如下: 1 ...

  9. LRU缓存介绍与实现 (Java)

    引子: 我们平时总会有一个电话本记录所有朋友的电话,但是,如果有朋友经常联系,那些朋友的电话号码不用翻电话本我们也能记住,但是,如果长时间没有联系 了,要再次联系那位朋友的时候,我们又不得不求助电话本 ...

  10. JavaScript - this详解 (三)

    闭包 this 执行上下文决定了变量作用域 而闭包,它其实是一种决策,是一种模式,让我们可以灵活的改变变量作用域. 按惯例,上栗子 var global = 'global';function out ...