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

项目中,用于缓存姓名、地名、单位名称等一些较固定名称的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;}@Overridepublic String prefix() {return this.name().toLowerCase();}@Overridepublic 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);}}}@StringRedisTemplatepublic 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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel合并单元格教程

在表格里&#xff0c;总是会遇到一级表格、二级表格的区别&#xff0c;这时候一级表格会需要合并成一个大格子&#xff0c;那么excel如何合并单元格呢&#xff0c;其实使用快捷键或者功能键就可以了。 excel如何合并单元格&#xff1a; 1、首先我们用鼠标选中所有要合并的单元…

最大公约数的C语言实现xdoj31

时间限制: 1 S 内存限制: 1000 Kb 问题描述: 最大公约数&#xff08;GCD&#xff09;指某几个整数共有因子中最大的一个&#xff0c;最大公约数具有如下性质&#xff0c; gcd(a,0)a gcd(a,1)1 因此当两个数中有一个为0时&#xff0c;gcd是不为0的那个整数&#xff…

Redis编码类型及对应含义

对象类型编码类型(encoding)取值范围Stringintlong长度范围内的数字embstr长度小于40的value值。数字和字符。raw长度大于40的value值Listziplist所有元素长度小于64字节&#xff0c;并且列表元素的个数小于512个linkedlist不满足ziplist的数据Setintset纯数字&#xff0c;列表…

分治法之查找最大值

思路: 定义一个递归函数 findMax&#xff0c;它接受三个参数&#xff1a;数组 arr、起始位置 start 和结束位置 end。如果 start 等于 end&#xff0c;说明数组中只有一个元素&#xff0c;直接返回该元素的值作为最大值。否则&#xff0c;计算数组的中间位置 mid&#xff0c;可…

XXL-Job详解(一):组件架构

目录 XXL-Job特性系统组成架构图调度模块剖析任务 “运行模式” 剖析执行器 XXL-Job XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 特性 1、简单&#…

java+springboot实验室管理系统的设计与实现ssm+jsp

课题研究内容&#xff1a; &#xff08;1&#xff09; 系统需求分析&#xff08;构成模块&#xff0c;系统流程&#xff0c;功能结构图&#xff0c;系统需求&#xff09; &#xff08;2&#xff09; 实验室课程安排功能模块&#xff08;课程的录入和调补&#xff09; &#xff…

prompt提示

用例生成 # 任务描述 作为一个高级c程序员&#xff0c;需要完成下列功能的gtest测试用例 # 功能描述 给定两个数字型字符串s1和s2,求和&#xff0c;返回值也是字符串 # 接口举例 调用strAdd("123", "132"),输出“255” # 输出要求 - 入参为空串、nu…

wyler水平仪维修WYLER倾角仪维修CH-8405

瑞士WYLER电子水平仪维修&#xff1b;BIueCLINO倾斜度测量仪维修&#xff1b;wyler电子倾角仪维修。 水平仪常见故障及处理方法 1、 仪表通电不工作。 A、检查仪表220V电源端子接线是否正确 B、检查仪表电容是否熔断&#xff1b; C、拧下仪表后的固定螺钉&#xff0c;将表…

王道数据结构课后代码题p40 4.在带头结点的单链表L中删除一个最小值结点的高效算法(假设最小值唯一) (c语言代码实现)

本题代码为 void deletemin(linklist* L)//找到最小值并删除 {lnode* p (*L)->next, * pre *L;lnode* s p,*sprepre;while (p ! NULL)//找到最小值{if (p->data < s->data){s p;spre pre;}p p->next;pre pre->next;}p s->next;spre->next p;…

有IP没有域名可以申请证书吗?

一、IP证书是什么&#xff1f; ip证书是用于公网ip地址的SSL证书&#xff0c;与我们通常所讲的SSL证书并无本质上的区别&#xff0c;但由于SSL证书通常颁发给域名&#xff0c;而组织机构需要公共ip地址的SSL证书&#xff0c;这类SSL证书就是我们所说的ip证书。ip证书具有安全、…

仅仅通过提示词,GPT-4可以被引导成为多个领域的特定专家

The Power of Prompting&#xff1a;提示的力量&#xff0c;仅通过提示&#xff0c;GPT-4可以被引导成为多个领域的特定专家。微软研究院发布了一项研究&#xff0c;展示了在仅使用提策略的情况下让GPT 4在医学基准测试中表现得像一个专家。研究显示&#xff0c;GPT-4在相同的基…

查看代码运行时间

#include<bits/stdc.h> signed main() {clock_t start_time clock();std::cout<<"hello\n";double tot_time double(clock() - start_time) / 1000; std::cout << "\n代码跑了" << tot_time << "秒";return 0; …

上海毅速丨新材料将推动3D打印在压铸行业的应用

压铸是一种应用广泛的制造工艺&#xff0c;它的制造原理是将液态或半液态金属&#xff0c;在高压作用下&#xff0c;以高速度填充压铸模具型腔&#xff0c;并在压力下快速凝固而获得铸件的一种方法。压铸模的设计和制造需要考虑到多方面的因素&#xff0c;如模具材料、结构、冷…

Java部署服务 Java -jar命令讲解

1. 当前ssh窗口被锁定&#xff0c;可按CTRL C打断程序运行&#xff0c;或直接关闭窗口&#xff0c;程序退出 #正常启动jar包 java -jar XXX.jar#当前ssh窗口被锁定&#xff0c;可按CTRL C打断程序运行&#xff0c;或直接关闭窗口&#xff0c;程序退出。 2. 当前ssh窗口不被锁…

探讨几种在CentOS 7上实现文件上传的方法

最近服务器过期了&#xff0c;把之前服务器的数据库都备份了下来&#xff0c;现在准备迁移各种服务&#xff0c;这就涉及到文件传输。之前用得多的都是xshell里的xtp来传&#xff0c;校园网禁用了ssh协议&#xff0c;还有一大堆乱七八糟的协议&#xff0c;我一般用的代理方法或…

redis sentinel 错误处理

环境 redis-ha主从部署到了k8s上 主从报错日志 主库日志 1:M 29 Nov 2023 07:00:19.277 # Diskless rdb transfer, done reading from pipe, 1 replicas still up. 1:M 29 Nov 2023 07:00:20.058 * Background RDB transfer terminated with success 1:M 29 Nov 2023 07:00…

利用python编写后端程序 通用代码详解 项目实现

前言 最近自己正好有时间&#xff0c;想要自己搭建微信小程序&#xff0c;也正好记录一下自己的搭建过程和内容。 搭建准备工作 这里我使用的时pycharm编辑器。在后端开发中&#xff0c;我们需要三个库&#xff1a; import pymysql from flask import request, Fl…

设计模式详解(二):抽象工厂——Abstract Factory

目录导航 抽象工厂及其作用工厂方法的好处工厂方法的实现关系图实现步骤 工厂方法的适用场景工厂方法举例 抽象工厂及其作用 工厂方法是一种创建型设计模式。所谓创建型设计模式是说针对创建对象方面的设计模式。在面向对象的编程语言里&#xff0c;我们通过对象间的相互协作&…

SAP SD 创建交货单 报错 VL461 VL248

因为生产环境已经被改好了&#xff0c;无法跟踪 所以换到测试环境重现一把&#xff0c;如何追根究底 对比正常订单发现 计划行 VBEP-LMENG,VBEP-BMENG这两个字段上的值跟 订单数量不一致。 尝试修改2者的数据跟订单数据一致&#xff0c;则可以正常创建交货单 实际原因是&a…

【每日一坑】KiCAD导Gerber 文件

第一&#xff0c;软件版本 第二、操作选择注意点 第三&#xff0c;那个坑。。。 不知道什么原因&#xff0c;这第二个框里会选其他不必要得一些东西&#xff0c;导致最终光绘是废的&#xff1b; 一定切记只选edge.cut就好了。 最后&#xff0c;上Gerber图&#xff0c;还有一点…