222 lines
4.3 KiB
Go
222 lines
4.3 KiB
Go
|
|
/*
|
|||
|
|
未实现的哈希表方法:
|
|||
|
|
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
|
|||
|
|
}
|