Redis使用事务

Redis事务同传统关系数据库事务不相同。关系数据库,首先向数据库发送事务开始BEGIN,然后执行读写操作,最后发送COMMIT提交事务,或者通过ROLLBACK回滚放弃事务的修改。

Context包

在Go 1.7中,context包被引入到标准库中。 context是处理并发问题的一个标准风格。

context包内容很简单:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var Canceled = errors.New("context canceled")
var DeadlineExceeded error = deadlineExceededError{}
func WithCancel(parent Context) (ctx Context, cancel CancelFunc)
func WithDeadline(parent Context, d time.Time) (Context, CancelFunc)
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
type CancelFunc func()
type Context interface{ ... }
    func Background() Context
    func TODO() Context
    func WithValue(parent Context, key, val interface{}) Context

在使用context包的过程中,不应该Context存储在struct中,而是将Context作为参数传递给需要它的函数。不能传递nil Context,如果不确定该使用什么样的Context,那么传递context.TODO。

Golang和假共享(false sharing)

Golang和假共享(false sharing)

多核处理器(SMP)系统中, 每一个处理器都有一个本地高速缓存。内存系统必须保证高速缓存的一致性。当不同处理器上的线程修改驻留再同一高速缓存中的变量时就会发生假共享(false sharing),结果导致高速缓存无效,并强制更新,进而影响系统性能。

Git_emoji

在git commit信息中使用emoji,提供一种简单的方法来识别提交的目的或意图: 只需要查看使用的emoji符号。在提交的历史中也更容易区分和查找。更多信息参见gitmoji