redisController工具类

文章目录

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

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

redisController

代码:

java 复制代码
/*
 * redis功能
 */
@RestController
@RequestMapping(value = "/interface/redis")
public class RedisController {

    private static Logger logger = LoggerFactory.getLogger(RedisController.class);

    @Autowired
    private 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之后快了许多。

相关推荐
silvamux_14 分钟前
Spring Boot 调用大模型 api 最小可跑教程
java·spring boot·后端
今年下半年17 分钟前
【Spring Boot 】通过 OpenFeign 请求第三方接口
java·spring boot·后端·openfeign
范什么特西26 分钟前
亲和路由(inspect)
java
她说可以呀29 分钟前
Docker 镜像的两种创建方式
java·分布式·docker
霸道流氓气质38 分钟前
AgentFlow 入门与实战:Task-Based 并发、EWMA 动态调度与四道门禁的 Java 生产级编排
java·开发语言
愿得一猪蹄1 小时前
# Java线程池实战,别再new Thread了
java
ee又momo1 小时前
# 深入理解Java注解,从使用到自定义
java
霸道流氓气质1 小时前
AI智能博客平台实战:RAG增强写作、多Agent协作与语义检索的Vue3 + Spring AI全栈实现
java·人工智能·spring
打工仔折腾 AI2 小时前
LangChain 工具调用实战:从 Tool 定义到 Agent 执行链路拆解
java·前端·人工智能·后端·python·langchain·ai agent 实战
哦虎!2 小时前
【JavaEE】网络原理 - TCP/IP
java