<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ImcacheJava 緩存框架

          聯(lián)合創(chuàng)作 · 2023-09-29 06:13

          Imcache是一個(gè)新的Java緩存庫包,它支持各種已應(yīng)用至今高速緩存模型。Imcache打算通過提供管理緩存數(shù)據(jù)的方法,以加快應(yīng)用程序。它提供了從小型應(yīng)用到大規(guī)模應(yīng)用解決方案。

          支持堆外off-heap是其特點(diǎn),這大概是hazelcast和guava沒有的,而 Terrcotta BigMemory則是收費(fèi)的。堆外內(nèi)存突破JVM的內(nèi)存限制,而且不受垃圾機(jī)制影響。

          BigMemory是用來避免GC對(duì)堆的開銷,從幾MB或GB大。 BigMemory通過直接的ByteBuffers使用JVM進(jìn)程的內(nèi)存地址空間,不像其他原生Java對(duì)象接受GC管束。

          堆是內(nèi)存中動(dòng)態(tài)分配對(duì)象居住的地方。如果使用new一個(gè)對(duì)象,它就被分配在堆內(nèi)存上。這是相對(duì)于Stack,如果你有一個(gè)局部變量則它是位于Stack棧內(nèi)存空間。 

          EHCache的 off-heap將你的對(duì)象從堆中脫離出來序列化,然后存儲(chǔ)在一大塊內(nèi)存中,這就像它存儲(chǔ)到磁盤上上一樣,但它仍然在RAM中。對(duì)象在這種狀態(tài)下不能直接使用,它們必須首先反序列化。也不受垃圾收集。序列化和反序列化會(huì)影響性能。(FST-serialization還是很快)。

          使用堆外內(nèi)存能夠降低GC導(dǎo)致的暫停。

          應(yīng)用場(chǎng)景:
          1.Session會(huì)話緩存,保存不激活的用戶session,比如用戶沒有正常退出,我們也無法確定他會(huì)不會(huì)短時(shí)間內(nèi)再回來,將其會(huì)話存到堆外內(nèi)存。一旦再次登錄,無需訪問數(shù)據(jù)庫可再次激活。

          2.計(jì)算結(jié)果的緩存,大量查詢的結(jié)果等,擊中率比較低的都可以遷移到堆外。

          maven依賴包:

          <dependency>
            <groupId>com.cetsoft</groupId>
            <artifactId>imcache</artifactId>
            <version>0.1.0</version><!--Can be updated for later versions-->
          </dependency>

          Imcache支持堆內(nèi)和堆外off-heap 緩存,也將支持分布式緩存。
          使用方式:

          Cache<String,User> cache = CacheBuilder.heapCache().
          cacheLoader(new CacheLoader<String, User>() {
              public User load(String key) {
                  return userDAO.get(key);
              }
          }).evictionListener(new EvictionListener<String, User>{
              public onEviction(String key, User user){
                  userDAO.save(key, user);
              }
          }).capacity(10000).build();
          //If there is not a user in the heap cache it'll be loaded via userDAO.
          User user = cache.get("#unique identifier"); 
          User newUser = new User("email", "Richard", "Murray")
          //When maximum value for cache size is reached, eviction event occurs.
          //In case of eviction, newUser will be saved to db.
          cache.put(newUser.getEmail(), newUser);
          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操逼网站免费看无遮挡 | 国产精品久久久久久久久借妻 | a在线免费观看 | 成人性爱视频免费网站 | 国产日产精品一区二区三区四区 |