实战SSM_O2O商铺_47【Redis缓存】清除缓存接口的开发

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 实战SSM_O2O商铺_47【Redis缓存】清除缓存接口的开发

概述


设计如下: 在接口层传入缓存key的前缀,通过匹配的方式将能匹配到该前缀的所有key均删除。

举个例子

20180816222631373.png


如上3个key,当我们传入shopcategory这个前缀时,会将如上3个前缀全部清除掉。


接口层改造

为了方便使用前缀,我们在将之前定义在方法体中的前缀抽取到接口层,如下所示

public interface AreaService {
  // redis key的前缀,抽取到接口层,方便使用
  public static final String AREALISTKEY = "arealist";
  .....
  ..... 
}
public interface HeadLineService {
  // redis key的前缀,抽取到接口层,方便使用
  public static final String HEADLINEKEY = "headline";
  .....
  ..... 
}
public interface ShopCategoryService {
  // redis key的前缀,抽取到接口层,方便使用
  public static final String SCLISTKEY = "shopcategory";
  .....
  ..... 
}


CacheService接口

package com.artisan.o2o.service;
public interface CacheService {
  /**
   * 
   * 
   * @Title: removeFromCache
   * 
   * @Description: 根据缓存的前缀清理匹配的全部缓存
   * 
   * @param keyPrefix
   * 
   * @return: void
   */
  void removeFromCache(String keyPrefix);
}


CacheService接口实现类

package com.artisan.o2o.service.impl;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.artisan.o2o.cache.JedisUtil;
import com.artisan.o2o.service.CacheService;
@Service
public class CacheServiceImpl implements CacheService {
  @Autowired
  JedisUtil.Keys jedisKeys;
  @Override
  public void removeFromCache(String keyPrefix) {
    Set<String> keySet = jedisKeys.keys(keyPrefix + "*");
    for (String key : keySet) {
      jedisKeys.del(key);
    }
  }
}


工具类中的方法

       /**
     * 查找所有匹配给定的模式的键
     * 
     * @param String
     *            key的表达式,*表示多个,?表示一个
     * */
    public Set<String> keys(String pattern) {
      Jedis jedis = getJedis();
      Set<String> set = jedis.keys(pattern);
      jedis.close();
      return set;
    }
      /**
     * 删除keys对应的记录,可以是多个key
     * 
     * @param String
     *            ... keys
     * @return 删除的记录数
     * */
    public long del(String... keys) {
      Jedis jedis = getJedis();
      long count = jedis.del(keys);
      jedis.close();
      return count;
    }


单元测试

package com.artisan.o2o.service;
import java.io.IOException;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.artisan.o2o.BaseTest;
import com.artisan.o2o.entity.Area;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
public class AreaServiceTest extends BaseTest {
  @Autowired
  AreaService areaService;
  @Autowired
  CacheService cacheService;
  @Test
  public void testGetAreaList() throws JsonParseException, JsonMappingException, IOException {
    // 首次从db中加载
    List<Area> areaList = areaService.getAreaList();
    for (Area area : areaList) {
      System.out.println("||---->" + area.toString());
    }
    // 再次查询从redis中获取
    areaList = areaService.getAreaList();
    for (Area area : areaList) {
      System.out.println("**---->" + area.toString());
    }
    // 清除缓存
    cacheService.removeFromCache(AreaService.AREALISTKEY);
    // 再次查询 从db中获取
    areaList = areaService.getAreaList();
    for (Area area : areaList) {
      System.out.println("**---->" + area.toString());
    }
    // 再次查询从redis中获取
    areaList = areaService.getAreaList();
    for (Area area : areaList) {
      System.out.println("**---->" + area.toString());
    }
  }
}



观察数据,确保测试结果符合预期。 比较简单就不贴数据了。


Github地址

代码地址: https://github.com/yangshangwei/o2o


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
7天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
16天前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
90 22
|
14天前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
103 7
|
19天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
53 10
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)

热门文章

最新文章