cachegoroutine.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "time"
  6. _ "github.com/go-sql-driver/mysql"
  7. "github.com/go-xorm/xorm"
  8. _ "github.com/mattn/go-sqlite3"
  9. )
  10. type User struct {
  11. Id int64
  12. Name string
  13. }
  14. func sqliteEngine() (*xorm.Engine, error) {
  15. os.Remove("./test.db")
  16. return xorm.NewEngine("sqlite3", "./goroutine.db")
  17. }
  18. func mysqlEngine() (*xorm.Engine, error) {
  19. return xorm.NewEngine("mysql", "root:@/test?charset=utf8")
  20. }
  21. var u *User = &User{}
  22. func test(engine *xorm.Engine) {
  23. err := engine.CreateTables(u)
  24. if err != nil {
  25. fmt.Println(err)
  26. return
  27. }
  28. size := 500
  29. queue := make(chan int, size)
  30. for i := 0; i < size; i++ {
  31. go func(x int) {
  32. //x := i
  33. err := engine.Ping()
  34. if err != nil {
  35. fmt.Println(err)
  36. } else {
  37. for j := 0; j < 10; j++ {
  38. if x+j < 2 {
  39. _, err = engine.Get(u)
  40. } else if x+j < 4 {
  41. users := make([]User, 0)
  42. err = engine.Find(&users)
  43. } else if x+j < 8 {
  44. _, err = engine.Count(u)
  45. } else if x+j < 16 {
  46. _, err = engine.Insert(&User{Name: "xlw"})
  47. } else if x+j < 32 {
  48. //_, err = engine.Id(1).Delete(u)
  49. _, err = engine.Delete(u)
  50. }
  51. if err != nil {
  52. fmt.Println(err)
  53. queue <- x
  54. return
  55. }
  56. }
  57. fmt.Printf("%v success!\n", x)
  58. }
  59. queue <- x
  60. }(i)
  61. }
  62. for i := 0; i < size; i++ {
  63. <-queue
  64. }
  65. //conns := atomic.LoadInt32(&xorm.ConnectionNum)
  66. //fmt.Println("connection number:", conns)
  67. fmt.Println("end")
  68. }
  69. func main() {
  70. fmt.Println("-----start sqlite go routines-----")
  71. engine, err := sqliteEngine()
  72. if err != nil {
  73. fmt.Println(err)
  74. return
  75. }
  76. engine.ShowSQL = true
  77. cacher := xorm.NewLRUCacher2(xorm.NewMemoryStore(), time.Hour, 1000)
  78. engine.SetDefaultCacher(cacher)
  79. fmt.Println(engine)
  80. test(engine)
  81. fmt.Println("test end")
  82. engine.Close()
  83. fmt.Println("-----start mysql go routines-----")
  84. engine, err = mysqlEngine()
  85. engine.ShowSQL = true
  86. cacher = xorm.NewLRUCacher2(xorm.NewMemoryStore(), time.Hour, 1000)
  87. engine.SetDefaultCacher(cacher)
  88. if err != nil {
  89. fmt.Println(err)
  90. return
  91. }
  92. defer engine.Close()
  93. test(engine)
  94. }