中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

keycloak~緩存(cun)的使(shi)用(yong)

keycloak緩存(cun)的(de)(de)級別,往(wang)大了(le)說有realm級的(de)(de),一個(ge)realm是(shi)一個(ge)緩存(cun),這也(ye)(ye)是(shi)它的(de)(de)生(sheng)命周期;往(wang)小了(le)說,也(ye)(ye)有user級的(de)(de),即一個(ge)用戶(hu)一個(ge)緩存(cun),當a用戶(hu)和(he)b用戶(hu),它們的(de)(de)緩存(cun)是(shi)兩個(ge)。

緩存提供者

InfinispanConnectionProvider是一個接口,主要是對infinispan緩存的規定,有默認的實現DefaultInfinispanConnectionProvider,它(ta)內包含了嵌入的(de)(de)infinispan緩(huan)存和遠程的(de)(de)infinispan,分為兩個(ge)獨立的(de)(de)方(fang)法getCache和getRemoteCache,我們根據自己的(de)(de)情況而(er)用。

緩存級別

  • KEYS_CACHE_NAME key的字典緩存
  • REALM_CACHE_NAME 域的數據緩存
  • USER_CACHE_NAME 每個用戶的緩存

緩存使用

下面是一(yi)(yi)個標(biao)準的緩存邏輯代碼(ma),功能(neng)是為域添加一(yi)(yi)個緩存,叫USER_IP_ADDRESS,存儲ip的字(zi)典信息

 public static List<GroupAttributeEntity> getIpFromCache(KeycloakSession session) {
    InfinispanConnectionProvider provider = session.getProvider(InfinispanConnectionProvider.class);
    // 注意:REALM_CACHE_NAME表示域級別的緩存,USER_CACHE_NAME是用戶級別的,咱們這個使用域緩存即可
    if (provider.getCache(REALM_CACHE_NAME) != null) {
      if (!provider.getCache(REALM_CACHE_NAME).containsKey(USER_IP_ADDRESS)) {
        provider.getCache(REALM_CACHE_NAME).put(USER_IP_ADDRESS, getIpListFromDb(session), 24, TimeUnit.HOURS);
      }
      List<GroupAttributeEntity> ipList = (List<GroupAttributeEntity>) provider.getCache(REALM_CACHE_NAME).get(USER_IP_ADDRESS);
      return ipList;
    }
    return getIpListFromDb(session);
  }

之前(qian)犯了一(yi)個很傻的錯誤,把(ba)REALM_CACHE_NAME寫成了USER_CACHE_NAME,導(dao)致每(mei)個用(yong)戶(hu)都存了一(yi)份IP字典,這完全是沒有必(bi)要的。

posted @ 2021-10-28 17:42  張占嶺  閱讀(753)  評論(0)    收藏  舉報