Hi,
  You can use a Stream Receiver(visitor implementation) to intercept
incoming entries and create an expiry policy on the fly.
  see:https://apacheignite.readme.io/docs/data-streamers#streamvisitor


example:
         CacheConfiguration cfg = new CacheConfiguration("wordCache");

        IgniteCache<String, String> wordCache =
ignite.getOrCreateCache(cfg);


        try (IgniteDataStreamer<String, String> stmr =
ignite.dataStreamer(wordCache.getName())) {
            // Allow data updates.
            stmr.allowOverwrite(true);

            // Configure data transformation to count instances of the same
word.
            stmr.receiver(StreamVisitor.from((cache, e) -> {
                String key = e.getKey();
                String val = e.getValue();
                System.out.println("reciever: " + key + " : " + val);
                cache.withExpiryPolicy( new CreatedExpiryPolicy( new
Duration(TimeUnit.SECONDS, 5))).put(key, val);
                cache.put(key+"1", val+"1");

            }));

            String[] text = new String[] {"a", "b", "c"};
            // Stream words into the streamer cache.
            for (String word : text)
                stmr.addData(word, word);
        }

        String[] text = new String[] {"a", "b", "c"};
        // Stream words into the streamer cache.
        for (String word : text)
            System.out.println("before expire word: " +
wordCache.get(word));


        //wait for some entries to expire
        Thread.sleep(10 * 1000L);

        //these entries will be expired
        for (String word : text)
            System.out.println("expired word: " + wordCache.get(word));

        //these will not be expired
        for (String word : text)
            System.out.println("non expired word: " +
wordCache.get(word+"1"));


Thanks, Alex



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to