- 博客(33)
- 资源 (4)
- 收藏
- 关注
原创 基于权益推荐探索OHC缓存策略
通过对推荐权益业务的缓存改造,对比分析在本地缓存数据量较大的背景下,分别使用堆内内存与堆外内存实现缓存策略的接口性能表现。探索开源高性能缓存库OHC在推荐权益业务的适用性。
2024-11-07 10:07:27
988
原创 实时触达体系建设
实时触达中台是一个能对潜在高价值用户进行实时运营的工具,通过用户行为采集中心、规则计算中心、用户触达中心构建实时触达体系,有效提升运营时效性,提高客户留存及下单转换率。
2024-03-12 17:13:39
626
原创 Redis内存空间节省小技巧
背景:为提升会员对当前等级的权益感知,需对用户仍未领取的权益进行弹框或消息位置推荐,会员需推荐权益有10+项,且项权益均需需校验当日推荐次数并做推送限制,推荐次数记入Redis缓存,会员数据庞大,将占用大量内存空间。压缩设计:key键 = 前缀(RECOMMONE) + 会员号(USERID) ,采用同一用户只记录一条权益推荐记录,提前确认权益推荐次数的最大值并分配占位位数,每项权益通过占位标识来获取。,前两位01标识生活权益,后两个01标识注册有礼。* @param key redis的key。
2024-01-25 15:02:56
868
原创 mybatisplus saveBatch版本问题导致CPU打满生产问题定位
如果用使用MybatisPlus的saveBatch时,如果插入的集合存在多线程共享,同时对象中存在null的属性,最好不要用saveBatch方法,自己手写xml操作批量插入,官方建议一个批次 50~100时插入效率最高。
2023-12-13 10:36:33
1569
原创 Redis实现排行榜
写入分数汇总表使用了INSERT ON DUPLICATE KEY UPDATE的操作,第一次写入是插入操作,后续同一个用户在同一个榜单内的数据都是update sum_score字段的操作,并判断是否更新last_incom_time字段。子榜单也视为一个独立的榜单,相较于总榜单,使用的用户分数明细数据是相同的一份数据,只不过是统计的时间维度不同,所以根据分数的类型去找关联的榜单列表时,需要将时间因素加进去,对找出来的所有榜单同时去写排名相关的数据,就可以实现子榜单的玩法。
2023-12-06 11:36:00
2080
原创 基于LiteFlow构建实时会员权益体系
通过LiteFlow规则引擎构建会员权益体系,实现权益节点可插拔,可编排,可复用的特性。完成会员权益数据底盘建设,将分散的权益数据集中,提升权益查询及管理水平。
2023-11-24 17:06:44
1113
原创 亿级数据迁移 从Oracle到Mysql
目的:此处通过给scsActivityEventMapper和scsBaseActivityEventMapper标注不同的数据源,通过DynamicDataSrouce切换数据源双写Oracle和MySQL。执行带事务注解saveActivityEventOut方法时会被TransactionInterceptor拦截,此时未调用mapper接口,则获取默认oracle数据源并绑定在当前线程的resources线程变量上并激活当前事务(actualTransactionActive设置true)。
2023-04-07 09:47:06
1404
原创 【JAVA】VO、DTO的12种转换哪种效率最高?
VO、DTO的12种转换哪种效率最高1. get\set@ComponentpublicclassGetSetAssemblerimplementsIAssembler<UserVO,UserDTO>{@OverridepublicUserDTOsourceToTarget(UserVOvar){UserDTOuserDTO=newUserDTO();userDTO.setUserId(var.ge...
2021-11-03 11:15:55
5244
原创 Maven项目脚手架
使用Maven Archetype Catalogs插件,根据已有项目,创建Maven项目脚手架,步骤如下:1、idea中安装插件Maven Archetype Catalogs2、在一个已有的项目(作为模板的项目)中运行 mvn archetype:create-from-project,会在target目录下生成一个archetype目录,这其实是一个脚手架的maven项目3、提取该文件,用idea打开。app文件下即为脚手架文件结构,archetype-metadata.xml文件
2021-06-08 15:08:50
946
1
原创 亿级任务中台设计实战 【策略模型+Saturn+Mycat】
背景:用户群体不断增加,部门不断扩展,产品经理提出越来越多的活动运营需求,程序员不堪重负。但是这些活动做多做久了,很容易发现这些活动往往都有相同的触达体系、任务体系及奖励体系。 为加快产品迭代,减轻技术人员负担,提示系统安全稳定性。独立活动中台、任务中台、营销触达中心迫在眉睫。本文主要阐述任务中台搭建流程。解决问题: 1 构建更易扩展的任务场景数据库设计及代码设计; 2 庞大会员体系(4亿+)快速支撑任务开启、任务校验所涉及的并发及压力问题;...
2021-02-04 20:21:05
1566
原创 Fork/Join WORK 实操 切分百万数据分片执行积分赠送
Forkjoin 将一个任务拆分成小任务时才有用处。fork-join池是是一个work-stealing工作窃取线程池。每个工作线程维护本地任务dequeue。当执行新的任务时它可以将其拆分分成更小的任务执行,如果它是足够小,但是dequeue没有本地线程了,它的会“偷”,从一个随机线程的队列中偷窃一个并把它放在自己的队列中。但是如果任务还没有拆,他还是得完成手上一些工作。public void execJob() { // 数据库控制并发 long start = System
2020-11-18 15:07:32
342
原创 生产环境亿级用户并发发券记录
背景:产品需要,需消耗原有卡积分,转移到新卡。进行积分抽奖活动,其中用户可使用批量抽奖功能(10次)【单次请求第三方接口发送积分】。分析:1 方法需进行防并发校验。【已有自定义注解,采用userId为key,redis进行防并发处理 ttl 获取-1 key没有设置失效时间; -2 key不存在; 正数 key的失效时间 】 2 采用单线程循环及多线程两种方法进行积分发放,redis中做开关切换 3 用户当日抽奖次数记redis,incry关键代码实...
2020-09-15 20:02:22
283
转载 线程池子 冲冲凉
为什么用线程池 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3>T2,那么是不是说开启一个线程来执行这个任务太不划算了! 正好,线程池缓存线程,可用已有的闲置线程来执行新任务,避免了T1+T3带来的系统开销 线程并发数量过多,抢占系统资源从而导致阻塞 我们知道线程能共享系统资源,如果同时执行的线程过多,就有可能导致系统资源不足而产
2020-08-17 16:38:13
150
原创 Zookeeper 作用及原理
Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。简单的说,zookeeper=文件系统+通知机制。一、作用命名服务 在zookeeper的文件系统里创建一个目录,即有唯一的path。在我们使用tborg无法确定上游程...
2020-04-01 19:10:34
12779
1
转载 BIO NIO AIO
BIO是一个连接一个线程。同步阻塞的BIONIO是一个请求一个线程。同步非阻塞AIO是一个有效请求一个线程。异步非阻塞BIO与NIO一个比较重要的不同,是我们使用BIO的时候往往会引入多线程,每个连接一个单独的线程;而NIO则是使用单线程或者只使用少量的多线程,每个连接共用一个线程。Java对BIO、NIO、AIO的支持:Java BIO : 同步并阻塞,服务器实现模式为一个...
2018-08-06 11:30:33
1028
原创 java Timetask 访问service 抛空指针异常解决方案
java Timetask 访问service 抛空指针异常解决方案 错误原因: 创建自己的timetask 定时器继承了TimerTask之后,当执行run时还未进行service的注入。此时抛出空指针异常;以下为最终解决方案 // 自定义的TimerTask public class WXFocusTask extends Ti
2017-11-09 17:33:55
2145
1
原创 Nosql 理解篇+实战篇 五 NoSQL一致性解决方案
五 NoSQL一致性解决方案 更新一致性,读取一致性,放宽一致性约束,放宽持久性约束,CAP定理,仲裁 先来一个案例Tom和jarry在同一家公司上班,有一天,他们发现公司网页显示的电话有误,于是进入后台系统同时修改电话。我们假定他们输入的电话号码格式稍有差别,那么,他们提交的新号码就会略有不同,此时将产生“写冲突”问题:两人在同一时刻更新同一
2017-04-01 12:40:39
1722
原创 Nosql 理解篇+实战篇 四 分布式模型
四 分布式模型 为什么要引入分布式?分布式的优缺点?分布式的方法?常用分布式技术详解 1 分布式要解决的问题。随着数据量指数级的爆发式增长。用来购买更大服务器来运行数据库的纵向扩展(scale up)方式会变得越发困难和昂贵。与之相比,将数据库运行在服务器集群上的横向扩展(scale out)方式,由于技术的愈发成熟,逐渐成为了众多
2017-03-03 12:32:29
945
原创 Nosql 理解篇+实战篇 三 数据模型Ⅱ 聚合数据库关系处理及图数据库
三 数据模型Ⅱ 聚合数据库关系处理及图数据库 聚合数据库中的关系?为什么引入图数据库? 1) 关系 目前为止,我们知道大多数的NoSQL数据库的关键特征在于它们都使用了聚合,而各种面向聚合的数据库对聚合的建模方式不同。聚合是NoSQL的核心内容。 前面我们知道,聚合的方便之处在于能把经常
2017-02-22 09:41:51
1727
原创 初探angularJS 二
初探angularJS 二1 禁用 disabled指令 点我!2 显示和隐藏指令 ng-show="" ng-hide=" " 隐藏/显示 名: 姓: 姓名:{{person.firstName + " " +
2017-02-13 11:55:34
330
原创 初探angularJS 一
初探angularjs 一 1 指令 ng-app 指令告诉AngularJS,div 元素是 AngularJS 应用程序的"所有者"。 ng-init 指令初始化应用程序数据。 ng-model 指令用于绑定应用程序数据到 HTML 控制器(input,select, textarea)的值。 在输入框中
2017-02-10 12:28:49
320
原创 令人头疼的java Tree整合bootstrap ace tree
Java 递归菜单Tree并整合bootstrap ace tree 1 bootstrap ace tree Demo 的 json格式为var tree_data = { 'for-sale' : {name: 'For Sale', type: 'folder'} , 'vehicles' : {name: 'Vehicles', type: 'fold
2016-12-12 18:04:30
3248
原创 Nosql 理解篇+实战篇 二 NoSQL的数据模型Ⅰ
二 NoSQL的数据模型Ⅰ NoSQL的核心数据模型思想?NoSQL模型的模型分类及其常用模型结构思想?我的项目应该选用哪种NoSQL数据库?1) 正如C演变到C++那样,其所演变的核心思想是将面向过程演变为面向对象。而关系型数据库演变到NoSQL非关系型数据库的核心思想为“面向行”转变为“面向聚合” 关系型数据库的瓶颈在于,每张表的行可以存储value,但并不能存储包含类
2016-11-23 11:32:26
4799
原创 Nosql 理解篇+实战篇 一 了解nosql
一 了解nosql1 什么是nosql 你的项目是否需要nosql nosql能干什么 与传统的关系型数据库有何区别?在hadoop大数据集群运用中所处的位置及作用;NoSQL常用的几种数据库 NoSQL名称阐议:1) 是“Not Only SQL”的缩写,不仅仅是sql,它不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等。2)
2016-11-22 12:39:07
8133
原创 Linux 基本操作指令
linux 基本操作指令备忘录删除rm -rf ./*解压unzip WebRoot.zip -d ./test.erong366.com/移动mv ./*..查看端口使用情况ps -aux | grep tomcat杀掉当前进程kill -9 软链接ln -s a b 中的 a 就是源文件,b是链接文件名,其作用是当进入b目录,实际
2016-11-21 10:10:59
286
原创 Linux环境下自动任务sql备份
linux 自动任务(线上环境(centos 6.5)没有crontab 先安装执行yum install crontabs)准备 # chkconfig crond on //开机自启动# service crond start //启动# /etc/init.d/crond restart //重载备注: sql文件备份路径为 /backups/dumpups.s
2016-11-04 14:06:07
388
原创 Oracle 由易到难源代码五 触发器使用大全
Oracle 五 触发器 TRIGGER--------DML—before 行级触发器1------------------create or replace trigger tr_emp_addsalbefore update of sal on empfor each rowdeclare v_scale number;begin v_scale:=(:n
2015-09-17 14:56:54
317
原创 Oracle 由易到难源代码四 子查询 深度查询 简单分页
Oracle 查询方法子查询1 select * from emp where sal2 select (select dname form dept where deptno = e.deptno),ename,job from emp;3 select * from (select * from emp where deptno = 20)e where job = 'ma
2015-09-17 14:48:53
364
原创 oracle由易到难源代码二
oracle 二 oracle基础语发1、创建一个新用户test,在其下创建表studentconn system/orcl;create user test identfied by test123;grant connect,resource to test;conn test/test123;create table student>,password varch
2015-09-08 20:23:54
335
原创 oracle 由易到难源代码一
一 oracle 基础 表空间,用户,常用语句复习 刚刚从校园生活步入职场,在实习的这段时间,使用的都是公司的框架,就连数据库的操作也是做很简单的增删改查。近期闲暇时,正好重新整理下以前的笔记,复习一下以前的oracle数据库知识,希望对以后的工作和发展有帮助1、 Oracle数据库的启动a) 启动两个服务***Listener/***Serviceb) “开
2015-09-08 16:40:07
462
FileZilla_3.42.1_macosx-x86.app.tar.bz2
2019-06-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人