• keycloak~缓存的使用


    keycloak缓存的级别,往大了说有realm级的,一个realm是一个缓存,这也是它的生命周期;往小了说,也有user级的,即一个用户一个缓存,当a用户和b用户,它们的缓存是两个。

    缓存提供者

    InfinispanConnectionProvider是一个接口,主要是对infinispan缓存的规定,有默认的实现DefaultInfinispanConnectionProvider,它内包含了嵌入的infinispan缓存和远程的infinispan,分为两个独立的方法getCache和getRemoteCache,我们根据自己的情况而用。

    缓存级别

    • KEYS_CACHE_NAME key的字典缓存
    • REALM_CACHE_NAME 域的数据缓存
    • USER_CACHE_NAME 每个用户的缓存

    缓存使用

    下面是一个标准的缓存逻辑代码,功能是为域添加一个缓存,叫USER_IP_ADDRESS,存储ip的字典信息

     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);
      }
    

    之前犯了一个很傻的错误,把REALM_CACHE_NAME写成了USER_CACHE_NAME,导致每个用户都存了一份IP字典,这完全是没有必要的。

  • 相关阅读:
    Centos下安装FastDFS
    elasticsearch5.6.8安装和配置
    maven利用插件发布项目到tomcat
    vue-cli安装以及mongodb原生操作
    J2EE基础
    Debian Gun/linux基本用法
    SpringCloud 中如何使微服务只能被指定的程序调用
    CentOS 使用Docker 部署多台Springboot程序,并用Nginx做负载均衡
    CentOS上没有ifcofig命令
    CentOS yum安装时报错 yum install cannot find a vaild baseur
  • 原文地址:https://www.cnblogs.com/lori/p/15476886.html
Copyright © 2020-2023  润新知