123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package redismgr
- import (
- "server/conf"
- "time"
- "github.com/gomodule/redigo/redis"
- "github.com/name5566/leaf/log"
- )
- var (
- pool *redis.Pool
- )
- func init() {
- Connect()
- }
- // Connect 初始化连接池
- func Connect() {
- pool = &redis.Pool{
- MaxIdle: 256, // 最大空闲连接数
- MaxActive: 0, // 最大连接数,0表示不限制
- IdleTimeout: time.Second * 60, // 空闲超时时间
- Dial: func() (redis.Conn, error) {
- return redis.Dial(
- "tcp",
- conf.RedisDBAddr,
- redis.DialPassword(""), // 如果有密码
- redis.DialDatabase(0), // 选择数据库
- )
- },
- }
- }
- // Set 设置键值对
- func Set(key string, value interface{}, expiration ...int) error {
- conn := pool.Get()
- defer conn.Close()
- if len(expiration) > 0 {
- _, err := conn.Do("SETEX", key, expiration[0], value)
- return err
- }
- _, err := conn.Do("SET", key, value)
- return err
- }
- // Get 获取值
- func Get(key string) (string, error) {
- conn := pool.Get()
- defer conn.Close()
- reply, err := redis.String(conn.Do("GET", key))
- if err == redis.ErrNil {
- return "", nil
- }
- return reply, err
- }
- // Delete 删除键
- func Delete(key string) error {
- conn := pool.Get()
- defer conn.Close()
- _, err := conn.Do("DEL", key)
- return err
- }
- // Exists 检查键是否存在
- func Exists(key string) (bool, error) {
- conn := pool.Get()
- defer conn.Close()
- return redis.Bool(conn.Do("EXISTS", key))
- }
- // HashSet 设置哈希表字段
- func HashSet(key, field string, value interface{}) error {
- conn := pool.Get()
- defer conn.Close()
- _, err := conn.Do("HSET", key, field, value)
- return err
- }
- // HashGet 获取哈希表字段
- func HashGet(key, field string) (string, error) {
- conn := pool.Get()
- defer conn.Close()
- reply, err := redis.String(conn.Do("HGET", key, field))
- if err == redis.ErrNil {
- return "", nil
- }
- return reply, err
- }
- // ListPush 将值推入列表
- func ListPush(key string, value interface{}) error {
- conn := pool.Get()
- defer conn.Close()
- _, err := conn.Do("LPUSH", key, value)
- return err
- }
- // ListRange 获取列表范围内的元素
- func ListRange(key string, start, stop int) ([]string, error) {
- conn := pool.Get()
- defer conn.Close()
- return redis.Strings(conn.Do("LRANGE", key, start, stop))
- }
- // 测试函数
- func test() {
- // 测试字符串操作
- err := Set("test_key", "test_value", 60)
- if err != nil {
- log.Debug("Set error:", err)
- }
- value, err := Get("test_key")
- if err != nil {
- log.Debug("Get error:", err)
- }
- log.Debug("Get value:", value)
- // 测试哈希表操作
- err = HashSet("user:1001", "name", "player1")
- if err != nil {
- log.Debug("HashSet error:", err)
- }
- name, err := HashGet("user:1001", "name")
- if err != nil {
- log.Debug("HashGet error:", err)
- }
- log.Debug("HashGet name:", name)
- // 测试列表操作
- err = ListPush("game:list", "game1")
- if err != nil {
- log.Debug("ListPush error:", err)
- }
- games, err := ListRange("game:list", 0, -1)
- if err != nil {
- log.Debug("ListRange error:", err)
- }
- log.Debug("Games:", games)
- }
|