此内容没有您所选择的语言版本。

Chapter 7. Hints for program developers


There are also several hints for developers which can be easily applied to the client application and will boost up the performance.

7.1. Ignore return values

When you’re not interested in returning value of the #put(k, v) or #remove(k) method, use Flag.IGNORE_RETURN_VALUES flag as shown below:

Using Flag.IGNORE_RETURN_VALUES

Cache noPreviousValueCache = cache.getAdvancedCache().withFlags(Flag.IGNORE_RETURN_VALUES);
noPreviousValueCache.put(k, v);
Copy to Clipboard Toggle word wrap

It is also possible to set this flag using ConfigurationBuilder

Using ConfigurationBuilder settings

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.unsafe().unreliableReturnValues(true);
Copy to Clipboard Toggle word wrap

7.2. Use Externalizer for marshalling

Red Hat Data Grid uses JBoss Marshalling to transfer objects over the wire. The most efficient way to marshall user data is to provide an AdvancedExternalizer. This solutions prevents JBoss Marshalling from sending class name over the network and allows to save some bandwidth:

User entity with Externalizer

import org.infinispan.marshall.AdvancedExternalizer;

public class Book {

   final String name;
   final String author;

   public Book(String name, String author) {
      this.name = name;
      this.author = author;
   }

   public static class BookExternalizer
            implements AdvancedExternalizer<Book> {

      @Override
      public void writeObject(ObjectOutput output, Book book)
            throws IOException {
         output.writeObject(book.name);
         output.writeObject(book.author);
      }

      @Override
      public Person readObject(ObjectInput input)
            throws IOException, ClassNotFoundException {
         return new Person((String) input.readObject(), (String) input.readObject());
      }

      @Override
      public Set<Class<? extends Book>> getTypeClasses() {
         return Util.<Class<? extends Book>>asSet(Book.class);
      }

      @Override
      public Integer getId() {
         return 2345;
      }
   }
}
Copy to Clipboard Toggle word wrap

The Externalizer must be registered in cache configuration. See configuration examples below:

Adding Externalizer using XML

<cache-container>
   <serialization>
      <advanced-externalizer class="Book$BookExternalizer"/>
   </serialization>
</cache-container>
Copy to Clipboard Toggle word wrap

Adding Externalizer using Java

GlobalConfigurationBuilder builder = ...
builder.serialization().addAdvancedExternalizer(new Book.BookExternalizer());
Copy to Clipboard Toggle word wrap

7.3. Storing Strings efficiently

If your strings are mostly ASCII, convert them to UTF-8 and store them as byte[]:

  • Using String#getBytes("UTF-8") allows to decrease size of the object
  • Consider using G1 GC with additional JVM flag -XX:+UseStringDeduplication. This allows to decrease memory footprint (see JEP 192 for details).

7.4. Use simple cache for local caches

When you don’t need the full feature set of caches, you can set local cache to "simple" mode and achieve non-trivial speedup while still using Red Hat Data Grid API.

This is an example comparison of the difference, randomly reading/writing into cache with 2048 entries as executed on 2x8-core Intel® Xeon® CPU E5-2640 v3 @ 2.60GHz:

Expand
Table 7.1. Number of operations per second (± std. dev.)
Cache typesingle-threaded cache.get(…​)single-threaded cache.put(…​)32 threads cache.get(…​)32 threads cache.put(…​)

Local cache

14,321,510 ± 260,807

1,141,168 ± 6,079

236,644,227 ± 2,657,918

2,287,708 ± 100,236

Simple cache

38,144,468 ± 575,420

11,706,053 ± 92,515

836,510,727 ± 3,176,794

47,971,836 ± 1,125,298

CHM

60,592,770 ± 924,368

23,533,141 ± 98,632

1,369,521,754 ± 4,919,753

75,839,121 ± 3,319,835

The CHM shows comparison for ConcurrentHashMap from JSR-166 with pluggable equality/hashCode function, which is used as the underlying storage in Red Hat Data Grid.

Even though we use JMH to prevent some common pitfals of microbenchmarking, consider these results only aproximative. Your mileage may vary.

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部