JAVA中redis增删查以及清理缓存

Controller

@ApiOperation(value = "获取信息放入Redis中")
    @RequestMapping(value = "/getPropertyTakeLookShoppingDetailRedis",method = RequestMethod.POST)
    public JsonResult getPropertyTakeLookShoppingDetailRedis(@RequestBody PropertyTakeLookRedisParam param) throws Exception {
        log.info("PropertyTakeLookController.getPropertyTakeLookShoppingDetailRedis:" + param);
        JSONObject jsonObject = propertyTakeLookWriteService.getPropertyTakeLookShoppingDetailRedis(param);
        log.info("PropertyTakeLookController.getPropertyTakeLookSysInfo:" + jsonObject);
        return JsonResult.getResult(jsonObject);
    }

Service

增删查区分 读缓存 = 0; 添加 =1;删除 = 2 ; 清除相应经纪人清单缓存 = 3 ")

 /**
     * 获取信息放入Redis中 
     * @return
     * @throws Exception
     */
    public JSONObject getPropertyTakeLookShoppingDetailRedis(PropertyTakeLookRedisParam param) throws Exception {
        String takeLookStr = "DKQD";
        checkArgument(StringUtils.isNotBlank(param.getTakeLookUserEmpNo()), "工号不能为空!");
        checkArgument(param.getSelOrAddOrRemove() != null, "增删查区分不能为空!");
        String takeLookUserEmpNo = param.getTakeLookUserEmpNo();
        JSONObject jsonObject;
        if(redisHandle.exists(takeLookUserEmpNo+takeLookStr) && param.getSelOrAddOrRemove() == 0){
            jsonObject = JSONObject.parseObject(redisHandle.get(takeLookUserEmpNo+takeLookStr).toString());
        } else if(param.getSelOrAddOrRemove() == 1 || param.getSelOrAddOrRemove() == 2){
            Long[] effectiveIds = param.getPropertyEffectiveId();
            PropertyTakeLookShoppingCartParam propertyTakeLookShoppingCartParam = new PropertyTakeLookShoppingCartParam();
            BeanUtils.copyProperties(param,propertyTakeLookShoppingCartParam);
            propertyTakeLookShoppingCartParam.setPropertyEffectiveId(effectiveIds);
            //获取信息
            PageInfo<?> takeLookDetail = propertytakelookService.getPropertyTakeLookShoppingCartDetail(propertyTakeLookShoppingCartParam);
            System.out.print("参数查看" + JsonResult.getResult(takeLookDetail).toJson());
            jsonObject = JSONObject.parseObject(JsonResult.getResult(takeLookDetail).toJson());
            Object jsonArray = jsonObject.get("data");
            redisHandle.set(takeLookUserEmpNo+takeLookStr,jsonArray);
        }else if (redisHandle.exists(takeLookUserEmpNo+takeLookStr) && param.getSelOrAddOrRemove() == 3){
            //物理清除缓存
            redisHandle.remove(takeLookUserEmpNo+takeLookStr);
            jsonObject = new JSONObject();
            jsonObject.put("code",ErrorCode.SUCCESS.getCode());
            jsonObject.put("msg",ErrorCode.SUCCESS.getMsg());
        }else {
            jsonObject = new JSONObject();
            jsonObject.put("code",ErrorCode.SUCCESS.getCode());
            jsonObject.put("msg",ErrorCode.SUCCESS.getMsg());
        }
        return jsonObject;
    }
  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java使用Redis定期清理缓存数据,可以通过以下步骤实现: 1. 首先,需要在Java项目引入RedisJava客户端库,比如jedis。 2. 在项目创建一个定时任务,可以使用Spring的@Scheduled注解来实现。 3. 在定时任务,通过jedis客户端库连接Redis,然后使用Redis的命令来删除过期的缓存数据。 4. 可以使用Redis的过期时间机制来自动清理过期的缓存数据。在缓存数据存入Redis时,可以设置过期时间。 以下是Java代码示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; @Component public class CacheCleanupTask { @Autowired private Jedis jedis; @Scheduled(fixedRate = 60000) // 每60秒执行一次 public void cleanupCache() { // 使用Redis的命令来删除过期的缓存数据 jedis.zremrangeByScore("myCache", 0, System.currentTimeMillis()); } } ``` 在上述代码,使用了Spring的@Scheduled注解来表示该方法是一个定时任务。该方法会每60秒执行一次,使用jedis客户端库连接Redis,然后使用Redis的zremrangeByScore命令来删除过期的缓存数据。这里使用了Redis的有序集合来存储缓存数据,其缓存数据的过期时间作为分值,可以使用zremrangeByScore命令来删除过期的缓存数据。 ### 回答2: 在Java,可以使用Redis提供的过期策略来定期清理缓存数据。Redis通过使用过期时间(expiry time)来自动清理过期的缓存数据。 首先,需要确保在Java应用程序配置好Redis的依赖。可以通过Maven或其他构建工具将RedisJava客户端添加到项目。 接下来,通过Java代码使用Redis相关的API来设置缓存数据的过期时间。可以使用Jedis或Lettuce等Java Redis客户端库来实现。例如,使用Jedis客户端可以通过以下方式设置缓存数据的过期时间: ```java Jedis jedis = new Jedis("localhost", 6379); // 创建Jedis客户端连接 jedis.set("key", "value"); // 设置缓存数据 jedis.expire("key", 3600); // 设置缓存数据的过期时间为3600秒,1小时 ``` 以上代码,`expire`方法用于设置缓存数据的过期时间。在这个例子里,缓存数据的过期时间被设置为3600秒,即1小时。当缓存数据的过期时间到达时,Redis会自动清理缓存数据,以释放内存空间。 为了定期清理过期的缓存数据,可以使用Redis的`EXPIRE`命令结合Redis的过期策略进行操作。可以在代码添加一个定时任务,每隔一段时间执行以下操作: ```java Jedis jedis = new Jedis("localhost", 6379); // 创建Jedis客户端连接 Set<String> keys = jedis.keys("*"); // 获取所有缓存数据的key for (String key : keys) { jedis.expire(key, 0); // 通过设置过期时间为0秒触发缓存数据的自动清理 } ``` 以上代码,通过`keys("*")`方法获取到所有缓存数据的key,然后通过`expire`方法将每个缓存数据的过期时间设置为0秒。这会立即触发Redis的过期策略,导致过期的缓存数据被清理。 通过以上方式,可以使用JavaRedis配合定期清理缓存数据。你可以根据具体的业务场景和需求来设置合适的过期时间和定时任务执行频率。 ### 回答3: 在Java使用Redis定期清理缓存数据,可以通过以下步骤进行操作: 1. 首先,需要在Java应用程序引入Redis的相关依赖包。可以使用Maven或Gradle等构建工具来管理依赖关系。 2. 在Java代码,使用Jedis或Lettuce等Redis客户端库连接到Redis服务器。 3. 创建一个定时任务,使用Java的定时任务框架,如Quartz或Spring的任务调度器,来定期执行缓存清理操作。 4. 在定时任务,使用Redis的KEYS命令或SCAN命令获取所有缓存键。可以通过设置特定的缓存键前缀来区分不同类型的缓存数据。 5. 遍历所有缓存键,并使用DEL命令删除过期的缓存数据。可以使用TTL命令获取键的剩余生存时间,并根据需求来判断是否过期。 6. 可以根据需要,设置定时任务的执行频率,如每小时、每天或每周执行一次。 7. 定期清理缓存数据的时间间隔可以根据业务需求和缓存数据的生命周期来设定。较长的时间间隔可以降低对Redis服务器的压力,但可能会导致缓存数据存留时间较长,而较短的时间间隔可能会增加对服务器的负载。 需要注意的是,由于Redis的单线程特性,定期清理大量缓存数据可能会影响Redis服务器的性能。因此,可以考虑使用分布式缓存或搭建Redis集群来提高性能和可靠性。同时,在进行定期清理操作时,应尽量减少对Redis服务器的访问频率,以免对其他正常业务操作造成影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值