首页 文章

Apache Ignite唯一约束

提问于
浏览
1

我正在使用Apache Ignite和Spring Data . 我需要一个列“用户名”才能是唯一的 . 事实上,“用户名”是Ignite缓存的关键 . 我认为点燃还没有实现独特的约束 . 使用普通的点燃API,我不确定我是否可以像以下一样锁定:

IgniteCache<String, Integer> cache = ignite.cache("userCache");
Lock lock = cache.lock("username1");
lock.lock();
//check if doesn't exist yet
...

因为“username1”尚不存在 . 还有其他方法吗?

2 回答

  • 1

    Spring Data和SpringTransactionManager的当前解决方案是:

    @Transactional("pessimisticTransactionManager")
    public void create(final User user) throws AlreadyExistsException {
        logger.info("Creating {}", user);
        if(userRepository.findByName(user.getName()).isPresent()) {
            throw new AlreadyExistsException(user.getName() + " already in use.") ;
        }
        userRepository.save(user.getName(), user);      
    }
    

    但是,由于我的系统中名称冲突的可能性很小,因此optimisticTransactionManager也应该可以工作并具有更好的性能 .

  • 0

    我相信你的方法会奏效,但是,你想要达到的目标有一个合适的方法:IgniteCache.putIfAbsent

相关问题