V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  siweipancc  ›  全部回复第 24 页 / 共 29 页
回复总数  580
1 ... 16  17  18  19  20  21  22  23  24  25 ... 29  
过度设计的产物……
不上 redis 还有个折衷的方法,额外生成一列 hash,生成索引,取 30 行列值>=随机生成的 hash 的就行了
2021-02-18 12:32:08 +08:00
回复了 seagull7558 创建的主题 程序员 IntelliJ IDEA 20 周年
插眼,优惠球踢
2021-02-16 16:37:31 +08:00
回复了 SystemLight 创建的主题 Java 为什么 Java 的包管理器都这么复杂?
作为一个强迫症,每次拿到库都是先撸源代码,然后被前端大姐嫌弃,也经常被后端组长吐槽浪费时间。(最近修了一大堆前后端的祖传 bug 之后就没挨喷了)。跑题了不好意思
2021-02-09 11:18:49 +08:00
回复了 feng32 创建的主题 程序员 如何用 Mybatis 实现服务器资源配额管理 (悲观锁/乐观锁)
@feng32 多机的话,我的建议是用 redis 队列,看下官网的 list 文档说明
2021-02-08 09:08:30 +08:00
回复了 feng32 创建的主题 程序员 如何用 Mybatis 实现服务器资源配额管理 (悲观锁/乐观锁)
1. 单机环境下不应该用表,jdk 的信号量足够。
2. 乐观锁要手写插件: https://github.com/Dreamroute/locker
2021-02-04 13:43:32 +08:00
回复了 Kasumi20 创建的主题 程序员 TypeScript 中,如何定义(声明)函数的类型?
……,你先回答我官网文档你看完了吗 :D
2021-02-02 09:15:00 +08:00
回复了 32167 创建的主题 JavaScript 大家是怎么搜集 npm 里面好用包的信息的?
:D 后端狗觉得用 java 很懒很爽,转 npm 后更彻底的成为废人了(指满世界的库)
2021-02-02 09:04:00 +08:00
回复了 putaozhenhaochi 创建的主题 程序员 关于 IBM Developer 中文网站关停的通知
卧槽,有没有镜像。
2021-01-26 09:10:40 +08:00
回复了 mightofcode 创建的主题 Java JAVA8 的 Optional 是鸡肋
舌战群儒:D
给前端修 bug 的后台菜鸟路过。看描述估计是简单培训的,跟经理举发他(狗头)
2021-01-22 08:51:02 +08:00
回复了 lwen 创建的主题 程序员 谈谈自己的技术积累和生活思考
谢谢,已经屏蔽
2021-01-21 11:44:00 +08:00
回复了 qm332207252 创建的主题 Java 异步任务问题
@Log
@RestController
@SpringBootApplication
public class WebApplication {

public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}

static final String CREATED = "create";
static final String PROCESS = "process";
static final String COMPLETE = "complete";


@PostMapping("generate")
public ResponseEntity<Response> generate(@RequestBody Request request) {
return ResponseEntity.ok(generate(request.input, request.taskId));
}


@Autowired
private RedisTemplate<Object, Object> redisTemplate;
@Autowired
private ThreadPoolTaskExecutor executor;

@PostConstruct
public void init() {
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
}

Function<UUID, String> valKeyFunc = uuid -> "value::" + uuid;
Duration expire = Duration.ofMinutes(30L);

public Response generate(Integer input, UUID taskId) {

if (taskId == null) {
check(input != null, "请输入值");
UUID uuid = createTask(input);
return new Response(CREATED, null, uuid, expire.getSeconds());
}

String key = valKeyFunc.apply(taskId);
Long expire = redisTemplate.getExpire(key);
Entity value;
try {
value = (Entity) redisTemplate.opsForValue().get(key);
} catch (ClassCastException e) {
log.warning(e.getMessage());
e.printStackTrace();
throw new RuntimeException("服务器内部错误");
}
check(value != null, "任务 " + taskId + " 不存在或者已经过期");
assert value != null;
check(value.complete != null, "服务器内部错误");
if (!value.complete) {
return new Response(PROCESS, null, taskId, expire);
}

return new Response(COMPLETE, value, taskId, expire);
}


private static void check(Boolean condition, String msg) {
if (!Boolean.TRUE.equals(condition)) {
throw new RuntimeException(msg);
}
}


private UUID createTask(Integer input) {
UUID uuid = UUID.randomUUID();
executor.execute(() -> {
try {
Entity entity = new Entity(uuid, false, new Date(), null, input, null);
log.info(String.format("begin task: %s, input: %s", uuid, input));
String key = valKeyFunc.apply(uuid);
redisTemplate.opsForValue().set(key, entity, expire);
log.info(String.format("set task: %s, input: %s, key: %s", uuid, input, key));
TimeUnit.SECONDS.sleep(RandomUtil.randomInt(10, 20));
String value = RandomUtil.randomString(Math.abs(input));
entity.complete = true;
entity.completeTime = new Date();
entity.output = value;
log.info(String.format("end task: %s, input: %s, generated: %s", uuid, input, value));
redisTemplate.opsForValue().set(key, entity, expire);
} catch (InterruptedException e) {
log.warning(e.getMessage());
e.printStackTrace();
}
});
return uuid;
}

@Data
static class Request {
Integer input;
UUID taskId;
}

@AllArgsConstructor
@NoArgsConstructor
@Data
static class Response {
String status;
Object data;
UUID taskId;
Long expire;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
static class Entity {
UUID taskId;
Boolean complete;
Date beginTime;
Date completeTime;

Integer input;
String output;
}

}
2021-01-21 11:37:24 +08:00
回复了 qm332207252 创建的主题 Java 异步任务问题
占坑#
2021-01-12 09:01:05 +08:00
回复了 guozozo 创建的主题 分享发现 App Store 上了款 GBA 模拟器,搜全名 GBA Emu
啊,来晚了
2020-12-29 08:59:02 +08:00
回复了 lemy 创建的主题 宽带症候群 联通吃相太丑,蒙我升级 5G 套餐。。。
@lemy 上周有过一个电话,说是送流量,我还特地问了很现在我手里的套餐有什么区别,他说不会有任何扣费^ ^
2020-12-29 08:54:30 +08:00
回复了 lemy 创建的主题 宽带症候群 联通吃相太丑,蒙我升级 5G 套餐。。。
周六起床被偷偷办了一样的东西,打电话过去叼一顿就好了,賊恶心
1 ... 16  17  18  19  20  21  22  23  24  25 ... 29  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3741 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 04:19 · PVG 12:19 · LAX 20:19 · JFK 23:19
Developed with CodeLauncher
♥ Do have faith in what you're doing.