HiSEN

Personal Technology Blog


  • 归档

  • 分类

  • 标签

  • 书单

  • 关于

  • 搜索
close
HiSEN

Redis 开发与运维

发表于 2022-05-23 | 分类于 database

零、背景

鉴于目前 Redis 使用广泛
虽然数据结构、API 比较简单
但是想使用好,还是有一定难度
建议了解下《Redis 开发与运维》
以达到知其然且知其所以然的境界

一、使用场景

大规模互联网在线应用
流量比较大,响应时间要求高
Redis 作为一款流行的高性能数据库

对于读多写少的场景,一般作为缓存使用
某大型电商订单系统读写比大概在 10:1
并且订单读取 90% 的流量都是创建订单当天查询

对于可容忍丢数据,但是对性能有极致要求,
比如优惠券发放,流量高,这种情况下当做 DB 用也挺好。

二、问题与建议

2.1 常见问题

  • 网络抖动导致 redis 操作失败
  • 定时任务清理过期 key 导致 IOPS 高
    • redis 做了二次开发,更激进的惰性删除( 针对大面积过期场景 )
  • 热 key 导致流量倾斜
    • 考虑 Server 端旁路监听,做统计,然后推送到客户端做内存缓存
    • 京东有开源热 Key 方案
  • redis slot 分配不均匀,导致某节点提前内存告警
    • 建议分配内存按 slot 分配,而不是节点

2.2 建议

  • 缓存时间动态可配
    阅读全文 »
HiSEN

初识 Spring AOP 与 BeanPostProcess

发表于 2022-03-26 | 分类于 java

零、背景

最近在做重构的项目
进入阶段性收尾阶段
总结记录下相关的内容
方便大家遇到类似问题可以想起有某个地方可以参考

一、初识 AOP

目前的 AOP 应用,由于公司生态体系不够完善
利用 AOP + ThreadLocal(transmittable-thread-local,ttl)
做一部分链路追踪的事情( 耗时打印,traceId 处理 )
这部分倒是很简单,只是之前用的很少

PS:链路追踪蛮重要,针对排查问题,性能监控等大有帮助,多关注开源协议/实现( 如 CNCF )

二、初识 BeanPostProcess

2.1 应用场景

目前做的项目当中,有一个 IDC 负载均衡的工具
有设置当前机器所属机房的方法,但是没有提供从配置文件读取的能力
因为 IDC 路由不生效,会造成跨机房访问,导致访问延迟偏高( 回头再写性能优化相关内容 )

阅读全文 »

HiSEN

优雅地分桶 - 数据分片 - list 拆分

发表于 2022-02-18 | 分类于 java

零、背景

最近在做数据迁移
为了加速迁移速度
其中就需要把查询到的数据( max 100 条)
拆分成 5 份,然后执行 5 个子任务,加速处理

一、代码

1.1 常规做法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static <T> List<List<T>> split2(List<T> lists, int subCount) {
if (CollectionUtils.isEmpty(lists) || subCount < 1) {
return null;
}

List<List<T>> result = new ArrayList<>();

int size = lists.size();
int count = (size + subCount - 1) / subCount;

for (int i = 0; i < count; i++) {
List<T> subList = lists.subList(i * subCount, (Math.min((i + 1) * subCount, size)));
result.add(subList);
}
return result;
}

1.2 新颖做法

阅读全文 »
HiSEN

关于学习 Rust

发表于 2022-02-06 | 分类于 rust

零、背景

过年期间,看到 github 关注的人的动态当中
有人 star 了这个项目 Rust语言圣经
这些年也听说过 Rust,一直没有特意去了解
当我看到大佬也关注了这个课程的时候
感觉应该是一个不错的学习资料

前面介绍学习的好处让我心动了
就跟着学习了前面 4 节课
目前感觉良好
有空继续学

不得不说,环境搭建特别方便!

一、实践

阅读全文 »
HiSEN

回顾 2021,展望 2022

发表于 2022-01-02 | 分类于 随说

零、摘要

回顾 2021

  1. 【完成】换了一份不错的工作;
  2. 【完成】坚持阅读,追求质量;
  3. 【待办】运动量不够,锻炼偏少;

展望 2022

  1. 体重控制在 65Kg 以内,学会自由泳;
  2. 持续阅读,技术与非技术书籍交替看,5 本基础书;
  3. 深入理解公司内部技术栈、深入了解 2-3 条业务线;
  4. 重新学习 Dubbo,学习设计理念,以及分布式系统架构;

一、成长

技术方面今年感觉成长不是太明显
有所改变的是会深入洞察需求
逐步完善设计之后开始 coding,而不是着急开始。

对于技术底层也有一定地涉猎,更多地可能是在钻电商业务。

阅读全文 »

HiSEN

关于 Java static

发表于 2021-11-12 | 分类于 java

零、背景

同事分享《Effective Java》
其中第十章,并发部分例子有争议
变量是否需要(代码如下) static?
几个大佬说需要加,我众目睽睽下反驳不需要,略尴尬

// 是否需要加 static?才能保证单例正确
private volatile Singleton singleton;

一、程序关键代码

1.1 原程序(错误)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Singleton {
private volatile Singleton singleton;

public Singleton() {
}

private Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}

1.2 正确程序

阅读全文 »
HiSEN

陆奇 | 年轻人的榜样

发表于 2021-11-09 | 分类于 成长

零、背景

不知在哪听说过陆奇的传说
对于一位地位如此之高的华人
甚是敬仰,奈何相关资料甚少,很难深入了解
不像李开复、吴军那样,出过一些书,了解可以多些

榜样的力量或许很虚,关键看自己能悟多少,是否坚持行动。共勉!

一、工程领导(Engineering Leadership)

  • Believe in 技术
    未来任何一个工业都会变成软件工业。
  • 站在巨人的肩膀上做创新
    你所写的每一行代码是否值得?
  • 追求 Engineering Excellence
    追求工程技术的卓越的能力。
  • 每天学习
    每天学习,每天都争取变地更好。
    学经济、学产品、懂商业、懂生态。
  • Ownership
    把公司的事业,当成是自己的事业,own everything。从我做起,从身边的每一件事做起。

二、关于陆奇的文章

阅读全文 »
HiSEN

介绍 | RASP

发表于 2021-11-05 | 分类于 安全

一、背景

翻看书签的时候偶然发现 RASP 两个收藏
脑子里毫无相关内容,细看之下,收获不小
ps:是不是看看收藏夹,能有意外收获

安全无小事,从点滴做起。要有安全意识。
安全投入的比例,可以根据公司所处的行业公司规模进行相应调整。
安全投入包括:软件安全设计、招人、买设备、买服务、做评估。

二、介绍

2.1 RASP 是什么

RASP( Runtime Application Self-Protection )是一种在运行时检测攻击并且进行自我保护的一种技术。
OpenRASP 架构

2.2 RASP 优缺点

化繁为简,抓住事情的本质,这就是优势。

阅读全文 »

HiSEN

Java JVM 工具与知识 | JVM 调优

发表于 2021-10-09 | 分类于 java

一、背景

曾经整理过一个帖子,不过是在公司内网。
今天突然想起,博客上零散的 jvm 相关内容,
但未系统整理相关知识和工具,遂写一篇文章。

学习的过程需要不断发现好的资源,深入钻研某个领域。

二、知识

2.1 图书

  • 《深入理解 Java 虚拟机》
  • 《Java 性能优化权威指南》
  • 《性能之巅》

2.2 文档

  • Java Language and Virtual Machine Specifications

2.3 文章

阅读全文 »
HiSEN

Java 文件读取,部分中文乱码 - 分析与解决

发表于 2021-07-31 | 分类于 java

一、背景

最近做项目有一个地址库文件需要放在后端
由于文件在 jar 包中的问题,一些读取文件的姿势失效(方便的 Guava Files)
最后通过 getResourceAsStream 解决

接下来遇到了一件奇怪的事情,部分汉字乱码了,
调整编码,重新编辑汉字都试过了,无法解决。

最后求助于百度搜索,得到了一些有效的信息。
汉字是两个字节的,如果每次读固定个字节,可能会把汉字截断,造成乱码。
再次印证了基础知识的重要性!

二、相关代码

2.1 罪魁祸首

利用缓冲区读取文件,会出现边界情况下把汉字分割成两次来读。

阅读全文 »

123…26
hisenyuan

hisenyuan

Java R & D

257 日志
29 分类
108 标签
GitHub Weibo
Links
  • 科技爱好者周刊
  • 美团技术团队
  • duanple(老师木)
  • 当然我在扯淡(王垠)
  • 段永平的博客
  • 梦殇国际
© 2016 - 2023 hisenyuan
由 Hexo 强力驱动
您是第  个访问者    |   
主题 - NexT.Mist