222 lines
4.3 KiB
Plaintext
222 lines
4.3 KiB
Plaintext
/*
|
||
未实现的哈希表方法:
|
||
MOVE、SCAN、SORT、FLUSHDB、FLUSHALL、SELECT、SWAPDB
|
||
*/
|
||
package redisUtil
|
||
|
||
import (
|
||
"github.com/gomodule/redigo/redis"
|
||
)
|
||
|
||
/*
|
||
EXISTS key
|
||
可用版本: >= 1.0.0
|
||
时间复杂度: O(1)
|
||
检查给定 key 是否存在。
|
||
|
||
返回值
|
||
若 key 存在,返回 1 ,否则返回 0 。
|
||
*/
|
||
func (this *RedisPool) Exists(key string) (exist bool, err error) {
|
||
conn := this.GetConnection()
|
||
defer conn.Close()
|
||
|
||
var result int
|
||
result, err = redis.Int(conn.Do("EXISTS", key))
|
||
if err != nil {
|
||
return
|
||
}
|
||
|
||
if result == 1 {
|
||
exist = true
|
||
}
|
||
|
||
return
|
||
}
|
||
|
||
/*
|
||
TYPE key
|
||
可用版本: >= 1.0.0
|
||
时间复杂度: O(1)
|
||
返回 key 所储存的值的类型。
|
||
|
||
返回值
|
||
none (key不存在)
|
||
|
||
string (字符串)
|
||
|
||
list (列表)
|
||
|
||
set (集合)
|
||
|
||
zset (有序集)
|
||
|
||
hash (哈希表)
|
||
|
||
stream (流)
|
||
*/
|
||
func (this *RedisPool) Type(key string) (_type string, err error) {
|
||
conn := this.GetConnection()
|
||
defer conn.Close()
|
||
|
||
_type, err = redis.String(conn.Do("TYPE", key))
|
||
return
|
||
}
|
||
|
||
/*
|
||
RENAME key newkey
|
||
|
||
将 key 改名为 newkey 。
|
||
|
||
当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
|
||
|
||
当 newkey 已经存在时, RENAME 命令将覆盖旧值。
|
||
|
||
可用版本:
|
||
>= 1.0.0
|
||
时间复杂度:
|
||
O(1)
|
||
返回值:
|
||
改名成功时提示 OK ,失败时候返回一个错误。
|
||
*/
|
||
func (this *RedisPool) Rename(key, newkey string) (err error) {
|
||
conn := this.GetConnection()
|
||
defer conn.Close()
|
||
|
||
_, err = conn.Do("RENAME", key, newkey)
|
||
return
|
||
}
|
||
|
||
/*
|
||
RENAMENX key newkey
|
||
|
||
当且仅当 newkey 不存在时,将 key 改名为 newkey 。
|
||
|
||
当 key 不存在时,返回一个错误。
|
||
|
||
可用版本:
|
||
>= 1.0.0
|
||
时间复杂度:
|
||
O(1)
|
||
返回值:
|
||
修改成功时,返回 1 。
|
||
如果 newkey 已经存在,返回 0 。
|
||
*/
|
||
func (this *RedisPool) RenameNX(key, newkey string) (successful bool, err error) {
|
||
conn := this.GetConnection()
|
||
defer conn.Close()
|
||
|
||
var result int
|
||
result, err = redis.Int(conn.Do("RENAMENX", key, newkey))
|
||
if err != nil {
|
||
return
|
||
}
|
||
|
||
if result == 1 {
|
||
successful = true
|
||
}
|
||
|
||
return
|
||
}
|
||
|
||
/*
|
||
DEL key [key ...]
|
||
|
||
删除给定的一个或多个 key 。
|
||
|
||
不存在的 key 会被忽略。
|
||
|
||
可用版本:
|
||
>= 1.0.0
|
||
时间复杂度:
|
||
O(N), N 为被删除的 key 的数量。
|
||
删除单个字符串类型的 key ,时间复杂度为O(1)。
|
||
删除单个列表、集合、有序集合或哈希表类型的 key ,时间复杂度为O(M), M 为以上数据结构内的元素数量。
|
||
返回值:
|
||
被删除 key 的数量。
|
||
*/
|
||
func (this *RedisPool) Del(keys ...string) (count int, err error) {
|
||
conn := this.GetConnection()
|
||
defer conn.Close()
|
||
|
||
count, err = redis.Int(conn.Do("DEL", redis.Args{}.AddFlat(keys)...))
|
||
return
|
||
}
|
||
|
||
/*
|
||
从当前数据库中随机返回(不删除)一个 key 。
|
||
|
||
可用版本:
|
||
>= 1.0.0
|
||
时间复杂度:
|
||
O(1)
|
||
返回值:
|
||
当数据库不为空时,返回一个 key 。
|
||
当数据库为空时,返回 nil 。
|
||
*/
|
||
func (this *RedisPool) RandomKey() (key string, exist bool, err error) {
|
||
conn := this.GetConnection()
|
||
defer conn.Close()
|
||
|
||
var reply interface{}
|
||
reply, err = conn.Do("RANDOMKEY")
|
||
if err != nil {
|
||
return
|
||
}
|
||
if reply == nil {
|
||
return
|
||
}
|
||
|
||
key, err = redis.String(reply, err)
|
||
if err != nil {
|
||
return
|
||
}
|
||
|
||
exist = true
|
||
return
|
||
}
|
||
|
||
/*
|
||
DBSIZE
|
||
可用版本: >= 1.0.0
|
||
时间复杂度: O(1)
|
||
返回当前数据库的 key 的数量。
|
||
|
||
返回值
|
||
当前数据库的 key 的数量。
|
||
*/
|
||
func (this *RedisPool) DBSize() (keyCount int, err error) {
|
||
conn := this.GetConnection()
|
||
defer conn.Close()
|
||
|
||
keyCount, err = redis.Int(conn.Do("DBSIZE"))
|
||
return
|
||
}
|
||
|
||
/*
|
||
KEYS pattern
|
||
|
||
查找所有符合给定模式 pattern 的 key 。
|
||
|
||
KEYS * 匹配数据库中所有 key 。
|
||
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
|
||
KEYS h*llo 匹配 hllo 和 heeeeello 等。
|
||
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
|
||
特殊符号用 \ 隔开
|
||
|
||
KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。
|
||
可用版本:
|
||
>= 1.0.0
|
||
时间复杂度:
|
||
O(N), N 为数据库中 key 的数量。
|
||
返回值:
|
||
符合给定模式的 key 列表。
|
||
*/
|
||
func (this *RedisPool) Keys(pattern string) (keyList []string, err error) {
|
||
conn := this.GetConnection()
|
||
defer conn.Close()
|
||
|
||
keyList, err = redis.Strings(conn.Do("KEYS", pattern))
|
||
return
|
||
}
|