点燃 loadCache() 并写在后面

如何解决点燃 loadCache() 并写在后面

我们正在使用 Ignite,对于这个特定的缓存,当项目添加到缓存时,我们希望使用后写在 RDBMS 中插入新行。

问题在于,我们希望最初使用现有行加载缓存。

目前 Ignite 尝试写入加载在 cache.loadCache() 中的项目,这显然不是预期的行为。我想以某种方式表明这些项目不需要持久化。

我的搜索没有找到任何有用的信息,如果可以,请提供建议。非常感谢!

解决方法

IgniteCache#loadCache 应该忽略 writeThrough,换句话说,通过 loadCache 方法加载的记录不应插入到 RDBMS。

第二个选项是使用通过 IgniteCache#witkSkipStore() 或 IgniteDataStreamer#skipStore 获得的缓存/数据流器实例手动加载数据。

public class CacheStoreExample {
public static void main(String[] args) {
    Ignite ignite = Ignition.start(
        new IgniteConfiguration()
            .setCacheConfiguration(new CacheConfiguration("cache")
                .setWriteThrough(true)
                .setWriteBehindEnabled(true)
                .setCacheStoreFactory(new Factory<CacheStore>() {
                    @Override public CacheStore create() {
                        return new CacheStoreAdapter() {
                            @Override public void loadCache(IgniteBiInClosure clo,Object... args) {
                                System.out.println("Loading cache with single a single key/value:");
                                clo.apply(1,1);
                            }
                            @Override public Object load(Object key) throws CacheLoaderException {return null; }
                            @Override public void write(Cache.Entry entry) throws CacheWriterException {
                                System.out.println("Writing entry: "+entry);
                            }
                            @Override public void delete(Object key) throws CacheWriterException {}
                        };
                    }
                })
    ));

    IgniteCache<Object,Object> cache = ignite.cache("cache");

    cache.loadCache((k,v) -> true);
    System.out.println("The first record:"+cache.get(1));

    System.out.println("Put operation skipping store");
    cache.withSkipStore().put(2,2);
    System.out.println("The second records:"+cache.get(2));

    System.out.println("Put operation with write trough");
    cache.put(3,3);
    System.out.println("The third record:"+cache.get(3));
}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?