当前位置: 首页 > news >正文

redisController工具类

文章目录

      • redisController
      • opsForHash的一次优化经历

redis-cli连接redis太不直观,一直寻思弄个工具类,网上一看到处都是,拿来直接用吧。

这代码也没多少啊,编辑时居然卡卡的。。。

redisController

代码:

/** redis功能*/
@RestController
@RequestMapping(value = "/interface/redis")
public class RedisController {private static Logger logger = LoggerFactory.getLogger(RedisController.class);@Autowiredprivate RedisTemplate redisTemplate;@RequestMapping("/setString")public Object set(@RequestBody RedisRequest request) {redisTemplate.opsForValue().set(request.getKey(), request.getValue());return "OK";}// 注:get方法在不确定类型的情况下不能直接用@RequestMapping("/getString")public String get(@RequestBody RedisRequest request) {Object o = redisTemplate.opsForValue().get(request.getKey());return JSON.toJSONString(o);}// type也是通用功能,不区分类型  keys加强下  实际用不到这个接口了@RequestMapping("/type")public JsonResult type(@RequestBody RedisRequest request) {JsonResult result = new JsonResult<>();try {logger.info("redis功能_delete请求开始,request={}", JSON.toJSONString(request));DataType type = redisTemplate.type(request.getKey());logger.info("redis功能_delete请求完成,result={}",JSON.toJSONString(result));result=JsonResult.success(type);return result;}catch(Exception e){logger.error("redis功能_delete请求异常,error:",e);return JsonResult.error("-1","redis功能_delete请求异常,error="+e.getMessage());}}// 删除的时候区分类型吗? 不区分@RequestMapping("/delete")public JsonResult delete(@RequestBody RedisRequest request) {JsonResult result = new JsonResult<>();try {logger.info("redis功能_delete请求开始,request={}", JSON.toJSONString(request));redisTemplate.delete(request.getKey());logger.info("redis功能_delete请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_delete请求异常,error:",e);return JsonResult.error("-1","redis功能_delete请求异常,error="+e.getMessage());}}@RequestMapping("/keys")public JsonResult keys(@RequestBody RedisMapRequest request) {JsonResult<Object> result = new JsonResult<>();HashMap keysMap  = new HashMap<>();Set<String> keys = new HashSet<String>();try {logger.info("redis功能_keys请求开始,request={}",JSON.toJSONString(request));if(!StringUtils.isEmpty(request.getKey())){keys=redisTemplate.keys(request.getKey());}else{keys = redisTemplate.keys("*");}for (String item:keys) {DataType type = redisTemplate.type(item);keysMap.put(item,type);}result=JsonResult.success(keysMap);logger.info("redis功能_keys请求完成,result={}",JSON.toJSONString(result));return result;}catch (Exception e){logger.error("redis功能_keys请求异常,error:",e);return JsonResult.error("-1","redis功能_keys请求异常,error="+e.getMessage());}}@RequestMapping("/info")public JsonResult info(@RequestBody RedisRequest request) {JsonResult result = new JsonResult<>();try {logger.info("redis功能_info请求开始,request={}", JSON.toJSONString(request));Properties info = redisTemplate.getConnectionFactory().getConnection().info();result=JsonResult.success(info);logger.info("redis功能_info请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_info请求异常,error:",e);return JsonResult.error("-1","redis功能_info请求异常,error="+e.getMessage());}}// 添加单条记录@RequestMapping("/putToMap")public JsonResult putToMap(@RequestBody RedisMapRequest request) {JsonResult result = new JsonResult<>();try {logger.info("redis功能_putToMap请求开始,request={}", JSON.toJSONString(request));redisTemplate.opsForHash().put(request.getKey(), request.getSonKey(),request.getSonValue());// 重查Map map = redisTemplate.opsForHash().entries(request.getKey());result=JsonResult.success(map);logger.info("redis功能_putToMap请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_putToMap请求异常,error:",e);return JsonResult.error("-1","redis功能_putToMap请求异常,error="+e.getMessage());}}/** 添加所有到map* 注:这是个增量接口* 如果key相同,会覆盖* 如果map为空 不会影响原有map*/@RequestMapping("/putAllToMap")public JsonResult putAllToMap(@RequestBody RedisMapRequest request) {JsonResult<Object> result = new JsonResult<>();try {logger.info("redis功能_putAllToMap请求开始,request={}", JSON.toJSONString(request));redisTemplate.opsForHash().putAll(request.getKey(),request.getMap());logger.info("redis功能_putAllToMap请求开始,request={}", JSON.toJSONString(request));return result;}catch(Exception e) {logger.error("redis功能_putAllToMap请求异常,error:", e);return JsonResult.error("-1", "redis功能_putAllToMap请求异常,error=" + e.getMessage());}}@RequestMapping("/getFromMap")public JsonResult getFromMap(@RequestBody RedisMapRequest request) {JsonResult<Object> result = new JsonResult<>();try {logger.info("redis功能_getFromMap请求开始,request={}",JSON.toJSONString(request));Object o = redisTemplate.opsForHash().get(request.getKey(), request.getSonKey());result=JsonResult.success(o);return result;}catch(Exception e){logger.error("redis功能_putAllToMap请求异常,error:", e);return JsonResult.error("-1", "redis功能_putAllToMap请求异常,error=" + e.getMessage());}}// 强制set  先删除 再set全部@RequestMapping("/setMap")public JsonResult setMap(@RequestBody RedisMapRequest request,HashMap map) {JsonResult<Object> result = new JsonResult<>();try {logger.info("redis功能_setMap请求开始,request={}",JSON.toJSONString(request));if(null==map){map = new HashMap<>();}redisTemplate.opsForHash().delete(request.getKey());redisTemplate.opsForHash().putAll(request.getKey(), map);logger.info("redis功能_setMap请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_setMap请求异常,error:", e);return JsonResult.error("-1", "redis功能_setMap请求异常,error=" + e.getMessage());}}@RequestMapping("/getMapValues")public JsonResult getMapValues(@RequestBody RedisMapRequest request) {JsonResult result = new JsonResult<>();try {logger.info("redis功能_getMapValues请求开始,request={}",JSON.toJSONString(request));List list = redisTemplate.opsForHash().values(request.getKey());result=JsonResult.success(list);logger.info("redis功能_getMapValues请求完成,request={}",JSON.toJSONString(request));return result;}catch(Exception e){logger.error("redis功能_getMapValues请求异常,error:", e);return JsonResult.error("-1", "redis功能_getMapValues请求异常,error=" + e.getMessage());}}@RequestMapping("/getMapEntries")public JsonResult getMapEntries(@RequestBody RedisMapRequest request) {JsonResult<Object> result = new JsonResult<>();try {logger.info("redis功能_getMapEntries请求开始,request={}",JSON.toJSONString(request));Map map = redisTemplate.opsForHash().entries(request.getKey());result=JsonResult.success(map);logger.info("redis功能_getMapEntries请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_getMapEntries请求异常,error:", e);return JsonResult.error("-1", "redis功能_getMapEntries请求异常,error=" + e.getMessage());}}@RequestMapping("/delMap")public JsonResult delMap(@RequestBody RedisMapRequest request) {JsonResult<Object> result = new JsonResult<>();try {logger.info("redis功能_delMap请求开始,request={}",JSON.toJSONString(request));Long delflag = redisTemplate.opsForHash().delete(request.getKey());result=JsonResult.success(delflag);logger.info("redis功能_delMap请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_delMap请求异常,error:", e);return JsonResult.error("-1", "redis功能_delMap请求异常,error=" + e.getMessage());}}// 从map中删除一个键值对@RequestMapping("/deleteKeyFromMap")public JsonResult deleteKeyFromMap(@RequestBody RedisMapRequest request) {JsonResult<Object> result = new JsonResult<>();try {logger.info("redis功能_deleteKeyFromMap请求开始,request={}",JSON.toJSONString(request));Long delflag = redisTemplate.opsForHash().delete(request.getKey(), request.getSonKey());result=JsonResult.success(delflag);logger.info("redis功能_deleteKeyFromMap请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_deleteKeyFromMap请求异常,error:", e);return JsonResult.error("-1", "redis功能_deleteKeyFromMap请求异常,error=" + e.getMessage());}}@RequestMapping("/listAddValues")public JsonResult listAddValues(@RequestBody RedisListRequest request) {try {logger.info("redis功能_listAddValues请求开始,request={}", JSON.toJSONString(request));JsonResult result = new JsonResult<>();Long i = redisTemplate.opsForList().rightPushAll(request.getKey(), request.getValues());logger.info("redis功能_listAddValues请求完成,i={}", i);result.setMessage("redis功能_listAddValues请求完成,i="+i);return result;}catch(Exception e){logger.error("redis功能_listAddValues请求异常,error:",e);return JsonResult.error("-1","redis功能_listAddValues请求异常");}}@RequestMapping("/listLeftPush")public JsonResult listLeftPush(@RequestBody RedisListRequest request) {try {logger.info("redis功能_listLeftPush请求开始,request={}", JSON.toJSONString(request));JsonResult result = new JsonResult<>();Long i = redisTemplate.opsForList().leftPush(request.getKey(), request.getValue());logger.info("redis功能_listLeftPush请求完成,i={}",i);result.setMessage("redis功能_listLeftPush请求完成,i="+i);return result;}catch(Exception e){logger.error("redis功能_listLeftPush请求异常,error:",e);return JsonResult.error("-1","redis功能_listLeftPush请求异常");}}@RequestMapping("/listLeftPop")public JsonResult listLeftPop(@RequestBody RedisListRequest request) {try {logger.info("redis功能_listLeftPop请求开始,request={}", JSON.toJSONString(request));JsonResult result = new JsonResult<>();// 注: pop是不需要值得Object object = redisTemplate.opsForList().leftPop(request.getKey());logger.info("redis功能_listLeftPop请求完成,object={}",JSON.toJSONString(object));result.setMessage("redis功能_listLeftPush请求完成,object="+JSON.toJSONString(object));return result;}catch(Exception e){logger.error("redis功能_listLeftPush请求异常,error:",e);return JsonResult.error("-1","redis功能_listLeftPush请求异常");}}@RequestMapping("/listShowAll")public JsonResult listShowAll(@RequestBody RedisListRequest request) {try {logger.info("redis功能_listShowAll请求开始,request={}", JSON.toJSONString(request));JsonResult result = new JsonResult<>();// 小技巧,遍历全部Object object = redisTemplate.opsForList().range(request.getKey(),0,-1);logger.info("redis功能_listShowAll请求完成,object={}",JSON.toJSONString(object));result.setMessage("redis功能_listShowAll请求完成,object="+JSON.toJSONString(object));return result;}catch(Exception e){logger.error("redis功能_listShowAll请求异常,error:",e);return JsonResult.error("-1","redis功能_listShowAll请求异常,error="+e.getMessage());}}@RequestMapping("/setZset")public JsonResult setZset(@RequestBody RedisZsetRequest request) {try {logger.info("redis功能_setZset请求开始,request={}", JSON.toJSONString(request));JsonResult result = new JsonResult<>();Boolean flag = redisTemplate.opsForZSet().add(request.getKey(), request.getValue(), request.getScore());logger.info("redis功能_setZset请求完成,flag={}",flag);result.setMessage("redis功能_setZset请求完成,条数="+flag);return result;}catch(Exception e){logger.error("redis功能_setZset请求异常,error:",e);return JsonResult.error("-1","redis功能_setZset请求异常,error="+e.getMessage());}}@RequestMapping("/zsetRangeMembersAndScores")public JsonResult zsetRangeMembersAndScores(@RequestBody RedisZsetRequest request) {JsonResult result = new JsonResult<>();try {logger.info("redis功能_zsetRangeMembersAndScores请求开始,request={}", JSON.toJSONString(request));Set set = redisTemplate.opsForZSet().range(request.getKey(), request.getStart(), request.getEnd());ZSetOperations<String, String> zSetOps = redisTemplate.opsForZSet();ArrayList<Object> zsetList = new ArrayList<>();RedisZsetEntity zsetEntity=null;for (Object item: set) {zsetEntity = new RedisZsetEntity();Double score = zSetOps.score(request.getKey(), item);zsetEntity.setKey(request.getKey());zsetEntity.setValue(item.toString());zsetEntity.setScore(score);zsetList.add(zsetEntity);}result=JsonResult.success(zsetList);logger.info("redis功能_zsetRangeMembersAndScores请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_zsetRangeMembersAndScores请求异常,error:",e);return JsonResult.error("-1","redis功能_zsetRangeMembersAndScores请求异常,error="+e.getMessage());}}@RequestMapping("/zsetIncrementScore")public JsonResult zsetIncrementScore(@RequestBody RedisZsetRequest request) {JsonResult result = new JsonResult<>();try {logger.info("redis功能_zsetIncrementScore请求开始,request={}", JSON.toJSONString(request));ZSetOperations<String, String> zSetOps = redisTemplate.opsForZSet();Double yScore = zSetOps.score(request.getKey(), request.getValue());Double newScore = zSetOps.incrementScore(request.getKey(), request.getValue(), request.getDelta());result.setMessage("redis功能_zsetIncrementScore请求完成,yScore={}"+yScore+",newScore="+ newScore);logger.info("redis功能_zsetIncrementScore请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_zsetIncrementScore请求异常,error:",e);return JsonResult.error("-1","redis功能_zsetIncrementScore请求异常,error="+e.getMessage());}}@RequestMapping("/zsetIntersectAndStore")public JsonResult zsetIntersectAndStore(@RequestBody RedisZsetRequest request) {JsonResult result = new JsonResult<>();try {logger.info("redis功能_zsetIntersectAndStore请求开始,request={}", JSON.toJSONString(request));ZSetOperations<String, String> zSetOps = redisTemplate.opsForZSet();zSetOps.intersectAndStore(request.getKey(), request.getOtherKey(), request.getDestKey());// 新集合logger.info("redis功能_zsetIntersectAndStore请求完成,result={}",JSON.toJSONString(result));return result;}catch(Exception e){logger.error("redis功能_zsetIntersectAndStore请求异常,error:",e);return JsonResult.error("-1","redis功能_zsetIntersectAndStore请求异常,error="+e.getMessage());}}public JsonResult removeFromList(@RequestBody RedisListRequest request) {try {logger.info("redis功能_removeFromList请求开始,request={}", JSON.toJSONString(request));JsonResult result = new JsonResult<>();// 小技巧,遍历全部Long i = redisTemplate.opsForList().remove(request.getKey(), request.getCount(), request.getValue());logger.info("redis功能_removeFromList请求完成,条数={}",i);result.setMessage("redis功能_removeFromList请求完成,条数="+i);return result;}catch(Exception e){logger.error("redis功能_removeFromList请求异常,error:",e);return JsonResult.error("-1","redis功能_removeFromList请求异常,error="+e.getMessage());}}
}

opsForHash的一次优化经历

opsForHash有put方法也有putAll方法,如果条数比较多,非常推荐先放到一个map,再用putAll,这样减少和redis交互的次数,性能提高很多。

有一次执行时发现明显的卡两秒,排查了下,是在for循环里面单条put了,所以非常慢,优化为putAll之后快了许多。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 动态内存管理之malloc,free,calloc和realloc函数
  • Flip动画的实现示例demo
  • mysql的zip解压缩版安装
  • 常见的限流算法
  • hnust 湖科大 毕业实习常见问题30问(2021 年7月,V0.9)
  • django orm增删改查操作
  • 从零到一:构建你的第一个AI项目(实战教程)
  • 【算法】差分思想:强大的算法技巧
  • Parallels Desktop 20 for Mac中文版发布了?会哪些新功能
  • uniapp 做一个查看图片的组件,图片可缩放移动
  • 基于C++的成绩管理系统
  • 828华为云征文 | 使用Flexus云服务器X实例部署GLPI资产管理系统
  • 基于python+django+vue的外卖管理系统
  • 【python设计模式1】面向对象设计原则
  • 基于springboot+vue+uniapp的驾校报名小程序
  • 网络传输文件的问题
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 3.7、@ResponseBody 和 @RestController
  • Docker容器管理
  • Iterator 和 for...of 循环
  • JavaScript DOM 10 - 滚动
  • java多线程
  • log4j2输出到kafka
  • NSTimer学习笔记
  • PHP变量
  • Shadow DOM 内部构造及如何构建独立组件
  • SpringBoot 实战 (三) | 配置文件详解
  • SwizzleMethod 黑魔法
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 构造函数(constructor)与原型链(prototype)关系
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 讲清楚之javascript作用域
  • 你真的知道 == 和 equals 的区别吗?
  • 前嗅ForeSpider采集配置界面介绍
  • 区块链将重新定义世界
  • 让你的分享飞起来——极光推出社会化分享组件
  • 软件开发学习的5大技巧,你知道吗?
  • 思考 CSS 架构
  • Android开发者必备:推荐一款助力开发的开源APP
  • mysql面试题分组并合并列
  • # 数仓建模:如何构建主题宽表模型?
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • (09)Hive——CTE 公共表达式
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (算法)区间调度问题
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core Redis 使用有序集合实现延迟队列
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET gRPC 和RESTful简单对比
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net(C#)自定义WinForm控件之小结篇