example_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package redis_test
  2. import (
  3. "fmt"
  4. "strconv"
  5. "gopkg.in/redis.v2"
  6. )
  7. var client *redis.Client
  8. func init() {
  9. client = redis.NewTCPClient(&redis.Options{
  10. Addr: ":6379",
  11. })
  12. client.FlushDb()
  13. }
  14. func ExampleNewTCPClient() {
  15. client := redis.NewTCPClient(&redis.Options{
  16. Addr: "localhost:6379",
  17. Password: "", // no password set
  18. DB: 0, // use default DB
  19. })
  20. pong, err := client.Ping().Result()
  21. fmt.Println(pong, err)
  22. // Output: PONG <nil>
  23. }
  24. func ExampleNewFailoverClient() {
  25. client := redis.NewFailoverClient(&redis.FailoverOptions{
  26. MasterName: "master",
  27. SentinelAddrs: []string{":26379"},
  28. })
  29. pong, err := client.Ping().Result()
  30. fmt.Println(pong, err)
  31. // Output: PONG <nil>
  32. }
  33. func ExampleClient() {
  34. if err := client.Set("foo", "bar").Err(); err != nil {
  35. panic(err)
  36. }
  37. v, err := client.Get("hello").Result()
  38. fmt.Printf("%q %q %v", v, err, err == redis.Nil)
  39. // Output: "" "redis: nil" true
  40. }
  41. func ExampleClient_Incr() {
  42. if err := client.Incr("counter").Err(); err != nil {
  43. panic(err)
  44. }
  45. n, err := client.Get("counter").Int64()
  46. fmt.Println(n, err)
  47. // Output: 1 <nil>
  48. }
  49. func ExampleClient_Pipelined() {
  50. cmds, err := client.Pipelined(func(c *redis.Pipeline) error {
  51. c.Set("key1", "hello1")
  52. c.Get("key1")
  53. return nil
  54. })
  55. fmt.Println(err)
  56. set := cmds[0].(*redis.StatusCmd)
  57. fmt.Println(set)
  58. get := cmds[1].(*redis.StringCmd)
  59. fmt.Println(get)
  60. // Output: <nil>
  61. // SET key1 hello1: OK
  62. // GET key1: hello1
  63. }
  64. func ExamplePipeline() {
  65. pipeline := client.Pipeline()
  66. set := pipeline.Set("key1", "hello1")
  67. get := pipeline.Get("key1")
  68. cmds, err := pipeline.Exec()
  69. fmt.Println(cmds, err)
  70. fmt.Println(set)
  71. fmt.Println(get)
  72. // Output: [SET key1 hello1: OK GET key1: hello1] <nil>
  73. // SET key1 hello1: OK
  74. // GET key1: hello1
  75. }
  76. func ExampleMulti() {
  77. incr := func(tx *redis.Multi) ([]redis.Cmder, error) {
  78. s, err := tx.Get("key").Result()
  79. if err != nil && err != redis.Nil {
  80. return nil, err
  81. }
  82. n, _ := strconv.ParseInt(s, 10, 64)
  83. return tx.Exec(func() error {
  84. tx.Set("key", strconv.FormatInt(n+1, 10))
  85. return nil
  86. })
  87. }
  88. client.Del("key")
  89. tx := client.Multi()
  90. defer tx.Close()
  91. watch := tx.Watch("key")
  92. _ = watch.Err()
  93. for {
  94. cmds, err := incr(tx)
  95. if err == redis.TxFailedErr {
  96. continue
  97. } else if err != nil {
  98. panic(err)
  99. }
  100. fmt.Println(cmds, err)
  101. break
  102. }
  103. // Output: [SET key 1: OK] <nil>
  104. }
  105. func ExamplePubSub() {
  106. pubsub := client.PubSub()
  107. defer pubsub.Close()
  108. err := pubsub.Subscribe("mychannel")
  109. _ = err
  110. msg, err := pubsub.Receive()
  111. fmt.Println(msg, err)
  112. pub := client.Publish("mychannel", "hello")
  113. _ = pub.Err()
  114. msg, err = pubsub.Receive()
  115. fmt.Println(msg, err)
  116. // Output: subscribe: mychannel <nil>
  117. // Message<mychannel: hello> <nil>
  118. }
  119. func ExampleScript() {
  120. setnx := redis.NewScript(`
  121. if redis.call("get", KEYS[1]) == false then
  122. redis.call("set", KEYS[1], ARGV[1])
  123. return 1
  124. end
  125. return 0
  126. `)
  127. v1, err := setnx.Run(client, []string{"keynx"}, []string{"foo"}).Result()
  128. fmt.Println(v1.(int64), err)
  129. v2, err := setnx.Run(client, []string{"keynx"}, []string{"bar"}).Result()
  130. fmt.Println(v2.(int64), err)
  131. get := client.Get("keynx")
  132. fmt.Println(get)
  133. // Output: 1 <nil>
  134. // 0 <nil>
  135. // GET keynx: foo
  136. }
  137. func Example_customCommand() {
  138. Get := func(client *redis.Client, key string) *redis.StringCmd {
  139. cmd := redis.NewStringCmd("GET", key)
  140. client.Process(cmd)
  141. return cmd
  142. }
  143. v, err := Get(client, "key_does_not_exist").Result()
  144. fmt.Printf("%q %s", v, err)
  145. // Output: "" redis: nil
  146. }