redis删除指定前缀的缓存

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

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

以下场景:

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

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

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

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

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

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

<?php
  class RedisClass
  {
    static $_instance; //存储对象
    public $handler ;
      private function __construct($dbindex = 0)
      {
        global $_G ;
        $data = $_G[‘config‘][‘redis‘][‘redis‘][‘params‘];
        if ( !extension_loaded(‘redis‘) ) {
            throw new Exception("REDIS NOT  SUPPORT", 1);
        }
        $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 = 0){
        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(12);
        $data = $cache->KEYS($key);
        $cache->DELKEYS($data);
    }
时间: 2024-11-05 12:34:18

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

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

今天突然发现我们数据库中多出很多表,后缀名为"copy",预计是navicat直接拷贝导致的,然后要对这些有同样后缀名的表进行删除,假设一个一个选择会非常麻烦,表计较多,在网上找了找方法,网上主要通过sql语句来删除.自己在他的基础上写了一个php文件实现了批量删除表.事实上原理是一样的. 1.MYSQL批量删除 [1]获得批量删除的命令: Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.t

MySQL批量删除指定前缀表

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

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

Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassword keys 'Volume:*' | xargs /work/app/redis/bin/redis-cli -a youpassword del 注释: 通过:keys 'Volume'去匹配你要删除的Key:Value条目,然后把结果传给xargs然后删除数据 如果要删除指定的Redis库

Redis简介以及和其他缓存数据库的区别

一.Redis简介 Redis 是一个开源的内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如字符串(Strings),散列(Hashes),列表(Lists),集合(Sets),有序集合(Sorted Sets或者是ZSet) 与范围查询, Bitmaps,Hyperloglogs 和 地理空间(Geospatial)索引半径查询. 其中常见的数据结构类型有String.List.Set.Hash.ZSet这5种. Redis 内置了复制(Replic

Redis整合Spring结合使用缓存实例

摘要:本文介绍了如何在Spring中配置redis,并通过Spring中AOP的思想,将缓存的方法切入到有需要进入缓存的类或方法前面. 一.Redis介绍 什么是Redis? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set –有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作

使用Redis做MyBatis的二级缓存

1. 介绍 使用mybatis时可以使用二级缓存提高查询速度,进而改善用户体验. 使用redis做mybatis的二级缓存可是内存可控<如将单独的服务器部署出来用于二级缓存>,管理方便. 2. 使用思路 2.1 配置redis.xml 设置redis服务连接各参数 2.1 在配置文件中使用 <setting> 标签,设置开启二级缓存: 2.2 在mapper.xml 中使用<cache type="com.demo.RedisCacheClass" /&g

PHP批量清空删除指定文件夹内容

PHP批量清空删除指定文件夹内容: cleancache.php <?php // 清文件缓存 $dirs = array( realpath(dirname(__FILE__) . '/../data/cache_data'), realpath(dirname(__FILE__) . '/../data/cache_file'), realpath(dirname(__FILE__) . '/../data/cache_view') ); // 清理缓存 foreach($dirs as $

Redis整合Spring结合使用缓存实例(转)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了如何在Spring中配置redis,并通过Spring中AOP的思想,将缓存的方法切入到有需要进入缓存的类或方法前面. 一.Redis介绍 什么是Redis? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和h

redis系列之数据库与缓存数据一致性解决方案

redis系列之数据库与缓存数据一致性解决方案 数据库与缓存读写模式策略 写完数据库后是否需要马上更新缓存还是直接删除缓存? (1).如果写数据库的值与更新到缓存值是一样的,不需要经过任何的计算,可以马上更新缓存,但是如果对于那种写数据频繁而读数据少的场景并不合适这种解决方案,因为也许还没有查询就被删除或修改了,这样会浪费时间和资源 (2).如果写数据库的值与更新缓存的值不一致,写入缓存中的数据需要经过几个表的关联计算后得到的结果插入缓存中,那就没有必要马上更新缓存,只有删除缓存即可,等到查询的