Junjie
2023-10-19 191f08b7a74c461d1914652aed737888967a69f1
#地图增加分布式锁
2个文件已修改
34 ■■■■■ 已修改文件
src/main/java/com/zy/common/utils/NavigateMapData.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/RedisUtil.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -241,6 +241,11 @@
     */
    public boolean writeNavigateNodeToRedisMap(List<NavigateNode> nodes, boolean lock) {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        try {
            if (!redisUtil.tryLock("realtimeBasMap_" + lev)) {
                return false;//加锁失败
            }
        Object o = redisUtil.get("realtimeBasMap_" + lev);
        if (o == null) {
            return false;
@@ -275,6 +280,12 @@
        basMap.setUpdateTime(new Date());
        //将数据库地图数据存入redis
        redisUtil.set("realtimeBasMap_" + lev, JSON.toJSONString(basMap));
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //解锁
            redisUtil.unlock("realtimeBasMap_" + lev);
        }
        return true;
    }
src/main/java/com/zy/common/utils/RedisUtil.java
@@ -1,5 +1,6 @@
package com.zy.common.utils;
import com.baomidou.mybatisplus.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
@@ -25,11 +26,33 @@
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    private static final String LOCK_PREFIX = "lock:";
    private static final long DEFAULT_EXPIRE_TIME = 10; // 默认锁过期时间,单位为分钟
    public RedisUtil(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
    /**
     * Redis加锁的操作
     */
    public Boolean tryLock(String key) {
        String redisKey = LOCK_PREFIX + key;
        return redisTemplate.opsForValue().setIfAbsent(redisKey, "locked", DEFAULT_EXPIRE_TIME, TimeUnit.MINUTES);
    }
    /**
     * Redis解锁的操作
     */
    public void unlock(String lockKey) {
        String redisKey = LOCK_PREFIX + lockKey;
        redisTemplate.delete(redisKey);
    }
    /**
     * 指定缓存失效时间
     *
     * @param key  键