请教spring boot 的redis里面的缓存注解如何使用

看了B站某个视频学习了redis的简单使用,但是里面有上锁的问题比较繁琐,频繁写会麻烦,然后百度了缓存注解的使用,感觉没太明白,不知道如何去写

######这里是代码

String userDaZuoBuffKey = "UserDaZuoBuffByUserId:" + userId;
        UserDaZuoBuff userDaZuoBuff = (UserDaZuoBuff) redisTemplate.opsForValue().get(userDaZuoBuffKey);
        if (userDaZuoBuff == null) {
            synchronized (this.getClass()) {
                userDaZuoBuff = (UserDaZuoBuff) redisTemplate.opsForValue().get(userDaZuoBuffKey);
                if (userDaZuoBuff == null) {
                    userDaZuoBuff = userDaZuoBuffExtendsMapper.findUserDaZuoBuffByUserId(userId);
                    redisTemplate.opsForValue().set(userDaZuoBuffKey, userDaZuoBuff);
                }
            }
        }

######这里是全部代码

   @Override
    public JsonData startDaZuo(Integer userId, String mapName,Integer mapX,Integer mapY) {
        //判断请求是否超时
        String UserStateInfoKey = "UserStateInfoByUserId:" + userId;
        UserStateInfo userStateInfo = (UserStateInfo) redisTemplate.opsForValue().get(UserStateInfoKey);
        if (userStateInfo == null) {
            synchronized (this.getClass()) {
                userStateInfo = (UserStateInfo) redisTemplate.opsForValue().get(UserStateInfoKey);
                if (userStateInfo == null) {
                    userStateInfo = userStateInfoExtendsMapper.findUserStateInfoByUserId(userId);
                    redisTemplate.opsForValue().set(UserStateInfoKey, userStateInfo);
                }
            }
        }
        if (GetTimeUtil.returnTimeNumber(userStateInfo.getReqTime()) < 5000) {
            //超时
            userStateInfo.setReqTime(new Date());
            userStateInfoExtendsMapper.updateByPrimaryKey(userStateInfo);
            return JsonData.buildError("请求过快");
        }
        //获取玩家打坐buff加成表数据
        String userDaZuoBuffKey = "UserDaZuoBuffByUserId:" + userId;
        UserDaZuoBuff userDaZuoBuff = (UserDaZuoBuff) redisTemplate.opsForValue().get(userDaZuoBuffKey);
        if (userDaZuoBuff == null) {
            synchronized (this.getClass()) {
                userDaZuoBuff = (UserDaZuoBuff) redisTemplate.opsForValue().get(userDaZuoBuffKey);
                if (userDaZuoBuff == null) {
                    userDaZuoBuff = userDaZuoBuffExtendsMapper.findUserDaZuoBuffByUserId(userId);
                    redisTemplate.opsForValue().set(userDaZuoBuffKey, userDaZuoBuff);
                }
            }
        }
        //获取玩家等级表数据
        String userLvKey = "UserLvByUserId:" + userId;
        UserLv userLv = (UserLv) redisTemplate.opsForValue().get(userLvKey);
        if (userLv == null) {
            synchronized (this.getClass()) {
                userLv = (UserLv) redisTemplate.opsForValue().get(userLvKey);
                if (userLv == null) {
                    userLv = userLvExtendsMapper.findUserLvByUserId(userId);
                    redisTemplate.opsForValue().set(userLvKey, userLv);
                }
            }
        }
        //获取当前地图数据
        String mapInfoKey = "MapInfoByMapName:" + mapName;
        MapInfo mapInfo = (MapInfo) redisTemplate.opsForValue().get(mapInfoKey);
        if (mapInfo == null) {
            synchronized (this.getClass()) {
                mapInfo = (MapInfo) redisTemplate.opsForValue().get(mapInfoKey);
                if (mapInfo == null) {
                    mapInfo = mapInfoExtendsMapper.findMapInfoByMapName(mapName);
                    redisTemplate.opsForValue().set(mapInfoKey, mapInfo);
                }
            }
        }
        //获取玩家当前坐标数据
        String userMapKey = "UserMapByUserId:" + userId;
        UserMap userMap = (UserMap) redisTemplate.opsForValue().get(userMapKey);
        if (userMap == null) {
            synchronized (this.getClass()) {
                userMap = (UserMap) redisTemplate.opsForValue().get(userMapKey);
                if (userMap == null) {
                     userMap = userMapExtendsMapper.findUserMapByUserId(userId);
                    redisTemplate.opsForValue().set(userMapKey, userMap);
                }
            }
        }
        //修改当前玩家坐标数据
        if (userMap.getMapX()!=mapX||userMap.getMapY()!=mapY){
            userMap.setMapX(mapX);
            userMap.setMapY(mapY);
            userMapExtendsMapper.updateByPrimaryKey(userMap);
            redisTemplate.opsForValue().set(userMapKey,userMap);
        }
        //扣除buff
        //根据buff获得四个增益
        //恢复气血
        //获得灵力
        //获得魂力
        //增加金币

        return null;
    }


请教这种地方如何做更改

这个示例里面加不加锁,好像没啥用也