zoukankan      html  css  js  c++  java
  • DataCache 批量的好方法

    实例

    public class HbaseDataCache2Db {
        private static Logger LOG = LoggerFactory.getLogger(HbaseDataCache2Db.class);
        private static ThreadLocal<Map<String, List<Put>>> THREAD_DATA = new ThreadLocal<>();
    
        public static void cacheData(String key, Put put) {
            Map<String, List<Put>> cacheMap = THREAD_DATA.get();
            if (cacheMap == null) {
                cacheMap = new HashMap<>();
            }
            List<Put> tmp = cacheMap.get(key);
            if (tmp == null) {
                tmp = new ArrayList<>();
            }
            tmp.add(put);
            cacheMap.put(key, tmp);
            THREAD_DATA.set(cacheMap);
        }
    
        public static void flushData() {
            try {
                Map<String, List<Put>> cacheMap = THREAD_DATA.get();
                if (cacheMap == null) {
                    return;
                }
                for (String tableName : cacheMap.keySet()) {
                    HbaseUtil.putData(tableName, cacheMap.get(tableName));
                }
                cacheMap.clear();
                THREAD_DATA.set(cacheMap);
            } catch (Exception e) {
                LOG.error("Hbase 数据写入异常:", e);
            }
        }
    
    
        public static void cacheData(Map<String, List<Put>> cacheMap, String key, Put put) {
            List<Put> tmp = cacheMap.get(key);
            if (tmp == null) {
                tmp = new ArrayList<>();
            }
            tmp.add(put);
            cacheMap.put(key, tmp);
        }
    
        public static void flushData(Map<String, List<Put>> cacheMap) {
            try {
                for (String tableName : cacheMap.keySet()) {
                    HbaseUtil.putData(tableName, cacheMap.get(tableName));
                }
            } catch (Exception e) {
                LOG.error("Hbase 数据写入异常:", e);
            }
        }
    }

    采用了map k,v 的方法

    public class MysqlDataCache2Db {
        private static Logger LOG = LoggerFactory.getLogger(MysqlDataCache2Db.class);
        private static ThreadLocal<Map<String, List<Object>>> THREAD_DATA = new ThreadLocal<>();
        public static String KEY_WX = "wx_base_info";
        public static String KEY_WX_ARTICLE = "wx_article_info";
    
        public static void cacheData(String key, Object obj) {
            Map<String, List<Object>> cacheMap = THREAD_DATA.get();
            if (cacheMap == null) {
                cacheMap = new HashMap<>();
            }
            List<Object> tmp = cacheMap.get(key);
            if (tmp == null) {
                tmp = new ArrayList<>();
            }
            tmp.add(obj);
            cacheMap.put(key, tmp);
            THREAD_DATA.set(cacheMap);
        }
    
    
        public static void flushData() {
            try {
                Map<String, List<Object>> cacheMap = THREAD_DATA.get();
                if (cacheMap == null) {
                    return;
                }
                for (String tableName : cacheMap.keySet()) {
                    List<Object> tmpList = cacheMap.get(tableName);
                    SqlUtilBusiness.data2DB(tableName, tmpList);
                    String sql = "update " + tableName + " set deptCode=cityCode where deptCode='' OR deptCode is null";
                    SqlUtilBusiness.exceteSql(sql);
                }
                cacheMap.clear();
                THREAD_DATA.set(cacheMap);
            } catch (Exception e) {
                LOG.error("MYSQL 数据写入异常:", e);
            }
        }
    
       public static void cacheData(Map<String, List<Object>> cacheMap, String key, Object obj) {
            List<Object> tmp = cacheMap.get(key);
            if (tmp == null) {
                tmp = new ArrayList<>();
            }
            tmp.add(obj);
            cacheMap.put(key, tmp);
        }
    
        public static void flushData(Map<String, List<Object>> cacheMap) {
            try {
                for (String tableName : cacheMap.keySet()) {
                    List<Object> tmpList = cacheMap.get(tableName);
                    SqlUtilBusiness.data2DB(tableName, tmpList);
                    String sql = "update " + tableName + " set deptCode=cityCode where deptCode='' OR deptCode is null";
                    SqlUtilBusiness.exceteSql(sql);
                    cacheMap.clear();
                }
            } catch (Exception e) {
                LOG.error("MYSQL 数据写入异常:", e);
            }
        }
    }
    故乡明
  • 相关阅读:
    [慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时
    Web开发基本准则-55实录-缓存策略
    Web开发基本准则-55实录-Web访问安全
    线上Java应用排查和诊断规范
    [慢查优化]建索引时注意字段选择性 & 范围查询注意组合索引的字段顺序
    [慢查优化]联表查询注意谁是驱动表 & 你搞不清楚谁join谁更好时请放手让mysql自行判定
    再说memcache的multiget hole(无底洞)
    RCA:未注意Curl-library Post 1024以上字节时的HTTP/1.1特性导致 HessianPHP 传输数据失败
    (研发系)职业化7个细节
    5·12和6·17两知名网站域名被劫持事件实施过程回放
  • 原文地址:https://www.cnblogs.com/luweiweicode/p/15151573.html
Copyright © 2011-2022 走看看