You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1004 B
53 lines
1004 B
package kvrocks |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"strconv" |
|
"time" |
|
|
|
"github.com/redis/go-redis/v9" |
|
) |
|
|
|
type KVRocksDB struct { |
|
client *redis.Client |
|
} |
|
|
|
func NewKVRocksDB(conf redis.Options) *KVRocksDB { |
|
client := redis.NewClient(&conf) |
|
return &KVRocksDB{ |
|
client: client, |
|
} |
|
} |
|
|
|
func (db *KVRocksDB) Ping() (err error) { |
|
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) |
|
defer cancel() |
|
_, err = db.client.Ping(ctx).Result() |
|
if err != nil { |
|
return fmt.Errorf("can't connect kvrocks, %v", err) |
|
} |
|
return |
|
} |
|
|
|
func (db *KVRocksDB) DB() *redis.Client { |
|
return db.client |
|
} |
|
|
|
func (db *KVRocksDB) GetI64(ctx context.Context, key string) (v int64, err error) { |
|
v, err = db.DB().Get(ctx, key).Int64() |
|
if err != nil { |
|
if err == redis.Nil { |
|
return 0, nil |
|
} |
|
return 0, err |
|
} |
|
return v, nil |
|
} |
|
|
|
// todo set async |
|
func (db *KVRocksDB) SetI64(ctx context.Context, key string, v int64) (err error) { |
|
vs := strconv.FormatInt(v, 10) |
|
err = db.DB().Set(ctx, key, vs, 0).Err() |
|
return |
|
}
|
|
|