├── code ├── .DS_Store ├── ping │ └── ping.go ├── lock3 │ └── lock.go ├── online_counter3 │ └── online_counter.go ├── lock1 │ └── lock.go ├── autocomplete │ └── autocomplete.go ├── online_counter1 │ └── online_counter.go ├── lock2 │ └── lock.go └── online_counter2 │ └── online_counter.go └── keynote-ppt-and-pdf ├── gopher-meetup-huangz.key ├── gopher-meetup-huangz.pdf └── gopher-meetup-huangz.pptx /code/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangzworks/2017-guangzhou-gopher-meetup/HEAD/code/.DS_Store -------------------------------------------------------------------------------- /keynote-ppt-and-pdf/gopher-meetup-huangz.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangzworks/2017-guangzhou-gopher-meetup/HEAD/keynote-ppt-and-pdf/gopher-meetup-huangz.key -------------------------------------------------------------------------------- /keynote-ppt-and-pdf/gopher-meetup-huangz.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangzworks/2017-guangzhou-gopher-meetup/HEAD/keynote-ppt-and-pdf/gopher-meetup-huangz.pdf -------------------------------------------------------------------------------- /keynote-ppt-and-pdf/gopher-meetup-huangz.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangzworks/2017-guangzhou-gopher-meetup/HEAD/keynote-ppt-and-pdf/gopher-meetup-huangz.pptx -------------------------------------------------------------------------------- /code/ping/ping.go: -------------------------------------------------------------------------------- 1 | package ping 2 | 3 | import "github.com/mediocregopher/radix.v2/redis" 4 | 5 | func main() { 6 | client, _ := redis.Dial("tcp", "localhost:6379") 7 | defer client.Close() 8 | 9 | repl := client.Cmd("PING") 10 | result, _ := repl.Str() 11 | 12 | fmt.Println(result) // "PONG" 13 | } 14 | -------------------------------------------------------------------------------- /code/lock3/lock.go: -------------------------------------------------------------------------------- 1 | package lock 2 | 3 | import "github.com/mediocregopher/radix.v2/redis" 4 | 5 | const lock_key = "LOCK_KEY" 6 | const lock_value = "LOCK_VALUE" 7 | 8 | func acquire(client *redis.Client) bool { 9 | repl, _ := client.Cmd("SET", lock_key, lock_value, "NX").Str() 10 | return repl != "" 11 | } 12 | 13 | func release(client *redis.Client) { 14 | client.Cmd("DEL", lock_key) 15 | } 16 | -------------------------------------------------------------------------------- /code/online_counter3/online_counter.go: -------------------------------------------------------------------------------- 1 | package online_counter 2 | 3 | import "github.com/mediocregopher/radix.v2/redis" 4 | 5 | const online_user_hll = "ONLINE_USER_HLL" 6 | 7 | func set_online(client *redis.Client, user string) { 8 | client.Cmd("PFADD", online_user_hll, user) 9 | } 10 | 11 | func count_online(client *redis.Client) int64 { 12 | repl, _ := client.Cmd("PFCOUNT", online_user_hll).Int64() 13 | return repl 14 | } 15 | -------------------------------------------------------------------------------- /code/lock1/lock.go: -------------------------------------------------------------------------------- 1 | package lock 2 | 3 | import "github.com/mediocregopher/radix.v2/redis" 4 | 5 | const lock_key = "LOCK_KEY" 6 | const lock_value = "LOCK_VALUE" 7 | 8 | func acquire(client *redis.Client) bool { 9 | current_value, _ := client.Cmd("GET", lock_key).Str() 10 | if current_value == "" { 11 | client.Cmd("SET", lock_key, lock_value) 12 | return true 13 | } else { 14 | return false 15 | } 16 | } 17 | 18 | func release(client *redis.Client) { 19 | client.Cmd("DEL", lock_key) 20 | } 21 | -------------------------------------------------------------------------------- /code/autocomplete/autocomplete.go: -------------------------------------------------------------------------------- 1 | package autocomplete 2 | 3 | import "github.com/mediocregopher/radix.v2/redis" 4 | 5 | const autocomplete = "autocomplete::" 6 | 7 | func feed(client *redis.Client, content string, weight int) { 8 | for i := range content { 9 | segment := content[:i+1] 10 | key := autocomplete + segment 11 | client.Cmd("ZINCRBY", key, weight, content) 12 | } 13 | } 14 | 15 | func hint(client *redis.Client, prefix string, count int) []string { 16 | key := autocomplete + prefix 17 | result, _ := client.Cmd("ZREVRANGE", key, 0, count-1).List() 18 | return result 19 | } 20 | -------------------------------------------------------------------------------- /code/online_counter1/online_counter.go: -------------------------------------------------------------------------------- 1 | package online_counter 2 | 3 | import "github.com/mediocregopher/radix.v2/redis" 4 | 5 | const online_user_set = "ONLINE_USER_SET" 6 | 7 | func set_online(client *redis.Client, user string) { 8 | client.Cmd("SADD", online_user_set, user) 9 | } 10 | 11 | func count_online(client *redis.Client) int64 { 12 | repl, _ := client.Cmd("SCARD", online_user_set).Int64() 13 | return repl 14 | } 15 | 16 | func is_online_or_not(client *redis.Client, user string) bool { 17 | repl, _ := client.Cmd("SISMEMBER", online_user_set, user).Int() 18 | return repl == 1 19 | } 20 | -------------------------------------------------------------------------------- /code/lock2/lock.go: -------------------------------------------------------------------------------- 1 | package lock 2 | 3 | import "github.com/mediocregopher/radix.v2/redis" 4 | 5 | const lock_key = "LOCK_KEY" 6 | const lock_value = "LOCK_VALUE" 7 | 8 | func acquire(client *redis.Client) bool { 9 | client.Cmd("WATCH", lock_key) 10 | current_value, _ := client.Cmd("GET", lock_key).Str() 11 | if current_value == "" { 12 | client.Cmd("MULTI") 13 | client.Cmd("SET", lock_key, lock_value) 14 | repl, _ := client.Cmd("EXEC").List() 15 | if repl != nil { 16 | return true 17 | } 18 | } 19 | return false 20 | } 21 | 22 | func release(client *redis.Client) { 23 | client.Cmd("DEL", lock_key) 24 | } 25 | -------------------------------------------------------------------------------- /code/online_counter2/online_counter.go: -------------------------------------------------------------------------------- 1 | package online_counter 2 | 3 | import "github.com/mediocregopher/radix.v2/redis" 4 | 5 | const online_user_bitmap = "ONLINE_USER_BITMAP" 6 | 7 | func set_online(client *redis.Client, user_id int64) { 8 | client.Cmd("SETBIT", online_user_bitmap, user_id, 1) 9 | } 10 | 11 | func count_online(client *redis.Client) int64 { 12 | repl, _ := client.Cmd("BITCOUNT", online_user_bitmap).Int64() 13 | return repl 14 | } 15 | 16 | func is_online_or_not(client *redis.Client, user_id int64) bool { 17 | repl, _ := client.Cmd("GETBIT", online_user_bitmap, user_id).Int() 18 | return repl == 1 19 | } 20 | --------------------------------------------------------------------------------