stringOperate.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package redis
  2. import (
  3. "strconv"
  4. "github.com/gomodule/redigo/redis"
  5. "bet24.com/log"
  6. )
  7. //写数据
  8. func String_Set(key, value string) bool {
  9. rc := RedisClient.Get()
  10. if rc == nil {
  11. log.Release("String_Set no redis connection")
  12. return false
  13. }
  14. defer rc.Close()
  15. _, err := rc.Do("SET", key, value)
  16. if err != nil {
  17. log.Release("String_Set key=%v value=%v err=%v", key, value, err)
  18. return false
  19. }
  20. return true
  21. }
  22. //写过期数据
  23. func String_SetEx(key, value string, seconds int) bool {
  24. rc := RedisClient.Get()
  25. if rc == nil {
  26. log.Release("String_SetEx no redis connection")
  27. return false
  28. }
  29. defer rc.Close()
  30. _, err := rc.Do("SETEX", key, seconds, value)
  31. if err != nil {
  32. log.Release("String_SetEx key=%v value=%v seconds=%v err=%v", key, value, seconds, err)
  33. return false
  34. }
  35. return true
  36. }
  37. //获取数据
  38. func String_Get(key string) (string, bool) {
  39. rc := RedisClient.Get()
  40. if rc == nil {
  41. log.Release("String_Get no redis connection")
  42. return "", false
  43. }
  44. defer rc.Close()
  45. ret, err := redis.String(rc.Do("GET", key))
  46. if err != nil {
  47. //log.Release("String_Get key=%v err=%v", key, err)
  48. return "", true
  49. }
  50. return ret, true
  51. }
  52. //递增
  53. func String_Incrby(key string, value int) (int, bool) {
  54. rc := RedisClient.Get()
  55. if rc == nil {
  56. log.Release("String_Incrby no redis connection")
  57. return 0, false
  58. }
  59. defer rc.Close()
  60. ret, err := redis.Int(rc.Do("INCRBY", key, value))
  61. if err != nil {
  62. log.Release("String_Incrby key=%v value=%v err=%v", key, value, err)
  63. return 0, false
  64. }
  65. return ret, true
  66. }
  67. func String_GetInt(key string) int {
  68. rc := RedisClient.Get()
  69. if rc == nil {
  70. log.Release("String_GetInt no redis connection")
  71. return 0
  72. }
  73. defer rc.Close()
  74. ret, err := redis.String(rc.Do("GET", key))
  75. if err != nil {
  76. //log.Debug("String_Get key=%v err=%v", key, err)
  77. return 0
  78. }
  79. r, e := strconv.Atoi(ret)
  80. if e != nil {
  81. return 0
  82. }
  83. return r
  84. }
  85. //在offset 位置写数据,返回: 指定偏移量原来储存的位
  86. func String_SetBit(key string, offset int, value int) (int, bool) {
  87. rc := RedisClient.Get()
  88. if rc == nil {
  89. log.Release("String_SetBit no redis connection")
  90. return -1, false
  91. }
  92. defer rc.Close()
  93. //不是0, 1
  94. if value != 0 && value != 1 {
  95. return -1, false
  96. }
  97. i, err := redis.Int(rc.Do("SETBIT", key, offset, value))
  98. if err != nil {
  99. log.Release("String_SetBit key=%v offset=%v value=%v err=%v", key, offset, value, err)
  100. return -1, false
  101. }
  102. return i, true
  103. }
  104. //String_BITCOUNT 统计字符串被设置为1的bit数(注意: start, end 是指字节位置).
  105. func String_BITCOUNT(key string, start int, end int) (int, bool) {
  106. rc := RedisClient.Get()
  107. if rc == nil {
  108. log.Release("String_BITCOUNT no redis connection")
  109. return -1, false
  110. }
  111. defer rc.Close()
  112. i, err := redis.Int(rc.Do("BITCOUNT", key, start, end))
  113. if err != nil {
  114. log.Release("String_BITCOUNT key=%v start=%v end=%v err=%v", key, start, end, err)
  115. return -1, false
  116. }
  117. return i, true
  118. }
  119. //String_GETSET 写数据并获取写前的旧数据
  120. func String_GETSET(key string, value string) (string, bool) {
  121. rc := RedisClient.Get()
  122. if rc == nil {
  123. log.Release("String_Get no redis connection")
  124. return "", false
  125. }
  126. defer rc.Close()
  127. ret, err := redis.String(rc.Do("GETSET", key, value))
  128. if err != nil {
  129. //redis 返回是 nil, 还没有 key
  130. if err == redis.ErrNil {
  131. return "", true
  132. }
  133. //其他错误
  134. return "", false
  135. }
  136. return ret, true
  137. }