redis.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package util
  2. import (
  3. "fmt"
  4. "io"
  5. "sync"
  6. "time"
  7. "xiaoniaokuaiyan.com/xiaoniao/config"
  8. "gopkg.in/redis.v2"
  9. )
  10. var redisInstance *redis.Client
  11. var redisOnce sync.Once
  12. func GetRedis() *redis.Client {
  13. redisOnce.Do(func() {
  14. var (
  15. dsec = config.IniConf.Section("database")
  16. host = dsec.Key("redis.host").Value()
  17. port = dsec.Key("redis.port").Value()
  18. )
  19. var redisOptions *redis.Options = &redis.Options{
  20. Addr: fmt.Sprintf("%s:%s", host, port),
  21. //Addr: "101.201.196.166:6379",
  22. }
  23. redisInstance = redis.NewTCPClient(redisOptions)
  24. })
  25. var password = config.IniConf.Section("database").Key("redis.password").Value()
  26. //password:="xn9659$"
  27. cmdStatus := redisInstance.Auth(password)
  28. if cmdStatus.Err() == io.EOF {
  29. //fmt.Println(cmdStatus.Err())
  30. redisInstance.Ping()
  31. redisInstance.Auth(password)
  32. }
  33. return redisInstance
  34. }
  35. func GetRedisValue(key string) (string, error) {
  36. client := GetRedis()
  37. client.Select(12)
  38. strCmd := client.Get(key)
  39. if err := strCmd.Err(); err != nil {
  40. return "", err
  41. }
  42. return strCmd.Val(), nil
  43. }
  44. func SetRedisValue(key, val string, period int64) (bool, error) {
  45. client := GetRedis()
  46. client.Select(12)
  47. statusCmd := client.Set(key, val)
  48. if err := statusCmd.Err(); err != nil {
  49. return false, err
  50. }
  51. if int64(period) > 0 {
  52. client.Expire(key, time.Duration(period))
  53. }
  54. return true, nil
  55. }
  56. func SetLock(key string) error {
  57. client := GetRedis()
  58. cmd := client.SetNX(key, "1")
  59. if !cmd.Val() || cmd.Err() != nil {
  60. //log.Println(cmd.Err())
  61. return fmt.Errorf("redis error")
  62. }
  63. client.Expire(key, time.Second*3)
  64. return nil
  65. }
  66. func DelLock(key string) {
  67. client := GetRedis()
  68. client.Del(key)
  69. }