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
Документация:
Быстрый старт:
Базовый пример:
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)
}
Использование пула:
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)
}
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)
}
Кластер:
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
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)
}
}
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)
}
}
godis
is licensed under the MIT License, 100% free and open-source, forever.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )