当前位置: 首页 > news >正文

《商务网站开发》 实训报告书网站建设需要些什么东西

《商务网站开发》 实训报告书,网站建设需要些什么东西,最新军事新闻热点事件,wordpress显示分类目录在项目开发中,经常会碰到一些数据量小、但使用频率极高的数据。比如,团队到BU的映射表。此类数据通常不会变动,使用频率高且数据量较小,如果每次使用都去数据库查询,代价比较大,可以考虑在项目启动时将此类…

在项目开发中,经常会碰到一些数据量小、但使用频率极高的数据。比如,团队到BU的映射表。此类数据通常不会变动,使用频率高且数据量较小,如果每次使用都去数据库查询,代价比较大,可以考虑在项目启动时将此类数据加载到缓存中,并定时进行增量更新

项目中本身没有用redis,也没必要上,java的本地缓存完全可以满足需求。当然,数据量较大的情况下,还是不推荐这样使用的,可能会造成OOM。

下面是一个缓存的抽象类,子类继承并实现toHandler()方法后,相关数据就会在项目启动时被加载到缓存中,然后通过getEntityById()方法获取。

public abstract class BaseCache<T> {// 用于定时执行更新任务ScheduledExecutorService timer = Executors.newSingleThreadScheduledExecutor();// map存储数据Map<Object, T> cacheMap = new HashMap<>();BaseMapper<T> baseDao;// 用于记录上一次缓存更新的时间protected Date currentTime = DateUtil.getDate(2000, 1, 1);public BaseCache() {this.baseDao = baseDao;//定时获取缓存timer.scheduleAtFixedRate(() -> {List<T> results = getList();if (results.size() > 0) {T result = results.get(results.size() - 1);if (result instanceof Map) {currentTime = (Date) ((Map) result).get("DataChange_LastTime");} else {currentTime = (Date) ReflectionUtils.getFieldValue(result, "datachangeLasttime");}toHandler(results);}}, 1000, 1000, TimeUnit.MILLISECONDS);   // 时间可以根据业务需要进行变更}// 根据数据变更时间,获取增量数据protected List<T> getList() {QueryWrapper<T> queryWrapper = new QueryWrapper<>();queryWrapper.gt("DataChange_LastTime", currentTime);queryWrapper.orderByAsc("DataChange_LastTime");return baseDao.selectList(queryWrapper);}// 此抽象方法由子类实现,往缓存中(cacheMap)存放所需要的值protected abstract void toHandler(List<T> results);// 从缓存中获取数据public T getEntityById(Object id) {return cacheMap.get(id);}
}

下面是一个BaseCache的子类,功能是将userid和username放入内存进行映射,并提供【根据id获取name】和【根据name获取id】两个get方法。

ps: 实际业务代码肯定不是这种鸡肋的内容啦,数据脱敏。

UserCache类被@Repository@Lazy注解修饰,在第一次被用到的时候会被注入到IOC容器中,此时会调用其(父类BaseCache)构造函数,开始执行定时任务,调用toHandler()方法,将数据存入idCacheMap中。

因为业务的需要,既要通过key获取到value,又要通过value获取到key,因此我在这里没有复用父类中的map,而是添加了一个BiMap

@Lazy
@Repository
public class UserCache extends BaseCache<User>{// Map<userid, username>private BiMap<Long, String> idCacheMap = HashBiMap.create();@Autowiredpublic void setDao(UserDao entityDao) {this.baseDao = entityDao;}@Overrideprotected void toHandler(List<User> results) {results.stream().forEach(p -> {this.idCacheMap.put(p.getUserid(), p.getUserName());});}public Long getUsername(Long userid) {return idCacheMap.get(userid);}public Long getUserid(String username) {return idCacheMap.inverse().get(username);}
}
http://www.yayakq.cn/news/796554/

相关文章:

  • 腾讯 网站建设时尚网站
  • 北京网站设计与网站制作最佳的资源搜索引擎
  • 灯具网站模板服装设计公司有什么职位
  • 程序员做项目的网站网站建设分为什么
  • asp 建站1688域名网站
  • 手机网站开发最好用的框架建筑设计单位有哪些公司
  • 关于建立网站的思路旅游网络营销的特点有
  • 轮播网站兰州市做网站的公司有哪些
  • 手表网站建设济宁专业网站开发公司
  • php商业网站制作创新创意产品设计作业
  • 如何做网站的下载的二维码在百度上建网站怎么建设
  • 做网站资讯运营h5编辑软件
  • 网站更新维护 怎么做乐清市腾速网络科技有限公司
  • 做图片类型网站需要什么服务器wordpress添加友情练级
  • 建设银行支付宝网站wordpress 演示站
  • 洛阳网站建设联系方式学做美食视频在哪个网站
  • 杭州有哪些互联网公司网站建设优化服务精英
  • 中山精品网站建设流程网站开发接口
  • 网站设计的特点做门户网站最重要的是什么
  • 巩义建设网站网站首页被k
  • 搜索引擎网站入口汽车网站有哪些
  • 二手书交易网站开发背景wordpress缩略图插件
  • 分类网站怎么做项目app开发的公司
  • wordpress搭建商城网站专业购物网站建设
  • 做网站能带来什么如何做网站赚钱
  • 购物网站制作费用微信公众号推广目的
  • 郑州专业做网站企业小白怎么做跨境电商
  • 干事儿网网站开发自己创建网站要钱吗
  • 网站建设市场分析2015WordPress改造成mip
  • 郑州建网站多少文章做模板 wordpress