文章目录

  • 概述
  • 接口层改造
  • CacheService接口
  • CacheService接口实现类
  • 工具类中的方法
  • 单元测试
  • Github地址

概述

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

举个例子

如上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 {@AutowiredJedisUtil.Keys jedisKeys;@Overridepublic 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 {@AutowiredAreaService areaService;@AutowiredCacheService cacheService;@Testpublic 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

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

  1. 实战SSM_O2O商铺_46【Redis缓存】头条信息+商铺目录Service层加入缓存

    文章目录 概述 HeadLineServiceImpl的改造 代码 单元测试 ShopCategoryServiceImpl的改造 代码 单元测试 Github地址 概述 根据数据的特点,不经常变动的 ...

  2. 实战SSM_O2O商铺_42【前端展示】店铺列表页面View层的实现

    文章目录 概述 代码结构 shoplist.html shoplist.js shoplist.css common.js添加解析日期的公共方法 FrontEndController添加路由 联调测试 ...

  3. 实战SSM_O2O商铺_40【前端展示】首页轮播图和一级商铺View层的实现

    文章目录 概述 index.html index.js index.css Controller 调测 修复问题 头条图片展示修复 一级类别商铺图片展示修复 Github地址 概述 在完成了后端 实战 ...

  4. 实战SSM_O2O商铺_38【商品类别】解除商品与商品类别的关联

    文章目录 概述 Dao层 ProductDao.java ProductDao.xml 单元测试 Service层完善 ProductCategoryServiceImpl#deleteProduct ...

  5. 实战SSM_O2O商铺_34【商品】商品编辑之Controller层的实现

    文章目录 概述 ProductController 单元测试 Github地址 概述 在完成了 实战SSM_O2O商铺_33[商品]商品编辑之Service层的实现之后,我们继续来实现Controll ...

  6. 实战SSM_O2O商铺_32【商品】商品编辑之Dao层的实现

    文章目录 概述 Dao层接口 ProductDao#selectProductById ProductDao#updateProduct ProductImgDao#deleteProductImgB ...

  7. 实战SSM_O2O商铺_31【商品】商品添加之View层的实现

    文章目录 概述 productoperation.html productoperation.js 联调 检查结果 库表数据: 磁盘上的图片 Github地址 概述 在完成了 实战SSM_O2O商铺_ ...

  8. 实战SSM_O2O商铺_28【商品】商品添加之Dao层的实现

    文章目录 概述 重温实体类 Prouct ProductImg ProductDao接口 Mapper配置文件 ProductImgDao接口 Mapper配置文件 单元测试 #ProductDaoT ...

  9. 实战SSM_O2O商铺_27【商品类别】删除商品类别从Dao到View层的开发

    文章目录 概述 Dao层 ProductCategoryDao接口增加接口方法 ProductCategoryDao SQL映射文件 闭环的单元测试 Servie层 接口 接口实现 单元测试 Cont ...

最新文章

  1. hihocoder 网络流二·最大流最小割定理
  2. mysql里面的sql_mysql工作中的sql
  3. 【深度学习】近几年,关于基于Imagenet数据集图像分类的模型总结
  4. 模版方法模式在Spring框架中的应用
  5. MySQL5.6 数据库主从(Master/Slave)同步安装与配置详解
  6. 金蝶K3物料主数据计划策略字段设置
  7. [远程控制]木马伪装:图片
  8. 解决ubuntu安装软件has install-snap change in progress错误
  9. 木马万能查杀清除方法,木马专杀
  10. mysql 查询部门中男女人数,工资最高,等
  11. 墙裂推荐6本适用于所有Java程序员阅读书籍
  12. 【C语言程序】某班级学习委员整理获得奖学金排名,总成绩=智育成绩*60%+德育成绩*30%+体育成绩*10%,使用冒泡排序法将班级前12名同学的成绩进行排名。
  13. linux通过网线连路由器上网
  14. 东北大学计算机难度,东北大学考研难吗
  15. MarkDown特殊字符转义(七)
  16. 计算机实现乘法和除法的运算逻辑
  17. 学习《华为基本法》理解企业管理经营框架(1):控制方针
  18. 洗脑有术:如何防止被洗脑?
  19. 苹果官方付费升级内存_为了玩史上最贵的付费手游,不仅得割肾还要净身!
  20. 前端框架的新星-Hyperapp 1.0简介

热门文章

  1. python读取 pcd 数据 三种方法
  2. mysql8 允许外网访问
  3. mongodb 内存限制
  4. 链表学习(一)静态链表的构造
  5. 向有环的环形链表中插入新节点
  6. pytorch 笔记:torch.distributions 概率分布相关(更新中)
  7. 数学建模太难?做到这三件事,让你事半功倍
  8. hdfs复制文件夹_一文理解HDFS
  9. excel vba 使用mschart_使用VBA时不妨借力Excel催化剂的能力,开发更加轻松便捷
  10. QT关于全局变量的申请以及使用,所有class可用同一个变量