用于缓存一些固定名称的小组件

项目中,用于缓存姓名、地名、单位名称等一些较固定名称的id-name小组件。用于减少一些表的关连操作和冗余字段。优化代码结构。扩展也方便,写不同的枚举就行了。
具体用法:

{
   
	NameCacheUser.USER.getName(userId);
	NameCacheUser.ACCOUNT.getName(accountId);
	NameCacheUser.OFFICE.getName(officeId);
}
public enum NameCacheUser implements NameCacheBee {
   
    USER(userId -> {
   
        UserMapper userMapper = ZYSpringUtils.getBean(UserMapper.class);
        User user = userMapper.selectById(userId);
        return null != user ? user.getUserName() : null;
    }),
    ACCOUNT(accountId -> {
   
        UserAccountMapper userMapper = ZYSpringUtils.getBean(UserAccountMapper.class);
        UserAccount user = userMapper.selectById(accountId);
        return null != user ? user.getUserName() : null;
    }),
    OFFICE(officeId -> {
   
        OfficeMapper officeMapper = ZYSpringUtils.getBean(OfficeMapper.class);
        Office office = officeMapper.selectById(officeId);
        return null != office ? office.getName() : null;
    });

    private Function<String, String> nameFunction;

    NameCacheUser(Function<String, String> nameFunction) {
   
        this.nameFunction = nameFunction;
    }

    @Override
    public String prefix() {
   
        return this.name().toLowerCase();
    }

    @Override
    public Function<String, String> nameFunction() {
   
        return this.nameFunction;
    }
}
public interface NameCacheBee {
   

    String prefix();

    Function<String, String> nameFunction();

    default void flush(String businessId, String name) {
   
        NameCache.flush(businessId, name, prefix(), nameFunction());
    }

    default String getName(String key) {
   
        return NameCache.getName(key, prefix(), nameFunction());
    }

    default  void remove( String key){
   
      NameCache.remove(prefix(), key);
    }

    default   void remove(List<String> keys){
   
        NameCache.remove(prefix(), keys);
    }
}
@Component
public class NameCache {
   

    public final static String CONSTANT_NAME_CACHE = "constant_name_cache_";

    private static RedisTemplate<String, String> redisTemplate;

    public static void remove(String prefix,String key){
   
        if(ZYStrUtils.isNotNull(key)){
   
            remove(prefix,Collections.singletonList(key));
        }
    }

    public static void remove(String prefix,List<String> keys){
   
        if(ZYListUtils.isEmptyList(keys)){
   
            return;
        }
        String hashKey = toHashKey(prefix);

        Object[] keyObjs=new Object[]{
   keys.size()};
        for (int i=0;i<keyObjs.length;i++){
   
            keyObjs[i]=keys.get(i);
        }
        redisTemplate.opsForHash().delete(hashKey,keyObjs);
    }

    public static String getName(String key, String prefix, Function<String, String> support) {
   
        if (ZYStrUtils.isAnyNull(key, support)) {
   
            return "";
        }
        String hashKey = toHashKey(prefix);

        Object value = redisTemplate.opsForHash().get(hashKey, key);
        if (ZYStrUtils.isNotNull(value)) {
   
            return String.valueOf(value);
        }
        String name = support.apply(key);
        if (ZYStrUtils.isNotNull(name)) {
   
            redisTemplate.opsForHash().put(hashKey, key, name);
            return name;
        }
        return "";
    }

    public static void flush(String key, String name, String prefix, Function<String, String> support) {
   
        String hashKey = toHashKey(prefix);
        if (ZYStrUtils.isNotNull(name)) {
   
            redisTemplate.opsForHash().put(hashKey, key, name);
        } else {
   
            String findName = support.apply(key);
            if (ZYStrUtils.isNotNull(findName)) {
   
                redisTemplate.opsForHash().put(hashKey, key, findName);
            }
        }
    }

    @StringRedisTemplate
    public void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
   
        NameCache.redisTemplate = redisTemplate;
    }

    private static String toHashKey(String prefix) {
   
        return ZYRedisUtils.wrapperKey(CONSTANT_NAME_CACHE + prefix).toLowerCase();
    }

}

在缓存中的效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/868531a473f241e4bf9d7d83bfb551c3.png

在这里插入图片描述
在这里插入图片描述

相关推荐

  1. LINUX固定USB设备名称

    2023-12-06 15:46:04       14 阅读
  2. Teamcenter 修改缓存文件夹名称及路径方法

    2023-12-06 15:46:04       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 15:46:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 15:46:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 15:46:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 15:46:04       20 阅读

热门阅读

  1. 苍穹外卖--在redis中缓存菜品数据,加快查询速度

    2023-12-06 15:46:04       35 阅读
  2. 1091 Acute Stroke (三维搜索)

    2023-12-06 15:46:04       33 阅读
  3. HTML h1和h2的三点区别

    2023-12-06 15:46:04       38 阅读
  4. 如何在centos服务器上安装docker保姆教程

    2023-12-06 15:46:04       32 阅读
  5. 代码随想录二刷 |字符串 |右旋转字符串

    2023-12-06 15:46:04       43 阅读
  6. 深入理解Python包管理工具pip的基本命令和使用

    2023-12-06 15:46:04       28 阅读
  7. Linux ubuntu20.04 安装使用 Intel sgx

    2023-12-06 15:46:04       32 阅读
  8. [Ubuntu 18.04] RK3399搭建NFS服务实现共享目录

    2023-12-06 15:46:04       41 阅读
  9. Linux C语言 33-排序算法

    2023-12-06 15:46:04       37 阅读
  10. Vue学习笔记-activated和deactivated生命周期

    2023-12-06 15:46:04       38 阅读
  11. Unity - yield return相关用法

    2023-12-06 15:46:04       35 阅读
  12. 基于UDP网络聊天室OICQ

    2023-12-06 15:46:04       37 阅读
  13. 在macOS上使用Homebrew安装PHP的完整指南

    2023-12-06 15:46:04       33 阅读