小编let*_*4be的帖子

我应该在Redis群集中使用Lua时指定完整的密钥名称,还是只能传递主题标签?

我有Lua脚本,我正在考虑迁移到Redis Cluster

我应该在通话时指定完整的密钥名称eval吗?或者我可以通过指定主题标签逃脱?

例如,我想只传递{UNIQUE_HASH_TAG}代替{UNIQUE_HASH_TAG}/key1,{UNIQUE_HASH_TAG}/key2...等

我有很多键,逻辑非常复杂 - 有时我最终动态生成键名但在同一个哈希标记内.

我是否会通过传递哈希标签而不是密钥名称来违反某些规范?

lua redis

7
推荐指数
1
解决办法
468
查看次数

如何在coffeescript中启用和声语法支持?

我用的Node.js(0.11.13)与--harmony标志和使用function *()yield关键字.

我试图在coffeescript的帮助下简化我在node.js上的开发,到目前为止它工作得很好但我遇到麻烦yield并声明了一个生成器 - 它抱怨'保留关键字产量'.

有任何想法吗?

javascript yield coffeescript ecmascript-harmony

5
推荐指数
1
解决办法
2062
查看次数

Rethinkdb原子操作

假设我有一份文件

{
    id: 1,
    fruits: []
}
Run Code Online (Sandbox Code Playgroud)

这里的水果充当了SET

现在我想原型地为一个带有主键= 1的文档的fruits数组添加一个值,或者如果它不存在则创建这样的文件(即使用引擎盖下的SetInsert ReQL)

我还需要做同样的增量(ReQL .Add)

显然,这不能在客户端代码中完成,因为它打破了原子性,最终导致数据不一致

我希望这样的事情成为可能

r.table('results').insert({
  id: '62c70132-6516-4279-9803-8daf407ffa5c',
  counter: r.row('counter').add(1).default(0)
}, {conflict: "update"})
Run Code Online (Sandbox Code Playgroud)

但它死于"RqlCompileError:r.row未在此上下文中定义"

任何帮助/指导表示赞赏,谢谢!

atomicity rethinkdb

5
推荐指数
1
解决办法
901
查看次数

是否需要同步?

我在对象中定义了一个变量(r.something)

func (r *Runner) init() {
  r.something = make(map[string]int)
  r.something["a"]=1

  go r.goroutine()
}
Run Code Online (Sandbox Code Playgroud)

而r.goroutine使用存储在r.something中的值而没有同步.除了r.goroutine()之外,没有其他人会读/写这个值

没有同步可以安全吗?

换句话说:我想 goroutine start 之前重新使用从其他地方初始化的goroutine中的一些变量.这样安全吗?

附加问题:在r.goroutine()完成之后,我希望能够使用来自其他地方的r.something(没有与其他goroutine的读/写重叠).它也安全吗?

go goroutine

5
推荐指数
1
解决办法
108
查看次数

管理动态goroutine池的最佳方法

假设我有一个任务提供程序-可读的通道,它可能会或可能不会提供任务(取决于工作量)具体来说,这样一来可能几个小时都没有工作,然后可能突然出现任务

我想让我的goroutine池从1增长到N,其中N是出现工作时的最大并发性,然后自动崩溃到1,在那里goroutine的工作时间超过X秒,以避免内存/ cpu浪费。

我本可以只使用一个固定的池,因为goroutine非常便宜,但是我不喜欢有成千上万个空闲的goroutine,我可能会更好地使用那些资源(应该主要是ram,但仍然可以)

折叠部分相当容易

for {
    timeoutTimer := time.NewTimer(WORKER_ROUTINE_TIMEOUT)

    select {
    case taskContext, isBatchRunning := <-runner.tasksCh:
        if !isBatchRunning {
            log.Print("task provider is closed, quit worker goroutine")
            return
        }

        runner.job.Process(&taskContext)
    case <-timeoutTimer.C:
        return
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何使池动态增长,即在哪种条件下产生新的池

此池的优先级是能够对增加的负载做出快速反应并扩展到N(最大并发)goroutines,并能够在工作负载减少时最终崩溃到更合理的数量(最小为1)。

PS:我看到了一个https://github.com/Jeffail/tunny包,但看起来它与当前池大小的自适应缩放没有任何相似之处。我想念什么吗?

谢谢!

pool go goroutine

5
推荐指数
1
解决办法
1047
查看次数

v8代理ReferenceError

我正在尝试在v8(版本4.6.85.31)中使用ES6代理但我得到ReferenceError: Proxy is not defined (我正在使用golang的v8)

我也尝试在node.js 5.1.0中使用--harmony-proxies标志,它支持代理(相同的v8版本)

但是如何在v8中直接使用代理呢?我需要用一些标志编译吗?

谢谢!

javascript v8 ecmascript-6 es2015

5
推荐指数
1
解决办法
245
查看次数

golang - 如果代码没有改变,则重用以前构建的可执行文件

我有一个非常大的golang项目,它生成了几个可执行文件,当我更新我的代码时,我想要一个简单快速的方法来重建所有这些,但是它需要大约20-25秒才能构建所有这些,并且大部分时间我只需更改1或2

最终目标 - 检测更改的内容并尽快重建目标(CI)

ps项目的某些部分使用cgo,这需要40-50%的构建时间

build go

4
推荐指数
1
解决办法
261
查看次数

Golang 同时读/写文件,无需显式文件锁定

我有一种情况,我需要同时从/向文件读/写,但操作范围有限

  • 仅追加,无随机偏移写入
  • 从随机位置读取,我确定之前已经写入了内容(通过附加,通过golang通道进行内部访问序列化以确保仅在附加内容后才发生随机读取)
  • 只有一个进程在运行

这是一个高负载的应用程序,我想避免每次读/写时都锁定文件

我打算打开 2 个文件 - 一个用于读取,另一个仅用于附加

这样做会产生一些潜在的问题/错误吗?

如果我想避免每次读/写的文件锁定,推荐的做法是什么?

ps golang, linux, ext4

io synchronization go

4
推荐指数
1
解决办法
3385
查看次数

如何在 Scylla 中获取特定分区键的流 ID

我在 Scylla 有一张桌子

CREATE TABLE event (
    eventSource TEXT,        
    createdAt TIMEUUID,
    eventData TEXT,
    PRIMARY KEY (eventSource, createdAt)
) WITH cdc = {'enabled':true};
Run Code Online (Sandbox Code Playgroud)

现在我希望使用 CDC

我知道流 IDCDC取决于生成和基表分区键,但是如何在不对 CDC 表进行全表扫描的情况下获取此流 ID?

是否有一些函数可以将给定的分区键转换为当前活动生成的流 ID?

change-data-capture scylla

4
推荐指数
1
解决办法
75
查看次数

Golang 在 goroutine 之间共享大量数据

我需要读取从另一个 goroutine 设置的结构字段,即使知道肯定不会有并发访问(在读取发生之前写入完成,通过 发出信号chan struct{})也可能会导致陈旧数据

考虑到我可以保证没有并发访问,发送指向结构的指针(在第一个 goroutine 中创建,在第二个 goroutine 中修改,在第三个 goroutine 中读取)会解决可能的陈旧问题吗?

我想避免复制,因为结构很大并且包含填充在第二个 goroutine 中的巨大 Bytes.Buffer,我需要从第三个 goroutine 中读取

有一个锁定选项,但考虑到我知道不会有并发访问,这似乎有点矫枉过正

concurrency go channels

3
推荐指数
2
解决办法
5257
查看次数