redis zremove删除不掉【bug】

前言

2024-4-14 22:47:52

以下内容源自《【bug】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://blog.csdn.net/qq_51625007
禁止其他平台发布时删除以上此话

redis zremove删除不掉

redis zremove删除不掉【bug】

问题未解决

有没有大佬啊~

错误产生

redis zremove删除不掉

我看调试之后
在redis源码中
这个rawKey 和 rawValue
add和remove方法中是一致的

但是remove返回0

	@Override
	public Boolean add(K key, V value, double score) {

		byte[] rawKey = rawKey(key);
		byte[] rawValue = rawValue(value);
		return execute(connection -> connection.zAdd(rawKey, score, rawValue), true);
	}

	@Override
	public Long remove(K key, Object... values) {

		byte[] rawKey = rawKey(key);
		byte[][] rawValues = rawValues(values);

		return execute(connection -> connection.zRem(rawKey, rawValues), true);
	}

相关资源

方法调用

测试入口

    @Test
    public void test2() {
        System.out.println("1.");
        testAddData5();
        System.out.println("2.");
        testRemoveData5();
    }

测试调用

    @Test
    public void testAddData5(){
        EldData eldData=new GeneralData(1.8,60);
        eldData.setDate(date);
        dataService.addData(userId,action,eldData);
        testSearchMap(action);

    }
    @Test
    public void testRemoveData5() {
        EldData eldData=new GeneralData(1.8,60);
        eldData.setDate(date);
        System.out.println(dataService.removeData(userId, eldData));
        testSearchMap(action);
    }
    
    @Test
    public void testSearchMap(String action){
        HashMap<String, ArrayList> map = dataService.searchMap(userId,action);
        System.out.println(map);
    }

Service查询

   //返回数据链表
    public HashMap<String,ArrayList> searchMap(Integer userId,String action){
        HashMap<String,ArrayList> map=new LinkedHashMap<>();

        List<EldData> dataList = search(userId,action);

        Class<?> dataClass=null;

        switch (action){
            case "General":         dataClass= GeneralData.class;           break;
            case "BloodPressure":   dataClass= BloodPressureData.class;     break;
            case "BloodRoutine":    dataClass= BloodRoutineData.class;      break;
            case "LiverFunction":   dataClass= LiverFunctionData.class;     break;
            case "RenalFunction":   dataClass= RenalFunctionData.class;     break;
            case "BloodLipid":      dataClass= BloodLipidData.class;        break;
            case "BloodGlucose":    dataClass= BloodGlucoseData.class;      break;
            default: throw new BusinessException(PARAMETER_ERROR,"参数错误");
        }

        // 获取 EldData 子类的所有被ChineseName注解的属性名
        List<String> fieldNames = new ArrayList<>();
        Field[] subDataFields = dataClass.getDeclaredFields();

        for (Field field : subDataFields) {
            //添加是否有注解的判断
            ChineseName chineseNameAnnotation = field.getAnnotation(ChineseName.class);
            if (chineseNameAnnotation!=null){
                fieldNames.add(field.getName());
                map.put(field.getAnnotation(ChineseName.class).value(), new ArrayList<>());
            }
        }

        //添加父类EldData的属性
        List<String> eldDataFieldNames = new ArrayList<>();
        Class<?> eldDataClass=EldData.class;
        Field[] eldDataFields = eldDataClass.getDeclaredFields();

        for (Field field : eldDataFields) {
            //添加是否有注解的判断
            ChineseName chineseNameAnnotation = field.getAnnotation(ChineseName.class);
            if (chineseNameAnnotation!=null){
                eldDataFieldNames.add(field.getName());
                map.put(field.getAnnotation(ChineseName.class).value(), new ArrayList<>());
            }
        }

        for (EldData data : dataList) {
            //添加子类的链表
            for (String fieldName : fieldNames) {
                try {
                    Field field = dataClass.getDeclaredField(fieldName);
                    field.setAccessible(true);
                    ArrayList<Object> rowData =map.get(field.getAnnotation(ChineseName.class).value());
                    rowData.add(field.get(data));

                    map.put(field.getAnnotation(ChineseName.class).value(),rowData);

                } catch (NoSuchFieldException | IllegalAccessException e) {
                    e.printStackTrace();
                }
            }

            //添加父类的链表
            for (String fieldName : eldDataFieldNames) {
                try {
                    Field field = eldDataClass.getDeclaredField(fieldName);
                    field.setAccessible(true);
                    ArrayList<Object> rowData =map.get(field.getAnnotation(ChineseName.class).value());
                    rowData.add(field.get(data));

                    map.put(field.getAnnotation(ChineseName.class).value(),rowData);

                } catch (NoSuchFieldException | IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }


        return map;
    }


    //搜索数据
    public List<EldData> search(Integer userId,String action) {
        String key= ELD_DATA +action+":"+userId;
        Set set = redisTemplate.opsForZSet().reverseRange(key, 0, limit-1);// 获取分数最高的limit个数据
        if(set==null){
            return new ArrayList<>();
        }
        ArrayList<EldData> resList = new ArrayList<>(set);
        Collections.reverse(resList);
        return resList;

    }

Service增删改

 	// 将数据存储到有序集合中,分数为日期的时间戳
    public boolean addData(Integer userId, String action,EldData data) {
        String key= ELD_DATA + action + ":" + userId;
        return redisTemplate.opsForZSet().add(key, data,data.getDate().getTime());
    }

    // 更新数据,先删除数据,后增加新数据
    public boolean updateData(Integer userId,EldData oldData,EldData newData) {
        long res=removeData(userId,oldData);
        if (res==0){
            //没有旧数据,就修改失败
            return false;
        }
        return addData(userId, "",newData);
    }

    // 删除指定的数据
    public long removeData(Integer userId, EldData data) {
        String key= ELD_DATA +userId;
        return redisTemplate.opsForZSet().remove(key, data);
    }


注解

package com.jsss.echarts.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 如果某个属性需要前端展示,就添加`ChineseName`注解 <br>
 * 如果某个属性是横轴数据,其`value`值是`datax` <br>
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ChineseName {

    //中文name
    String value();

}

实体类EldData

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class EldData {


    //横轴的注解的值是datax
    @ChineseName("datax")
    Date date;




}

实体类GeneralData

package com.jsss.echarts.entity;

import com.jsss.echarts.annotation.ChineseName;
import lombok.*;

import java.sql.Date;
import java.text.DecimalFormat;
import java.util.Objects;

/**
 * 通用数据
 */
@Data
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public class GeneralData extends EldData{

    @ChineseName("通用-身高(米)")
    Double HT;

    @ChineseName("通用-体重(千克)")
    Integer WT;

    @ChineseName("通用-身高体重指数(千克/米2)")
    Double BMI;

    public GeneralData(Double HT, Integer WT) {
        this.HT = HT;
        this.WT = WT;
        double value = WT / Math.pow(HT, 2);
        double roundedValue =Math.round(value * 10.0) / 10.0;
        DecimalFormat df = new DecimalFormat("#.0");
        String formattedValue = df.format(roundedValue);
        this.BMI= Double.parseDouble(formattedValue);
    }

//    //横轴的注解的值是datax
//    @ChineseName("datax")
//    Date date;


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        GeneralData that = (GeneralData) o;
        return Objects.equals(HT, that.HT) && Objects.equals(WT, that.WT) && Objects.equals(BMI, that.BMI);
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), HT, WT, BMI);
    }

}

解决

尝试添加了equals和hashCode()方法,还是解决不了

最后

2024-4-14 22:57:01

我们都有光明的未来

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦

相关推荐

  1. redis zremove删除bug

    2024-04-15 07:08:01       28 阅读
  2. redis zremove删除bug

    2024-04-15 07:08:01       37 阅读
  3. conda env list,列出来的环境怎么删除

    2024-04-15 07:08:01       33 阅读
  4. 开发认可bug策略

    2024-04-15 07:08:01       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-15 07:08:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-15 07:08:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-15 07:08:01       82 阅读
  4. Python语言-面向对象

    2024-04-15 07:08:01       91 阅读

热门阅读

  1. 浏览器缓存(强缓存、协商缓存)

    2024-04-15 07:08:01       35 阅读
  2. Android中的Zygote进程介绍

    2024-04-15 07:08:01       25 阅读
  3. 纯Python实现Qt的信号与槽机制

    2024-04-15 07:08:01       31 阅读
  4. 简述框架和函数库的区别

    2024-04-15 07:08:01       37 阅读
  5. typora支持的流程图的语法

    2024-04-15 07:08:01       41 阅读
  6. CSS函数大观:新手入门全面指南

    2024-04-15 07:08:01       34 阅读
  7. 正确处理Go语言中的瞬时资源

    2024-04-15 07:08:01       38 阅读
  8. 课时95:脚本自动化_脚本信号_信号捕捉

    2024-04-15 07:08:01       36 阅读