类 UserRoleCache

java.lang.Object
net.sohelp.boot.admin.core.cache.UserRoleCache
所有已实现的接口:
ISohelpCache

@Component public class UserRoleCache extends Object implements ISohelpCache
用户岗位缓存(永不过期,按需失效)

Key 规则:"{userId}" → 岗位 ID 字符串列表 JSON。 NONE 模式每次直接查库。

该缓存组件负责管理用户所属的岗位(角色)ID 列表。管理员和开发者 自动拥有其所在租户下的全部岗位;普通用户则根据 pb_user_role 表中的关联记录获取已分配的岗位。缓存采用懒加载策略,首次访问时 从数据库加载并写入缓存。

从以下版本开始:
2023/12/28 10:33
作者:
AaronFung
  • 构造器详细资料

    • UserRoleCache

      public UserRoleCache()
  • 方法详细资料

    • init

      @PostConstruct public void init()
      初始化缓存提供者。

      在 Bean 构造完成后自动调用,通过 SohelpCacheManager 创建 名称为 "user_role"、永不过期(TTL=0)的缓存提供者。

    • cacheName

      public String cacheName()
      获取缓存名称。
      指定者:
      cacheName 在接口中 ISohelpCache
      返回:
      缓存名称字符串 "user_role"
    • cacheDescription

      public String cacheDescription()
      获取缓存的中文描述信息。
      指定者:
      cacheDescription 在接口中 ISohelpCache
      返回:
      缓存描述字符串 "用户岗位缓存"
    • reload

      public void reload()
      重新加载整个缓存。

      清空所有已缓存的用户岗位数据,下次访问时将重新从数据库加载。

      指定者:
      reload 在接口中 ISohelpCache
    • get

      @Comment("\u6839\u636e\u7528\u6237ID\u83b7\u53d6\u5c97\u4f4d\u5217\u8868") public List<String> get(@Comment("\u7528\u6237ID") Long userId)
      获取指定用户的岗位ID列表。

      当缓存提供者处于 NONE 模式时,每次调用都直接查询数据库; 否则先检查缓存是否命中,未命中则触发 reload(Long) 加载后返回。

      参数:
      userId - 用户ID,不能为 null
      返回:
      该用户所属的岗位ID字符串列表,若查询失败则返回空列表
    • remove

      @Comment("\u5220\u9664\u7528\u6237\u7f13\u5b58") public void remove(@Comment("\u7528\u6237ID") long userId)
      删除指定用户的岗位缓存。

      从缓存中移除该用户的岗位数据,下次访问时将重新从数据库加载。

      参数:
      userId - 用户ID
    • reload

      @Comment("\u91cd\u65b0\u52a0\u8f7d") public void reload(@Comment("\u7528\u6237ID") Long userId) throws SQLException
      根据用户ID重新从数据库加载岗位信息并写入缓存。

      先删除旧缓存,然后查询用户所属岗位列表,写入缓存。 使用 synchronized 保证同一时刻只有一个线程执行加载。

      参数:
      userId - 用户ID,不能为 null
      抛出:
      SQLException - 当数据库查询失败时抛出