1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/piaohao-godis

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Godis

redis-клиент, реализованный на Golang, по аналогии с jedis.

Эта библиотека реализует большинство команд Redis, включая обычные команды Redis, команды кластера, Sentinel и Pipeline.

Если вы когда-либо использовали jedis, то сможете легко использовать godis. Godis практически имеет тот же метод работы, что и jedis.

Особенно стоит отметить, что godis реализует распределённую блокировку в одиночном режиме и режиме кластера. Блокировка в godis работает гораздо быстрее, чем в redisson. На моём компьютере (i7, 8 ядер, 32 ГБ) при выполнении 100 000 циклов с использованием 8 потоков бизнес-код просто считает ++, redisson требуется 18–20 секунд, а godis — всего 7 секунд.

В godis было проведено множество тестов для обеспечения стабильности.

Я буду рад любым вашим предложениям и активно буду работать над проектом.

Особенности:

  • кластер;
  • конвейер;
  • транзакция;
  • распределённая блокировка;
  • другие функции в разработке.

Установка:

go get -u github.com/piaohao/godis

или используйте go.mod:

require github.com/piaohao/godis latest

Документация:

Быстрый старт:

  1. Базовый пример:

    package main
    
    import (
        "github.com/piaohao/godis"
    )
    
    func main() {
        redis := godis.NewRedis(&godis.Option{
            Host: "localhost",
            Port: 6379,
            Db:   0,
        })
        defer redis.Close()
        redis.Set("godis", "1")
        arr, _ := redis.Get("godis")
        println(arr)
    }
  2. Использование пула:

    package main
    
    import (
        "github.com/piaohao/godis"
    )
    
    func main() {
        option:=&godis.Option{
            Host: "localhost",
            Port: 6379,
            Db:   0,
        }
        pool := godis.NewPool(&godis.PoolConfig{}, option)
        redis, _ := pool.GetResource()
        defer redis.Close()
        redis.Set("godis", "1")
        arr, _ := redis.Get("godis")
        println(arr)
    }
  3. PubSub:

    package main
    
    import (
        "github.com/piaohao/godis"
        "time"
    )
    
    func main() {
        option:=&godis.Option{
            Host: "localhost",
            Port: 6379,
            Db:   0,
        }
        pool := godis.NewPool(&godis.PoolConfig{}, option)
        go func() {
            redis, _ := pool.GetResource()
            defer redis.Close()
            pubsub := &godis.RedisPubSub{
                OnMessage: func(channel, message string) {
                    println(channel, message)
                },
                OnSubscribe: func(channel string, subscribedChannels int) {
                    println(channel, subscribedChannels)
                },
                OnPong: func(channel string) {
                    println("recieve pong")
                },
            }
            redis.Subscribe(pubsub, "godis")
        }()
        time.Sleep(1 * time.Second)
        {
            redis, _ := pool.GetResource()
            defer redis.Close()
            redis.Publish("godis", "godis pubsub")
            redis.Close()
        }
        time.Sleep(1 * time.Second)
    }
  4. Кластер:

    package main
    
    import (
        "github.com/piaohao/godis"
        "time"
    )
    
    func main() {
        cluster := godis.NewRedisCluster(&godis.ClusterOption{
            Nodes:             []string{"localhost:7000", "localhost:7001", "localhost:7002",
    ...
    ``` **Перевод текста на русский язык:**
    

pipeline

package main

import (
    "github.com/piaohao/godis"
    "time"
)

func main() {
    option:=&godis.Option{
        Host: "localhost",
        Port: 6379,
        Db:   0,
    }
    pool := godis.NewPool(&godis.PoolConfig{}, option)
    redis, _ := pool.GetResource()
    defer redis.Close()
    p := redis.Pipelined()
    infoResp, _ := p.Info()
    timeResp, _ := p.Time()
    p.Sync()
    timeList, _ := timeResp.Get()
    println(timeList)
    info, _ := infoResp.Get()
    println(info)
}

transaction

package main

import (
    "github.com/piaohao/godis"
    "time"
)

func main() {
    option:=&godis.Option{
        Host: "localhost",
        Port: 6379,
        Db:   0,
    }
    pool := godis.NewPool(nil, option)
    redis, _ := pool.GetResource()
    defer redis.Close()
    p, _ := redis.Multi()
    infoResp, _ := p.Info()
    timeResp, _ := p.Time()
    p.Exec()
    timeList, _ := timeResp.Get()
    println(timeList)
    info, _ := infoResp.Get()
    println(info)
}

distribute lock

  • single redis
package main

import (
    "github.com/piaohao/godis"
    "time"
)

func main() {
    locker := godis.NewLocker(&godis.Option{
          Host: "localhost",
          Port: 6379,
          Db:   0,
      }, &godis.LockOption{
          Timeout: 5*time.Second,
      })
    lock, err := locker.TryLock("lock")
    if err == nil && lock!=nil {
        //do something
        locker.UnLock(lock)
    }

}
  • redis cluster
package main

import (
    "github.com/piaohao/godis"
    "time"
)

func main() {
    locker := godis.NewClusterLocker(&godis.ClusterOption{
        Nodes:             []string{"localhost:7000", "localhost:7001", "localhost:7002", "localhost:7003", "localhost:7004", "localhost:7005"},
        ConnectionTimeout: 0,
        SoTimeout:         0,
        MaxAttempts:       0,
        Password:          "",
        PoolConfig:        &godis.PoolConfig{},
    },&godis.LockOption{
        Timeout: 5*time.Second,
    })
    lock, err := locker.TryLock("lock")
    if err == nil && lock!=nil {
        //do something
        locker.UnLock(lock)
    }
}

License

godis is licensed under the MIT License, 100% free and open-source, forever.

Thanks

Contact

piao.hao@qq.com

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Godis — это клиент Redis, реализованный на Golang, вдохновлённый Jedis. Godis реализует почти все команды Redis, включая команды для одиночного сервера, кластера, конвейера и транзакций. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/piaohao-godis.git
git@api.gitlife.ru:oschina-mirror/piaohao-godis.git
oschina-mirror
piaohao-godis
piaohao-godis
master