gossdb

package module
v1.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 6, 2019 License: MIT Imports: 9 Imported by: 6

README

gossdb

性能测试
测试环境
MacBook Pro (13-inch, Mid 2012) 
cpu 2.5 GHz Intel Core i5
内存 8 GB 1600 MHz DDR3
goos: darwin
goarch: amd64
pkg: github.com/seefan/gossdb/example
5000000	       318 ns/op
5000000	       307 ns/op
5000000	       309 ns/op
5000000	       316 ns/op
5000000	       321 ns/op
3000000	       409 ns/op
3000000	       417 ns/op
3000000	       431 ns/op
5000000	       394 ns/op
3000000	       402 ns/op
PASS
功能列表
  • 修改自官方的驱动。
  • 支持连接池。新版本使用了新的连接池,性能比原连接池大约提升10%,使用的渐近回收的方式,防止在并发不稳定的情况下,回收和新建连接过快。
  • 已支持 set 相关方法
  • 已支持 zset 相关方法
  • 已支持 hset 相关方法
  • 已支持 queue 相关方法
  • 已支持返回值类型转换,可以方便的把从ssdb中取到的内容转化为指定类型。
连接池参数
  • MaxPoolSize int 最大连接池个数,默认为 20
  • MinPoolSize int 最小连接池数,默认为 5
  • GetClientTimeout int 获取连接超时时间,单位为秒,默认为 5
  • AcquireIncrement int 当连接池中的连接耗尽的时候一次同时获取的连接数。默认值: 5
  • MaxWaitSize int //最大等待数目,当连接池满后,新建连接将等待池中连接释放后才可以继续,本值限制最大等待的数量,超过本值后将抛出异常。默认值: 1000,建议在内存允许的情况下,设置为最大并发数量。
  • HealthSecond int 健康检查时间隔,单位为秒。默认值: 5。定期回收长期不用的连接。
示例配置
[ssdb]
#ssdb的主机IP
host=127.0.0.1
#ssdb的端口
port=8888
#连接池检查时间间隔
health_second=5
#连接密码,默认为空
password=
#最大等待数目,当连接池满后,新建连接将等待池中连接释放后才可以继续,本值限制最大等待的数量,超过本值后将抛出异常。默认值: 1000
max_wait_size=1000
#当连接池中的连接耗尽的时候一次同时获取的连接数。默认值: 5
acquire_increment=5
#最小连接池数。默认值: 5
min_pool_size=5
#最大连接池个数。默认值: 20
max_pool_size=20
#获取连接超时时间,单位为秒。默认值: 5
get_client_timeout=5

更多说明请见这里

所有的API基本上忠于ssdb的原始API用法,只针对go的特点增加部分方法。所以也可以参照官方文档使用。

示例:

pool, err := gossdb.NewPool(&conf.Config{
	Host:             "127.0.0.1",
	Port:             6380,
	MinPoolSize:      5,
	MaxPoolSize:      50,
	AcquireIncrement: 5,
})
if err != nil {
	log.Fatal(err)
	return
}


c, err := pool.NewClient()
if err != nil {
	log.Println(err.Error())
	return
}
defer c.Close()
c.Set("test","hello world.")
re, err := c.Get("test")
if err != nil {
	log.Println(err)
} else {
	log.Println(re, "is get")
}
//设置10 秒过期
c.Set("test1",1225,10)
//取出数据,并指定类型为 int
re, err = c.Get("test1")
if err != nil {
	log.Println(err)
} else {
	log.Println(re.Int(), "is get")
}
更方便的方法

使用ssdb目录下的工具类

if err := ssdb.Start(); err != nil {
	println("无法连接到ssdb")
	os.Exit(1)
}
defer ssdb.Close()
//获取client
client, err := ssdb.Client()
if err != nil {
	println("无法获取连接")
	os.Exit(1)
}
defer client.Close()
client.Set("a", 1)
client.Get("a")
//another simple run
ssdb.Simple(func(c *gossdb.Client) (err error) {
	err=c.Set("test", "hello world")
	err=c.Get("test")
	return
})

Documentation

Overview

从官方客户端派生出来的客户端,支持连接池,使用习惯与大多数客户端保持一致。

继承官方连接方式。
支持连接池。包括连接过期,大小限制,超时等基本功能。
支持 json 自动编码
支持返回值类型转换

示例:

pool, err := gossdb.NewPool(&gossdb.Config{
	Host:             "127.0.0.1",
	Port:             6380,
	MinPoolSize:      5,
	MaxPoolSize:      50,
	AcquireIncrement: 5,
})
if err != nil {
	log.Fatal(err)
	return
}

s, err := pool.NewClient()
if err != nil {
	log.Println(idx, err.Error())
	return
}
defer s.Close()
s.Set("test","hello world.")
re, err := s.Get("test")
if err != nil {
	log.Println(err)
} else {
	log.Println(re, "is get")
}

Index

Constants

View Source
const (
	OK       string = "ok"
	NotFound string = "not_found"
)
View Source
const (
	ENDN = '\n'
	ENDR = '\r'
)

Variables

View Source
var (
	//是否启动编码,启用后会对struct 等复杂结构 进行 json 编码,以支持更多类型
	Encoding = false
)

Functions

func ToNum

func ToNum(bs []byte) int

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

可回收的连接,支持连接池。 非协程安全,多协程请使用多个连接。

func (*Client) Close

func (c *Client) Close() error

关闭连接,连接关闭后只是放回到连接池,不会物理关闭。

func (*Client) DbSize

func (c *Client) DbSize() (re int, err error)

查询数据库大小

返回 re,返回数据库的估计大小, 以字节为单位. 如果服务器开启了压缩, 返回压缩后的大小.
返回 err,执行的错误

func (*Client) Del

func (c *Client) Del(key string) error

删除指定 key

key 要删除的 key
返回 err,执行的错误,操作成功返回 nil

func (*Client) Do

func (c *Client) Do(args ...interface{}) ([]string, error)

func (*Client) Exists

func (c *Client) Exists(key string) (re bool, err error)

查询指定 key 是否存在

key 要查询的 key
返回 re,如果当前 key 不存在返回 false
返回 err,执行的错误,操作成功返回 nil

func (*Client) Expire

func (c *Client) Expire(key string, ttl int64) (re bool, err error)

设置过期

key 要设置过期的 key
ttl 存活时间(秒)
返回 re,设置是否成功,如果当前 key 不存在返回 false
返回 err,执行的错误,操作成功返回 nil

func (*Client) Get

func (c *Client) Get(key string) (Value, error)

获取指定 key 的值内容

key 键值
返回 一个 Value,可以方便的向其它类型转换
返回 一个可能的错误,操作成功返回 nil

func (*Client) Getset

func (c *Client) Getset(key string, val interface{}) (Value, error)

更新 key 对应的 value, 并返回更新前的旧的 value.

key 键值
val 存贮的 value 值,val只支持基本的类型,如果要支持复杂的类型,需要开启连接池的 Encoding 选项
返回 一个 Value,可以方便的向其它类型转换.如果 key 不存在则返回 "", 否则返回 key 对应的值内容.
返回 一个可能的错误,操作成功返回 nil

func (*Client) Hclear

func (c *Client) Hclear(setName string) (err error)

删除 hashmap 中的所有 key

setName hashmap 的名字
返回 err,执行的错误,操作成功返回 nil

func (*Client) Hdel

func (c *Client) Hdel(setName, key string) (err error)

删除 hashmap 中的指定 key,不能通过返回值来判断被删除的 key 是否存在.

setName hashmap 的名字
key hashmap 的 key
返回 err,执行的错误

func (*Client) Hexists

func (c *Client) Hexists(setName, key string) (re bool, err error)

判断指定的 key 是否存在于 hashmap 中.

setName hashmap 的名字
key hashmap 的 key
返回 re,如果当前 key 不存在返回 false
返回 err,执行的错误,操作成功返回 nil

func (*Client) Hget

func (c *Client) Hget(setName, key string) (value Value, err error)

获取 hashmap 中指定 key 的值内容.

setName hashmap 的名字
key hashmap 的 key
返回 value key 的值
返回 err,执行的错误

func (*Client) HgetAll

func (c *Client) HgetAll(setName string) (val map[string]Value, err error)

批量获取 hashmap 中全部 对应的权重值.

setName - hashmap 的名字.
返回 包含 key-value 的关联数组, 如果某个 key 不存在, 则它不会出现在返回数组中.
返回 err,执行的错误,操作成功返回 nil

func (*Client) Hincr

func (c *Client) Hincr(setName, key string, num int64) (val int64, err error)

设置 hashmap 中指定 key 对应的值增加 num. 参数 num 可以为负数.

setName - hashmap 的名字.
key 键值
num 增加的值
返回 val,整数,增加 num 后的新值
返回 err,可能的错误,操作成功返回 nil

func (*Client) Hkeys

func (c *Client) Hkeys(setName, keyStart, keyEnd string, limit int64) ([]string, error)

列出 hashmap 中处于区间 (keyStart, keyEnd] 的 key 列表.

name - hashmap 的名字.
keyStart - 返回的起始 key(不包含), 空字符串表示 -inf.
keyEnd - 返回的结束 key(包含), 空字符串表示 +inf.
limit - 最多返回这么多个元素.
返回 包含名字的数组
返回 err,执行的错误,操作成功返回 nil

func (*Client) Hlist

func (c *Client) Hlist(nameStart, nameEnd string, limit int64) ([]string, error)

列出名字处于区间 (name_start, name_end] 的 hashmap. ("", ""] 表示整个区间.

nameStart - 返回的起始 key(不包含), 空字符串表示 -inf.
nameEnd - 返回的结束 key(包含), 空字符串表示 +inf.
limit - 最多返回这么多个元素.
返回 包含名字的数组
返回 err,执行的错误,操作成功返回 nil

func (*Client) Hrscan

func (c *Client) Hrscan(setName string, keyStart, keyEnd string, limit int64) (map[string]Value, error)

列出 hashmap 中处于区间 (key_start, key_end] 的 key-value 列表. ("", ""] 表示整个区间.

setName - hashmap 的名字.
keyStart - 返回的起始 key(不包含), 空字符串表示 -inf.
keyEnd - 返回的结束 key(包含), 空字符串表示 +inf.
limit - 最多返回这么多个元素.
返回包含 key-value 的关联字典.
返回 err,执行的错误,操作成功返回 nil

func (*Client) HrscanArray

func (c *Client) HrscanArray(setName string, keyStart, keyEnd string, limit int64, reverse ...bool) ([]string, []Value, error)

列出 hashmap 中处于区间 (key_start, key_end] 的 key,value 列表. ("", ""] 表示整个区间.

setName - hashmap 的名字.
keyStart - 返回的起始 key(不包含), 空字符串表示 -inf.
keyEnd - 返回的结束 key(包含), 空字符串表示 +inf.
limit - 最多返回这么多个元素.
返回包含 key-value 的关联字典.
返回 err,执行的错误,操作成功返回 nil

func (*Client) Hscan

func (c *Client) Hscan(setName string, keyStart, keyEnd string, limit int64, reverse ...bool) (map[string]Value, error)

列出 hashmap 中处于区间 (key_start, key_end] 的 key-value 列表. ("", ""] 表示整个区间.

setName - hashmap 的名字.
keyStart - 返回的起始 key(不包含), 空字符串表示 -inf.
keyEnd - 返回的结束 key(包含), 空字符串表示 +inf.
limit - 最多返回这么多个元素.
返回包含 key-value 的关联字典.
返回 err,执行的错误,操作成功返回 nil

func (*Client) HscanArray

func (c *Client) HscanArray(setName string, keyStart, keyEnd string, limit int64, reverse ...bool) ([]string, []Value, error)

列出 hashmap 中处于区间 (key_start, key_end] 的 key,value 列表. ("", ""] 表示整个区间.

setName - hashmap 的名字.
keyStart - 返回的起始 key(不包含), 空字符串表示 -inf.
keyEnd - 返回的结束 key(包含), 空字符串表示 +inf.
limit - 最多返回这么多个元素.
返回包含 key-value 的关联字典.
返回 err,执行的错误,操作成功返回 nil

func (*Client) Hset

func (c *Client) Hset(setName, key string, value interface{}) (err error)

设置 hashmap 中指定 key 对应的值内容.

setName hashmap 的名字
key hashmap 的 key
value key 的值
返回 err,执行的错误

func (*Client) Hsize

func (c *Client) Hsize(setName string) (val int64, err error)

返回 hashmap 中的元素个数.

setName - hashmap 的名字.
返回 val,整数,增加 num 后的新值
返回 err,可能的错误,操作成功返回 nil

func (*Client) Incr

func (c *Client) Incr(key string, num int64) (val int64, err error)

使 key 对应的值增加 num. 参数 num 可以为负数.

key 键值
num 增加的值
返回 val,整数,增加 num 后的新值
返回 err,可能的错误,操作成功返回 nil

func (*Client) Info

func (c *Client) Info() (re []string, err error)

返回服务器的信息.

返回 re,返回数据库的估计大小, 以字节为单位. 如果服务器开启了压缩, 返回压缩后的大小.
返回 err,执行的错误

func (*Client) Keys

func (c *Client) Keys(keyStart, keyEnd string, limit int64) ([]string, error)

列出处于区间 (key_start, key_end] 的 key 列表.("", ""] 表示整个区间.

keyStart int 返回的起始 key(不包含), 空字符串表示 -inf.
keyEnd int 返回的结束 key(包含), 空字符串表示 +inf.
limit int 最多返回这么多个元素.
返回 返回包含 key 的数组.
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiDel

func (c *Client) MultiDel(key ...string) (err error)

批量删除一批 key 和其对应的值内容.

key,要删除的 key,可以为多个
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiGet

func (c *Client) MultiGet(key ...string) (val map[string]Value, err error)

批量获取一批 key 对应的值内容.

key,要获取的 key,可以为多个
返回 val,一个包含返回的 map
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiGetArray

func (c *Client) MultiGetArray(key []string) (val map[string]Value, err error)

批量获取一批 key 对应的值内容.(输入分片),MultiGet的别名

key,要获取的 key,可以为多个
返回 val,一个包含返回的 map
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiGetSlice

func (c *Client) MultiGetSlice(key ...string) (keys []string, values []Value, err error)

批量获取一批 key 对应的值内容.

key,要获取的 key,可以为多个
返回 keys和value分片
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiGetSliceArray

func (c *Client) MultiGetSliceArray(key []string) (keys []string, values []Value, err error)

批量获取一批 key 对应的值内容.(输入分片),MultiGetSlice的别名

key,要获取的 key,可以为多个
返回 keys和value分片
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiHdel

func (c *Client) MultiHdel(setName string, key ...string) (err error)

批量删除 hashmap 中的 key.

setName - hashmap 的名字.
keys - 包含 key 的数组.
返回 err,执行的错误,操作成功返回 nil

func (*Client) MultiHdelArray

func (c *Client) MultiHdelArray(setName string, key []string) (err error)

批量删除 hashmap 中的 key.(输入分片)

setName - hashmap 的名字.
keys - 包含 key 的数组.
返回 err,执行的错误,操作成功返回 nil

func (*Client) MultiHget

func (c *Client) MultiHget(setName string, key ...string) (val map[string]Value, err error)

批量获取 hashmap 中多个 key 对应的权重值.

setName - hashmap 的名字.
keys - 包含 key 的数组 .
返回 包含 key-value 的关联数组, 如果某个 key 不存在, 则它不会出现在返回数组中.
返回 err,执行的错误,操作成功返回 nil

func (*Client) MultiHgetAll

func (c *Client) MultiHgetAll(setName string) (val map[string]Value, err error)

批量获取 hashmap 中全部 对应的权重值.

setName - hashmap 的名字.
keys - 包含 key 的数组 .
返回 包含 key-value 的关联数组, 如果某个 key 不存在, 则它不会出现在返回数组中.
返回 err,执行的错误,操作成功返回 nil

func (*Client) MultiHgetAllSlice

func (c *Client) MultiHgetAllSlice(setName string) (keys []string, values []Value, err error)

批量获取 hashmap 中全部 对应的权重值.

setName - hashmap 的名字.
返回 包含 key和value 的有序数组, 如果某个 key 不存在, 则它不会出现在返回数组中.
返回 err,执行的错误,操作成功返回 nil

func (*Client) MultiHgetArray

func (c *Client) MultiHgetArray(setName string, key []string) (val map[string]Value, err error)

批量获取 hashmap 中多个 key 对应的权重值.(输入分片)

setName - hashmap 的名字.
keys - 包含 key 的数组 .
返回 包含 key-value 的关联数组, 如果某个 key 不存在, 则它不会出现在返回数组中.
返回 err,执行的错误,操作成功返回 nil

func (*Client) MultiHgetSlice

func (c *Client) MultiHgetSlice(setName string, key ...string) (keys []string, values []Value, err error)

批量获取 hashmap 中多个 key 对应的权重值.

setName - hashmap 的名字.
keys - 包含 key 的数组 .
返回 包含 key和value 的有序数组, 如果某个 key 不存在, 则它不会出现在返回数组中.
返回 err,执行的错误,操作成功返回 nil

func (*Client) MultiHgetSliceArray

func (c *Client) MultiHgetSliceArray(setName string, key []string) (keys []string, values []Value, err error)

批量获取 hashmap 中多个 key 对应的权重值.(输入分片)

setName - hashmap 的名字.
keys - 包含 key 的数组 .
返回 包含 key和value 的有序数组, 如果某个 key 不存在, 则它不会出现在返回数组中.
返回 err,执行的错误,操作成功返回 nil

func (*Client) MultiHset

func (c *Client) MultiHset(setName string, kvs map[string]interface{}) (err error)

批量设置 hashmap 中的 key-value.

setName - hashmap 的名字.
kvs - 包含 key-value 的关联数组 .
返回 err,执行的错误,操作成功返回 nil

func (*Client) MultiSet

func (c *Client) MultiSet(kvs map[string]interface{}) (err error)

批量设置一批 key-value.

包含 key-value 的字典
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiZdel

func (c *Client) MultiZdel(setName string, key ...string) (err error)

批量删除 zset 中的 key-score.

setName zset名称
key 要删除key的列表,支持多个key
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiZget

func (c *Client) MultiZget(setName string, key ...string) (val map[string]int64, err error)

批量获取 zset 中的 key-score.

setName zset名称
key 要获取key的列表,支持多个key
返回 val 包含 key-score 的map
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiZgetArray

func (c *Client) MultiZgetArray(setName string, key []string) (val map[string]int64, err error)

批量获取 zset 中的 key-score.

setName zset名称
key 要获取key的slice
返回 val 包含 key-score 的map
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiZgetSlice

func (c *Client) MultiZgetSlice(setName string, key ...string) (keys []string, scores []int64, err error)

批量获取 zset 中的 key-score.

setName zset名称
key 要获取key的列表,支持多个key
返回 keys 包含 key的slice
返回 scores 包含 key对应权重的slice
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiZgetSliceArray

func (c *Client) MultiZgetSliceArray(setName string, key []string) (keys []string, scores []int64, err error)

批量获取 zset 中的 key-score.

setName zset名称
key 要获取key的slice
返回 keys 包含 key的slice
返回 scores 包含 key对应权重的slice
返回 err,可能的错误,操作成功返回 nil

func (*Client) MultiZset

func (c *Client) MultiZset(setName string, kvs map[string]int64) (err error)

批量设置 zset 中的 key-score.

setName zset名称
kvs 包含 key-score 的map
返回 err,可能的错误,操作成功返回 nil

func (*Client) Ping

func (c *Client) Ping() bool

检查连接情况

返回 bool,如果可以正常查询数据库信息,就返回true,否则返回false

func (*Client) Qback

func (c *Client) Qback(key string) (Value, error)

返回队列的最后一个元素.

key  队列的名字
返回 val,返回的值.
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qclear

func (c *Client) Qclear(name string) (err error)

清空一个队列.

name  队列的名字
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qfront

func (c *Client) Qfront(key string) (Value, error)

返回队列的第一个元素.

key  队列的名字
返回 val,返回的值.
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qget

func (c *Client) Qget(key string, index int64) (Value, error)

返回指定位置的元素. 0 表示第一个元素, 1 是第二个 ... -1 是最后一个.

key  队列的名字
index 指定的位置,可传负数.
返回 val,返回的值.
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qlist

func (c *Client) Qlist(nameStart, nameEnd string, limit int64) ([]string, error)

列出名字处于区间 (name_start, name_end] 的 queue/list.

name_start  返回的起始名字(不包含), 空字符串表示 -inf.
name_end  返回的结束名字(包含), 空字符串表示 +inf.
limit  最多返回这么多个元素.
返回 v,返回元素的数组,为空时返回 nil
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpop

func (c *Client) Qpop(name string, reverse ...bool) (v Value, err error)

从队列首部弹出最后一个元素.

name 队列的名字
返回 v,返回一个元素,并在队列中删除 v;队列为空时返回空值
返回 err,执行的错误,操作成功返回 nil

func (*Client) QpopArray

func (c *Client) QpopArray(name string, size int64, reverse ...bool) (v []Value, err error)

从队列首部弹出最后多个个元素.

name 队列的名字
size 取出元素的数量
reverse 是否反转取
返回 v,返回多个元素,并在队列中弹出多个元素;
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpop_back

func (c *Client) Qpop_back(name string) (v Value, err error)

从队列尾部弹出最后一个元素.

name 队列的名字
返回 v,返回一个元素,并在队列中删除 v;队列为空时返回空值
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpop_back_array

func (c *Client) Qpop_back_array(name string, size int64) (v []Value, err error)

从队列尾部弹出最后多个元素.

name 队列的名字
返回 v,返回多个元素,并在队列中弹出多个元素;
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpop_front

func (c *Client) Qpop_front(name string) (v Value, err error)

从队列首部弹出最后一个元素.

name 队列的名字
返回 v,返回一个元素,并在队列中删除 v;队列为空时返回空值
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpop_front_array

func (c *Client) Qpop_front_array(name string, size int64) (v []Value, err error)

从队列首部弹出最后多个元素.

name 队列的名字
返回 v,返回多个元素,并在队列中弹出多个元素;
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpush

func (c *Client) Qpush(name string, value ...interface{}) (size int64, err error)

往队列的尾部添加一个或者多个元素

name  队列的名字
value  存贮的值,可以为多值.
返回 size,添加元素之后, 队列的长度
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpush_array

func (c *Client) Qpush_array(name string, value []interface{}) (size int64, err error)

往队列的尾部添加一个或者多个元素

name  队列的名字
value  存贮的值,可以为多值.
返回 size,添加元素之后, 队列的长度
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpush_back

func (c *Client) Qpush_back(name string, value ...interface{}) (size int64, err error)

往队列的尾部添加一个或者多个元素

name  队列的名字
value  存贮的值,可以为多值.
返回 size,添加元素之后, 队列的长度
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpush_back_array

func (c *Client) Qpush_back_array(name string, value []interface{}) (size int64, err error)

往队列的尾部添加一个或者多个元素

name  队列的名字
value  存贮的值,可以为多值.
返回 size,添加元素之后, 队列的长度
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpush_front

func (c *Client) Qpush_front(name string, value ...interface{}) (size int64, err error)

往队列的首部添加一个或者多个元素

name  队列的名字
value  存贮的值,可以为多值.
返回 size,添加元素之后, 队列的长度
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qpush_front_array

func (c *Client) Qpush_front_array(name string, value []interface{}) (size int64, err error)

往队列的首部添加一个或者多个元素

name  队列的名字
value  存贮的值,可以为多值.
返回 size,添加元素之后, 队列的长度
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qrange

func (c *Client) Qrange(name string, offset, limit int) (v []Value, err error)

返回下标处于区域 [offset, offset + limit] 的元素.

name queue 的名字.
offset 整数, 从此下标处开始返回. 从 0 开始. 可以是负数, 表示从末尾算起.
limit 正整数, 最多返回这么多个元素.
返回 v,返回元素的数组,为空时返回 nil
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qrlist

func (c *Client) Qrlist(nameStart, nameEnd string, limit int64) ([]string, error)

列出名字处于区间 (name_start, name_end] 的 queue/list.

name_start  返回的起始名字(不包含), 空字符串表示 -inf.
name_end  返回的结束名字(包含), 空字符串表示 +inf.
limit  最多返回这么多个元素.
返回 v,返回元素的数组,为空时返回 nil
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qset

func (c *Client) Qset(key string, index int64, val interface{}) (err error)

更新位于 index 位置的元素. 如果超过现有的元素范围, 会返回错误.

key  队列的名字
index 指定的位置,可传负数.
val  传入的值.
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qsize

func (c *Client) Qsize(name string) (size int64, err error)

返回队列的长度.

name  队列的名字
返回 size,队列的长度;
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qslice

func (c *Client) Qslice(name string, begin, end int) (v []Value, err error)

返回下标处于区域 [begin, end] 的元素. begin 和 end 可以是负数

name queue 的名字.
begin 正整数, 从此下标处开始返回。从 0 开始。
end 整数, 结束下标。可以是负数, 表示返回所有。
返回 v,返回元素的数组,为空时返回 nil
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qtrim

func (c *Client) Qtrim(name string, size int, reverse ...bool) (delSize int64, err error)

从队列头部删除多个元素.

name queue 的名字.
size 最多从队列删除这么多个元素
reverse 可选,是否反向执行
返回 delSize,返回被删除的元素数量
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qtrim_back

func (c *Client) Qtrim_back(name string, size int) (delSize int64, err error)

从队列尾部删除多个元素.

name queue 的名字.
size 最多从队列删除这么多个元素
返回 v,返回元素的数组,为空时返回 nil
返回 err,执行的错误,操作成功返回 nil

func (*Client) Qtrim_front

func (c *Client) Qtrim_front(name string, size int) (delSize int64, err error)

从队列头部删除多个元素.

name queue 的名字.
size 最多从队列删除这么多个元素
返回 v,返回元素的数组,为空时返回 nil
返回 err,执行的错误,操作成功返回 nil

func (*Client) Rkeys

func (c *Client) Rkeys(keyStart, keyEnd string, limit int64) ([]string, error)

列出处于区间 (key_start, key_end] 的 key 列表.("", ""] 表示整个区间.反向选择

keyStart int 返回的起始 key(不包含), 空字符串表示 -inf.
keyEnd int 返回的结束 key(包含), 空字符串表示 +inf.
limit int 最多返回这么多个元素.
返回 返回包含 key 的数组.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Rscan

func (c *Client) Rscan(keyStart, keyEnd string, limit int64) (map[string]Value, error)

列出处于区间 (key_start, key_end] 的 key-value 列表, 反向顺序.("", ""] 表示整个区间.

keyStart int 返回的起始 key(不包含), 空字符串表示 -inf.
keyEnd int 返回的结束 key(包含), 空字符串表示 +inf.
limit int 最多返回这么多个元素.
返回 返回包含 key 的数组.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Scan

func (c *Client) Scan(keyStart, keyEnd string, limit int64) (map[string]Value, error)

列出处于区间 (key_start, key_end] 的 key-value 列表.("", ""] 表示整个区间.

keyStart int 返回的起始 key(不包含), 空字符串表示 -inf.
keyEnd int 返回的结束 key(包含), 空字符串表示 +inf.
limit int 最多返回这么多个元素.
返回 返回包含 key 的数组.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Set

func (c *Client) Set(key string, val interface{}, ttl ...int64) (err error)

设置指定 key 的值内容

key 键值
val 存贮的 value 值,val只支持基本的类型,如果要支持复杂的类型,需要开启连接池的 Encoding 选项
ttl 可选,设置的过期时间,单位为秒
返回 err,可能的错误,操作成功返回 nil

func (*Client) Setnx

func (c *Client) Setnx(key string, val interface{}) (Value, error)

当 key 不存在时, 设置指定 key 的值内容. 如果已存在, 则不设置.

key 键值
val 存贮的 value 值,val只支持基本的类型,如果要支持复杂的类型,需要开启连接池的 Encoding 选项
返回 err,可能的错误,操作成功返回 nil
返回 val 1: value 已经设置, 0: key 已经存在, 不更新.

func (*Client) Strlen

func (c *Client) Strlen(key string) (int64, error)

计算字符串的长度(字节数).

key 键值
返回 字符串的长度, key 不存在则返回 0.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Substr

func (c *Client) Substr(key string, start int64, size ...int64) (val string, err error)
	if err != nil {
		return 255, goerr.NewError(err, "Getbit %s error", key)
	}
	if len(resp) == 2 && resp[0] == OK {
		return Value(resp[1]).Byte(), nil
	}
	return 255, makeError(resp, key)
}

获取字符串的子串.

key 键值
start int, 子串的字节偏移;若 start 是负数, 则从字符串末尾算起.
size  int,可选, 子串的长度(字节数), 默认为到字符串最后一个字节;若 size 是负数, 则表示从字符串末尾算起, 忽略掉那么多字节(类似 PHP 的 substr())
返回 val,字符串的部分
返回 err,可能的错误,操作成功返回 nil

func (*Client) Ttl

func (c *Client) Ttl(key string) (ttl int64, err error)

返回 key(只针对 KV 类型) 的存活时间.

key 要删除的 key
返回 ttl,key 的存活时间(秒), -1 表示没有设置存活时间.
返回 err,执行的错误,操作成功返回 nil

func (*Client) Zavg

func (c *Client) Zavg(setName string, scoreStart, scoreEnd interface{}) (val int64, err error)

返回 key 处于区间 [start,end] 的 score 的平均值.

setName zset名称
scoreStart  key 的最小权重值(可能不包含, 依赖 key_start), 空字符串表示 -inf.
scoreEnd  key 的最大权重值(包含), 空字符串表示 +inf.
返回 val 符合条件的 score 的平均值
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zclear

func (c *Client) Zclear(setName string) (err error)

删除 zset 中的所有 key.

setName zset名称
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zcount

func (c *Client) Zcount(setName string, start, end interface{}) (count int64, err error)

返回处于区间 [start,end] key 数量.

setName zset名称
start key 的最小权重值(包含), 空字符串表示 -inf.
end key 的最大权重值(包含), 空字符串表示 +inf.
返回 count 返回符合条件的 key 的数量.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zdel

func (c *Client) Zdel(setName, key string) (err error)

删除 zset 中指定 key

setName zset名称
key zset 中的 key.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zexists

func (c *Client) Zexists(setName, key string) (re bool, err error)

判断指定的 key 是否存在于 zset 中.

setName zset名称
key zset 中的 key.
返回 re 如果存在, 返回 true, 否则返回 false.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zget

func (c *Client) Zget(setName, key string) (score int64, err error)

获取 zset 中指定 key 对应的权重值.

setName zset名称
key zset 中的 key.
返回 score 整数, key 对应的权重值
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zincr

func (c *Client) Zincr(setName string, key string, num int64) (int64, error)

使 zset 中的 key 对应的值增加 num. 参数 num 可以为负数.

setName zset名称
key 要增加权重的key
num 要增加权重值
返回 int64 增加后的新权重值
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zkeys

func (c *Client) Zkeys(setName string, keyStart string, scoreStart, scoreEnd interface{}, limit int64) (keys []string, err error)

列出 zset 中的 key 列表. 参见 zscan().

setName zset名称
keyStart score_start 对应的 key.
scoreStart 返回 key 的最小权重值(可能不包含, 依赖 key_start), 空字符串表示 -inf.
scoreEnd 返回 key 的最大权重值(包含), 空字符串表示 +inf.
limit  最多返回这么多个元素.
返回 keys 返回符合条件的 key 的数组.
返回 scores 返回符合条件的 key 对应的权重.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zlist

func (c *Client) Zlist(nameStart, nameEnd string, limit int64) ([]string, error)

列出名字处于区间 (name_start, name_end] 的 zset.

name_start - 返回的起始名字(不包含), 空字符串表示 -inf.
name_end - 返回的结束名字(包含), 空字符串表示 +inf.
limit  最多返回这么多个元素.
返回 []string 返回包含名字的slice.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zpopback

func (c *Client) Zpopback(setName string, limit int64) (val map[string]int64, err error)

从 zset 尾部删除并返回 `limit` 个元素.

setName zset名称
limit 最多要删除并返回这么多个 key-score 对.
返回 包含 key-score 的map
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zpopfront

func (c *Client) Zpopfront(setName string, limit int64) (val map[string]int64, err error)

从 zset 首部删除并返回 `limit` 个元素.

setName zset名称
limit 最多要删除并返回这么多个 key-score 对.
返回 包含 key-score 的map
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zrange

func (c *Client) Zrange(setName string, offset, limit int64) (val map[string]int64, err error)

根据下标索引区间 [offset, offset + limit) 获取 key-score 对, 下标从 0 开始.注意! 本方法在 offset 越来越大时, 会越慢!

setName zset名称
offset 从此下标处开始返回. 从 0 开始.
limit  最多返回这么多个 key-score 对.
返回 val 排名
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zrange_slice

func (c *Client) Zrange_slice(setName string, offset, limit int64) (key []string, val []int64, err error)

根据下标索引区间 [offset, offset + limit) 获取 获取 key和score 数组对, 下标从 0 开始.注意! 本方法在 offset 越来越大时, 会越慢!

setName zset名称
offset 从此下标处开始返回. 从 0 开始.
limit  最多返回这么多个 key-score 对.
返回 val 排名
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zrank

func (c *Client) Zrank(setName, key string) (val int64, err error)

返回指定 key 在 zset 中的排序位置(排名), 排名从 0 开始. 注意! 本方法可能会非常慢! 请在离线环境中使用.

setName zset名称
key 指定key名
返回 val 排名
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zremrangebyrank

func (c *Client) Zremrangebyrank(setName string, start, end int64) (err error)

删除位置处于区间 [start,end] 的元素.

setName zset名称
start 区间开始,包含start值
end  区间结束,包含end值
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zremrangebyscore

func (c *Client) Zremrangebyscore(setName string, start, end int64) (err error)

删除权重处于区间 [start,end] 的元素.

setName zset名称
start 区间开始,包含start值
end  区间结束,包含end值
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zrrange

func (c *Client) Zrrange(setName string, offset, limit int64) (val map[string]int64, err error)

根据下标索引区间 [offset, offset + limit) 获取 key-score 对, 反向顺序获取.注意! 本方法在 offset 越来越大时, 会越慢!

setName zset名称
offset 从此下标处开始返回. 从 0 开始.
limit  最多返回这么多个 key-score 对.
返回 val 排名
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zrrange_slice

func (c *Client) Zrrange_slice(setName string, offset, limit int64) (key []string, val []int64, err error)

根据下标索引区间 [offset, offset + limit) 获取 key和score 数组对, 反向顺序获取.注意! 本方法在 offset 越来越大时, 会越慢!

setName zset名称
offset 从此下标处开始返回. 从 0 开始.
limit  最多返回这么多个 key-score 对.
返回 val 排名
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zrrank

func (c *Client) Zrrank(setName, key string) (val int64, err error)

返回指定 key 在 zset 中的倒序排名.注意! 本方法可能会非常慢! 请在离线环境中使用.

setName zset名称
key 指定key名
返回 val 排名
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zrscan

func (c *Client) Zrscan(setName string, keyStart string, scoreStart, scoreEnd interface{}, limit int64) (keys []string, scores []int64, err error)

列出 zset 中的 key-score 列表, 反向顺序

setName zset名称
keyStart score_start 对应的 key.
scoreStart 返回 key 的最小权重值(可能不包含, 依赖 key_start), 空字符串表示 -inf.
scoreEnd 返回 key 的最大权重值(包含), 空字符串表示 +inf.
limit  最多返回这么多个元素.
返回 keys 返回符合条件的 key 的数组.
返回 scores 返回符合条件的 key 对应的权重.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zscan

func (c *Client) Zscan(setName string, keyStart string, scoreStart, scoreEnd interface{}, limit int64) (keys []string, scores []int64, err error)

列出 zset 中处于区间 (key_start+score_start, score_end] 的 key-score 列表.

如果 key_start 为空, 那么对应权重值大于或者等于 score_start 的 key 将被返回. 如果 key_start 不为空, 那么对应权重值大于 score_start 的 key, 或者大于 key_start 且对应权重值等于 score_start 的 key 将被返回.
也就是说, 返回的 key 在 (key.score == score_start && key > key_start || key.score > score_start), 并且 key.score <= score_end 区间. 先判断 score_start, score_end, 然后判断 key_start.

setName zset名称
keyStart score_start 对应的 key.
scoreStart 返回 key 的最小权重值(可能不包含, 依赖 key_start), 空字符串表示 -inf.
scoreEnd 返回 key 的最大权重值(包含), 空字符串表示 +inf.
limit  最多返回这么多个元素.
返回 keys 返回符合条件的 key 的数组.
返回 scores 返回符合条件的 key 对应的权重.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zset

func (c *Client) Zset(setName, key string, score int64) (err error)

设置 zset 中指定 key 对应的权重值.

setName zset名称
key zset 中的 key.
score 整数, key 对应的权重值
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zsize

func (c *Client) Zsize(name string) (val int64, err error)

返回 zset 中的元素个数.

name zset的名称.
返回 val 返回包含名字元素的个数.
返回 err,可能的错误,操作成功返回 nil

func (*Client) Zsum

func (c *Client) Zsum(setName string, scoreStart, scoreEnd interface{}) (val int64, err error)

返回 key 处于区间 [start,end] 的 score 的和.

setName zset名称
scoreStart  key 的最小权重值(可能不包含, 依赖 key_start), 空字符串表示 -inf.
scoreEnd  key 的最大权重值(包含), 空字符串表示 +inf.
返回 val 符合条件的 score 的求和
返回 err,可能的错误,操作成功返回 nil

type Connectors

type Connectors struct {
	// contains filtered or unexported fields
}

连接池

func NewPool

func NewPool(conf *conf.Config) (*Connectors, error)

根据配置初始化连接池

conf 连接池的初始化配置
返回 一个可用的连接池
返回 err,可能的错误,操作成功返回 nil

默认值

	GetClientTimeout int 获取连接超时时间,单位为秒,默认1分钟
	MaxPoolSize int 最大连接池个数,默认为10
	MinPoolSize int 最小连接池数,默认为1
	AcquireIncrement int  当连接池中的连接耗尽的时候一次同时获取的连接数。默认值: 3
	MaxIdleTime int 最大空闲时间,指定秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0
 MaxWaitSize int 最大等待数目,当连接池满后,新建连接将排除等待池中连接释放,本值限制最大等待的数量。默认值: 1000

func (*Connectors) Close

func (c *Connectors) Close()

关闭连接池

func (*Connectors) Info

func (c *Connectors) Info() string

状态信息

返回 string,一个详细连接池基本情况的字符串

func (*Connectors) Init

func (c *Connectors) Init(cfg *conf.Config)

用配置文件进行初始化

cfg 配置文件

func (*Connectors) NewClient

func (c *Connectors) NewClient() (*Client, error)

创建一个新连接

返回 *Client 可用的连接
返回 error 可能的错误

func (*Connectors) Start

func (c *Connectors) Start() error

启动连接池

返回 err,可能的错误,操作成功返回 nil

type SSDBClient

type SSDBClient struct {
	Password string
	Host     string
	Port     int

	//packetBuf bytes.Buffer
	//连接写缓冲,默认为8k,单位为kb
	WriteBufferSize int
	//连接读缓冲,默认为8k,单位为kb
	ReadBufferSize int
	//是否重试
	RetryEnabled bool
	//读写超时
	ReadWriteTimeout int

	//创建连接的超时时间,单位为秒。默认值: 5
	ConnectTimeout int
	// contains filtered or unexported fields
}

func (*SSDBClient) Close

func (s *SSDBClient) Close() error

关闭连接

func (*SSDBClient) Do

func (s *SSDBClient) Do(args ...interface{}) ([]string, error)

通用调用方法,如果有需要在所有方法前执行的,可以在这里执行

func (*SSDBClient) IsOpen

func (s *SSDBClient) IsOpen() bool

是否为打开状态

func (*SSDBClient) Ping

func (s *SSDBClient) Ping() bool

状态检查

func (*SSDBClient) Recv

func (s *SSDBClient) Recv() (resp []string, err error)

接收数据

func (*SSDBClient) Send

func (s *SSDBClient) Send(args ...interface{}) error

发送数据

func (*SSDBClient) Start

func (s *SSDBClient) Start() error

打开连接

type Value

type Value string

扩展值,原始类型为 string

func (Value) As

func (v Value) As(value interface{}) (err error)

按json 转换指定类型

value 传入的指针

示例

var abc time.Time
v.As(&abc)

func (Value) Bool

func (v Value) Bool() bool

返回 bool 类型的值

func (Value) Byte

func (v Value) Byte() byte

返回 byte 类型的值

func (Value) Bytes

func (v Value) Bytes() []byte

返回 []byte 类型的值

func (Value) Duration

func (v Value) Duration() time.Duration

返回 time.Duration 类型的值

func (Value) Float32

func (v Value) Float32() float32

返回 float32 类型的值

func (Value) Float64

func (v Value) Float64() float64

返回 float64 类型的值

func (Value) Int

func (v Value) Int() int

返回 int 的值

func (Value) Int16

func (v Value) Int16() int16

返回 int16 的值

func (Value) Int32

func (v Value) Int32() int32

返回 int32 的值

func (Value) Int64

func (v Value) Int64() int64

返回 int64 的值

func (Value) Int8

func (v Value) Int8() int8

返回 int8 的值

func (Value) IsEmpty

func (v Value) IsEmpty() bool

判断是否为空

func (Value) String

func (v Value) String() string

返回 string 的值

func (Value) Time

func (v Value) Time() time.Time

返回 time.Time 类型的值

func (Value) UInt

func (v Value) UInt() uint

返回 uint 类型的值

func (Value) UInt16

func (v Value) UInt16() uint16

返回 uint16 类型的值

func (Value) UInt32

func (v Value) UInt32() uint32

返回 uint32 类型的值

func (Value) UInt64

func (v Value) UInt64() uint64

返回 uint64 的值

func (Value) UInt8

func (v Value) UInt8() uint8

返回 uint8 类型的值

Directories

Path Synopsis
简单的使用配置文件的启动工具,配置文件默认为当前目录下的config.ini ### 示例配置 [ssdb] #ssdb的主机IP host=127.0.0.1 #ssdb的端口 port=8888 #连接池检查时间间隔 health_second=5 #连接密码,默认为空 password= #最大等待数目,当连接池满后,新建连接将等待池中连接释放后才可以继续,本值限制最大等待的数量,超过本值后将抛出异常。
简单的使用配置文件的启动工具,配置文件默认为当前目录下的config.ini ### 示例配置 [ssdb] #ssdb的主机IP host=127.0.0.1 #ssdb的端口 port=8888 #连接池检查时间间隔 health_second=5 #连接密码,默认为空 password= #最大等待数目,当连接池满后,新建连接将等待池中连接释放后才可以继续,本值限制最大等待的数量,超过本值后将抛出异常。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL