redismgr.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package redismgr
  2. import (
  3. "server/conf"
  4. "time"
  5. "github.com/gomodule/redigo/redis"
  6. "github.com/name5566/leaf/log"
  7. )
  8. var (
  9. pool *redis.Pool
  10. )
  11. func init() {
  12. Connect()
  13. }
  14. // Connect 初始化连接池
  15. func Connect() {
  16. pool = &redis.Pool{
  17. MaxIdle: 256, // 最大空闲连接数
  18. MaxActive: 0, // 最大连接数,0表示不限制
  19. IdleTimeout: time.Second * 60, // 空闲超时时间
  20. Dial: func() (redis.Conn, error) {
  21. return redis.Dial(
  22. "tcp",
  23. conf.RedisDBAddr,
  24. redis.DialPassword(""), // 如果有密码
  25. redis.DialDatabase(0), // 选择数据库
  26. )
  27. },
  28. }
  29. }
  30. // Set 设置键值对
  31. func Set(key string, value interface{}, expiration ...int) error {
  32. conn := pool.Get()
  33. defer conn.Close()
  34. if len(expiration) > 0 {
  35. _, err := conn.Do("SETEX", key, expiration[0], value)
  36. return err
  37. }
  38. _, err := conn.Do("SET", key, value)
  39. return err
  40. }
  41. // Get 获取值
  42. func Get(key string) (string, error) {
  43. conn := pool.Get()
  44. defer conn.Close()
  45. reply, err := redis.String(conn.Do("GET", key))
  46. if err == redis.ErrNil {
  47. return "", nil
  48. }
  49. return reply, err
  50. }
  51. // Delete 删除键
  52. func Delete(key string) error {
  53. conn := pool.Get()
  54. defer conn.Close()
  55. _, err := conn.Do("DEL", key)
  56. return err
  57. }
  58. // Exists 检查键是否存在
  59. func Exists(key string) (bool, error) {
  60. conn := pool.Get()
  61. defer conn.Close()
  62. return redis.Bool(conn.Do("EXISTS", key))
  63. }
  64. // HashSet 设置哈希表字段
  65. func HashSet(key, field string, value interface{}) error {
  66. conn := pool.Get()
  67. defer conn.Close()
  68. _, err := conn.Do("HSET", key, field, value)
  69. return err
  70. }
  71. // HashGet 获取哈希表字段
  72. func HashGet(key, field string) (string, error) {
  73. conn := pool.Get()
  74. defer conn.Close()
  75. reply, err := redis.String(conn.Do("HGET", key, field))
  76. if err == redis.ErrNil {
  77. return "", nil
  78. }
  79. return reply, err
  80. }
  81. // ListPush 将值推入列表
  82. func ListPush(key string, value interface{}) error {
  83. conn := pool.Get()
  84. defer conn.Close()
  85. _, err := conn.Do("LPUSH", key, value)
  86. return err
  87. }
  88. // ListRange 获取列表范围内的元素
  89. func ListRange(key string, start, stop int) ([]string, error) {
  90. conn := pool.Get()
  91. defer conn.Close()
  92. return redis.Strings(conn.Do("LRANGE", key, start, stop))
  93. }
  94. // 测试函数
  95. func test() {
  96. // 测试字符串操作
  97. err := Set("test_key", "test_value", 60)
  98. if err != nil {
  99. log.Debug("Set error:", err)
  100. }
  101. value, err := Get("test_key")
  102. if err != nil {
  103. log.Debug("Get error:", err)
  104. }
  105. log.Debug("Get value:", value)
  106. // 测试哈希表操作
  107. err = HashSet("user:1001", "name", "player1")
  108. if err != nil {
  109. log.Debug("HashSet error:", err)
  110. }
  111. name, err := HashGet("user:1001", "name")
  112. if err != nil {
  113. log.Debug("HashGet error:", err)
  114. }
  115. log.Debug("HashGet name:", name)
  116. // 测试列表操作
  117. err = ListPush("game:list", "game1")
  118. if err != nil {
  119. log.Debug("ListPush error:", err)
  120. }
  121. games, err := ListRange("game:list", 0, -1)
  122. if err != nil {
  123. log.Debug("ListRange error:", err)
  124. }
  125. log.Debug("Games:", games)
  126. }